{"version":3,"sources":["views/TestCategory/TestByCategoryDTO.ts","views/Checkout/Cart/CartDataRow.tsx","views/Checkout/Cart/CartHeaderRow.tsx","views/Checkout/Cart/CartContainer.tsx","views/Checkout/TotalCheckout.tsx","views/Checkout/TestInCart.tsx","../../shared/lib/utils/TestCodeRestrictions.js","views/Checkout/CheckoutContainer.tsx","views/TestCategory/TestCategoryTitle.tsx","views/TestDetails/GetSampleTypeImage.tsx","views/TestDetails/useStyles.ts","views/TestDetails/TestDetails.tsx","../../shared/lib/utils/QueryStringHelper.js","views/TestDetails/TestDetailsContainer.tsx","views/TestDetails/index.ts"],"names":["currencyFormatter","Intl","NumberFormat","style","currency","maximumFractionDigits","appTheme","themes","useStyles","makeStyles","tablerow","_tablerow","textAlign","Object","defineProperty","breakpoints","up","borderBottomWidth","borderBottomColor","colors","grey","borderBottomStyle","datarow","_datarow","alignItems","down","fontWeight","gap","buttonBox","width","buttonLabel","_buttonLabel","textTransform","fontFamily","fontSize","sizes","lg","horizontalRule","icon","padding","iconBox","height","backgroundColor","color","borderRadius","removeButton","powderBlue","white","float","CartDataRow","_ref","headers","cartItem","idx","removeItem","classes","react_default","a","createElement","Grid","container","key","concat","className","Hidden","xsDown","item","xs","src","alt","map","header","field","gridSize","formatter","Button","label","onClick","e","index","toNumber","currentTarget","name","isNaN","toString","smUp","_header","black","headerCell","xxxs","CartHeaderRow","capitalize","_container","marginBottom","md","sm","emptyCart","CartContainer","cart","Paper","elevation","undefined","length","Typography","variant","Fragment","Cart_CartHeaderRow","Cart_CartDataRow","margin","gridRoot","_gridRoot","justifyContent","value","paddingTop","button","deepSeaBlue","&:hover","darken","mediumBlue","buttonDisabled","darkGrey","totalBox","flexBasis","TotalCheckout","total","checkoutUrl","disabled","testsInCart","disabledReason","spacing","gridContainerSpacing","window","appConfig","features","isPriceDisabled","display","format","Tooltip","title","href","appInsights","trackEvent","localStorage","testCodesToBlockOrderingTogether","testCodesThatCanOrderTogether","testCodesWithSpecificAllowedTests","addToCart","test","JSON","parse","getItem","newCartTest","testCode","code","price","displayTestCode","push","setItem","stringify","dispatchEvent","Event","getDisabledReason","testCodes","conflictingTests","karyotypeTestCodeInCart","duplicateMessage","x","disableAddToCartReason","tags","retVal","find","karyotypeCmaTests","includes","testsCantBeOrderTogetherBlock","blockGroup","some","blockedTest","t","ct","indexOfBlockingTest","findIndex","indexOfDuplicateTc","testsInCartToBeOrderedTogether","filter","block","exclusiveTestsToBeOrderedTogether","listsOfOrderTogetherTests","list","y","forEach","listThatCanBeOrderTogether","togetherTestsInCart","cartTest","_conflictingTests","listsOfTestsToBeOrderedTogetherWithAddedTC","testsInCartThatCannotBeOrderedWithAddedTC","apply","toConsumableArray","Set","Boolean","shouldExcludeTestCode","CheckoutContainer","history","pop","document","_useState","useState","_useState2","slicedToArray","setCart","_useState3","_useState4","setCheckoutUrl","useEffect","tests","ctc","isNil","isEmpty","toLowerCase","buildOrderUrlQuery","ordersUrl","join","theme","useTheme","mobileWidth","useMediaQuery","disabledCheckoutReason","testsInCartThatNeedToBeOrderedTogether","testsInCartThatAreNotInTheTogetherList","exclusiveTest","components","hideLogin","centerStyle","TestCategoryTitle","category","ShoppingCartOutlined","flexWrap","Cart_CartContainer","cartData","assign","splice","position","bottom","marginLeft","Checkout_TotalCheckout","values","reduce","_ref2","_material_ui_core__WEBPACK_IMPORTED_MODULE_0__","__webpack_require__","_material_ui_core__WEBPACK_IMPORTED_MODULE_1__","react__WEBPACK_IMPORTED_MODULE_2__","react__WEBPACK_IMPORTED_MODULE_2___default","n","font","marginRight","Icon","mapNameToImage","toUpperCase","indexOf","buttons","marginTop","& > *","detailsContainer","fonts","gene","geneList","columnCount","columnWidth","columnGap","listStyle","& li","paddingLeft","& li::before","content","paddingRight","specimenDefault","specimenHeader","specimenHeaderMobile","specimenTable","specimenTableMobile","flexDirection","specimenDivider","borderBottom","borderTop","specimenRow","lightBrown","specimenType","titleQuestion","_objectSpread","fontStyles","heading","topLine","diseaseContainer","specialNotes","& a","textDecoration","info","tat","tatIcon","tatTime","mediumBrown","xl","tatDisclaimer","tatLabel","sampleRecommendedText","fontStyle","detectedDefault","detectedHeader","detectedTableHeader","detectedHeaderMobile","detectedTableContainer","overflowY","maxHeight","detectedTableBody","detectedTable","detectedTableMobile","detectedDivider","detectedRow","detectedGene","buttonWrapper","infoIcon","moment","require","momentDurationFormatSetup","Info","dangerouslySetInnerHTML","__html","replace","TestDetails","kitLink","orderDisabledReason","setOrderDisabledReason","addEventListener","handleAddToCartClick","testByCategory","categories","location","isEmptyOrZeroOrUndefined","input","trim","startsWith","showTat","type","sampleTypes","sampleType","requisitionLink","size","id","isReanalysisTest","hasOrderSections","InfoOutlined","OrderButton","redirectTo","redirectReason","split","catalogUrl","description","whoIsThisAppropriateFor","howIsDiseaseInherited","limitations","turnAroundTimeText","turnAroundTime","duration","TestDetails_Info","methodology","coverage","detectedConditions","targetRegionCoverage","performCNV","affectedSystems","analytesAnalyzed","proteinText","patientResources","providerReferences","otherLinksToCoverageSearchTools","nysApproved","Table","TableHead","TableRow","TableCell","s","specimenRequirements","shippingConditions","TableBody","displayInCatalog","sort","b","displayOrder","row","component","scope","recommendedSample","genes","geneText","replaceAll","probes","showDetectedConditionsPanels","isDetectedConditionsDiabled","TableContainer","stickyHeader","localeCompare","omim","diseases","disease","getGeneNullText","cptCodes","QueryStringHelper_QueryStringHelper","QueryStringHelper","search","classCallCheck","this","parsedQuery","query_string_default","createClass","defaultToReturn","delimiter","Array","isArray","console","error","result","Number","warn","withRouter","match","data","setData","setKitLink","_ref3","clientTestCode","setClientTestCode","getStringValue","params","getDetails","then","kits","ctcData","views_TestDetails_TestDetails","TestDetailsContainer"],"mappings":"oIA+CaA,EAAoB,IAAIC,KAAKC,aAAa,QAAS,CAC9DC,MAAO,WACPC,SAAU,MACVC,sBAAuB,4OC1CnBC,EAAWC,IAAOD,SAClBE,EAAYC,YAAW,CAC3BC,UAAQC,EAAA,CACNC,UAAW,UADLC,OAAAC,EAAA,EAAAD,CAAAF,EAELL,EAASS,YAAYC,GAAG,MAAQ,CAC/BC,kBAAmB,MACnBC,kBAAmBC,IAAOC,KAC1BC,kBAAmB,UALfR,OAAAC,EAAA,EAAAD,CAAAF,EAAA,UAOG,QAPHA,GASRW,SAAOC,EAAA,GAAAV,OAAAC,EAAA,EAAAD,CAAAU,EACJjB,EAASS,YAAYC,GAAG,MAAQ,CAC/BQ,WAAY,WAFTX,OAAAC,EAAA,EAAAD,CAAAU,EAIJjB,EAASS,YAAYU,KAAK,MAAQ,CACjCb,UAAW,QACXc,WAAY,OAEZC,IAAK,SARFJ,GAWPK,UAAW,CACTC,MAAO,QAETC,aAAWC,EAAA,CACTC,cAAe,aACfC,WAAY,oBAFHpB,OAAAC,EAAA,EAAAD,CAAAkB,EAGRzB,EAASS,YAAYC,GAAG,MAAQ,CAC/BkB,SAAUC,QAAMC,KAJTvB,OAAAC,EAAA,EAAAD,CAAAkB,EAMRzB,EAASS,YAAYU,KAAK,MAAQ,CACjCS,SAAU,YAPHH,GAUXM,eAAgB,CACdR,MAAO,QAETS,KAAM,CAAEC,QAAS,QACjBC,QAAS,CACPX,MAAO,OACPY,OAAQ,OACRC,gBAAiB,UACjBC,MAAO,UACPC,aAAc,OAEhBC,aAAc,CACZF,MAAOxB,IAAO2B,WACdJ,gBAAiBvB,IAAO4B,MACxBC,MAAO,WAoEIC,EAzD0C,SAAAC,GAKnD,IAJJC,EAIID,EAJJC,QACAC,EAGIF,EAHJE,SACAC,EAEIH,EAFJG,IACAC,EACIJ,EADJI,WAEMC,EAAU/C,IAQhB,OACEgD,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMC,WAAS,EAACC,IAAG,OAAAC,OAAST,GAAOU,UAAWR,EAAQ7C,UACpD8C,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMC,WAAS,EAACG,UAAWR,EAAQjC,SACjCkC,EAAAC,EAAAC,cAACM,EAAA,EAAD,CAAQC,QAAM,GACZT,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMO,MAAI,EAACL,IAAG,QAAAC,OAAUT,EAAV,SAAsBc,GAAI,GACtCX,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQf,SACtBgB,EAAAC,EAAAC,cAAA,OACEU,IAAK,+BACLC,IAAI,WACJN,UAAWR,EAAQjB,UAK1Ba,EAAQmB,IAAI,SAACC,GAAD,OACXf,EAAAC,EAAAC,cAACC,EAAA,EAAD,CACEO,MAAI,EACJL,IAAG,QAAAC,OAAUT,EAAV,KAAAS,OAAiBS,EAAOC,OAC3BL,GAAII,EAAOE,WAAY,GAEtBF,EAAOG,UACJH,EAAOG,UAAUtB,EAASmB,EAAOC,QACjCpB,EAASmB,EAAOC,WAI1BhB,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAME,IAAG,iBAAAC,OAAmBT,GAAOU,UAAWR,EAAQ3B,WACpD4B,EAAAC,EAAAC,cAACiB,EAAA,EAAD,CACEZ,UAAWR,EAAQV,aACnBU,QAAS,CAAEqB,MAAOrB,EAAQzB,aAC1B+C,QArCkB,SAACC,GACzB,IAAMC,EAAQC,mBAASF,EAAEG,cAAcC,MAClCC,MAAMJ,IACTzB,EAAWyB,IAmCPG,KAAM7B,EAAI+B,YAJZ,WASF5B,EAAAC,EAAAC,cAACM,EAAA,EAAD,CAAQqB,MAAI,GACV7B,EAAAC,EAAAC,cAAA,MAAIK,UAAWR,EAAQlB,oBC/GzB/B,EAAWC,IAAOD,SAClBE,EAAYC,YAAW,CAC3B8D,QAAMe,EAAA,CACJ3C,MAAOxB,IAAOoE,MACdhD,QAAS,eAFL1B,OAAAC,EAAA,EAAAD,CAAAyE,EAGHhF,EAASS,YAAYC,GAAG,MAAQ,CAC/B0B,gBAAiBvB,IAAOC,KACxBM,WAAY,OACZd,UAAW,WANTC,OAAAC,EAAA,EAAAD,CAAAyE,EAQHhF,EAASS,YAAYU,KAAK,MAAQ,CACjCb,UAAW,QACXe,IAAK,SAVH2D,GAaNE,WAAW3E,OAAAC,EAAA,EAAAD,CAAA,GACRP,EAASS,YAAYU,KAAK,MAAQ,CACjCS,SAAUC,QAAMsD,SA8BPC,EArB8C,SAAAxC,GAAiB,IAAdC,EAAcD,EAAdC,QACxDI,EAAU/C,IAChB,OACEgD,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMC,WAAS,EAACG,UAAWR,EAAQgB,QACjCf,EAAAC,EAAAC,cAACM,EAAA,EAAD,CAAQC,QAAM,GACZT,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMO,MAAI,EAACL,IAAI,cAAcM,GAAI,KAElChB,EAAQmB,IAAI,SAACC,GAAD,OACXf,EAAAC,EAAAC,cAACC,EAAA,EAAD,CACEO,MAAI,EACJL,IAAG,UAAAC,OAAYS,EAAOC,OACtBL,GAAII,EAAOE,WAAY,EACvBV,UAAWR,EAAQiC,YAElBjB,EAAOK,OAASe,qBAAWpB,EAAOC,YCvCvClE,EAAWC,IAAOD,SAClBE,EAAYC,YAAW,CAC3BmD,WAASgC,EAAA,CACP/D,MAAO,QACPgE,aAAc,QAFPhF,OAAAC,EAAA,EAAAD,CAAA+E,EAGNtF,EAASS,YAAYC,GAAG,MAAQ,CAC/BkB,SAAUC,QAAM2D,KAJXjF,OAAAC,EAAA,EAAAD,CAAA+E,EAMNtF,EAASS,YAAYU,KAAK,MAAQ,CACjCS,SAAUC,QAAM4D,KAPXH,GAUTI,UAAW,CACTpF,UAAW,SACXiB,MAAO,OACPU,QAAS,UA8CE0D,EApC8C,SAAA/C,GAIvD,IAHJC,EAGID,EAHJC,QACA+C,EAEIhD,EAFJgD,KACA5C,EACIJ,EADJI,WAEMC,EAAU/C,IAEhB,OACEgD,EAAAC,EAAAC,cAACyC,EAAA,EAAD,CAAOC,UAAW,EAAGrC,UAAWR,EAAQK,WACtCJ,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMC,WAAS,SACFyC,IAATH,GAAsC,IAAhBA,EAAKI,SAC3B9C,EAAAC,EAAAC,cAAC6C,EAAA,EAAD,CAAYC,QAAQ,KAAKzC,UAAWR,EAAQyC,WAA5C,sBAIDE,EAAKI,OAAS,GACb9C,EAAAC,EAAAC,cAAAF,EAAAC,EAAAgD,SAAA,KACEjD,EAAAC,EAAAC,cAACgD,EAAD,CAAevD,QAASA,IACxBK,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMC,WAAS,GACZsC,EAAK5B,IAAI,SAAClB,EAAUC,GAAX,OACRG,EAAAC,EAAAC,cAACiD,EAAD,CACE9C,IAAKR,EACLF,QAASA,EACTC,SAAUA,EACVC,IAAKA,EACLC,WAAYA,qCCjDxBhD,EAAWC,IAAOD,SAClBE,EAAYC,YAAW,CAC3BmD,UAAU/C,OAAAC,EAAA,EAAAD,CAAA,CACR4B,OAAQ,cACRP,SAAUC,QAAM4D,IACfzF,EAASS,YAAYC,GAAG,MAAQ,CAC/Ba,MAAO,QACP+E,OAAQ,WAGZC,UAAQC,EAAA,CACNjF,MAAO,OACPkF,eAAgB,UAFVlG,OAAAC,EAAA,EAAAD,CAAAiG,EAGLxG,EAASS,YAAYC,GAAG,MAAQ,CAC/B4F,OAAQ,WAJJ/F,OAAAC,EAAA,EAAAD,CAAAiG,EAMLxG,EAASS,YAAYU,KAAK,MAAQ,CACjCc,QAAS,WAPLuE,GAURlC,MAAO,CAAElD,WAAY,QACrBsF,MAAO,GACPpF,UAAUf,OAAAC,EAAA,EAAAD,CAAA,CACRoG,WAAY,WACX3G,EAASS,YAAYU,KAAK,MAAQ,CACjCI,MAAO,QAGXqF,OAAOrG,OAAAC,EAAA,EAAAD,CAAA,CACL6B,gBAAiBvB,IAAOgG,YACxBvE,aAAc,MACdf,MAAO,QACPY,OAAQ,OACR2E,UAAW,CACT1E,gBAAiB2E,YAAOlG,IAAOmG,WAAY,MAE5ChH,EAASS,YAAYU,KAAK,MAAQ,CACjCI,MAAO,SAGX0F,eAAgB,CACd7E,gBAAiBvB,IAAOqG,UAE1B1F,YAAa,CACXE,cAAe,aACfW,MAAOxB,IAAO4B,MACdd,WAAY,mBACZC,SAAUC,QAAM4D,IAElB0B,SAAS5G,OAAAC,EAAA,EAAAD,CAAA,CACP0B,QAAS,aACRjC,EAASS,YAAYU,KAAK,MAAQ,CACjCiG,UAAW,UAyEFC,EA5D8C,SAAAzE,GAMvD,IALJ0E,EAKI1E,EALJ0E,MACAC,EAII3E,EAJJ2E,YACAC,EAGI5E,EAHJ4E,SACAC,EAEI7E,EAFJ6E,YACAC,EACI9E,EADJ8E,eAEMzE,EAAU/C,IAQhB,OACEgD,EAAAC,EAAAC,cAACyC,EAAA,EAAD,CAAOC,UAAW,EAAGrC,UAAWR,EAAQK,WACtCJ,EAAAC,EAAAC,cAACC,EAAA,EAAD,CACEC,WAAS,EACTqE,QAASC,uBACTnE,UAAWR,EAAQsD,UAEnBrD,EAAAC,EAAAC,cAACC,EAAA,EAAD,CACEC,WAAS,EACTM,MAAI,EACJC,GAAI,GACJ4C,eAAe,gBACfhD,UAAWR,EAAQkE,SACnBtH,MACEgI,OAAOC,UAAUC,SAASC,gBAAkB,CAAEC,QAAS,QAAW,IAGpE/E,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMI,UAAWR,EAAQqB,OAAzB,SACApB,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMI,UAAWR,EAAQyD,OACtBhH,IAAkBwI,OAAOZ,KAG9BpE,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMO,MAAI,EAACH,UAAWR,EAAQ3B,WAC5B4B,EAAAC,EAAAC,cAAC+E,EAAA,EAAD,CAASC,MAAOV,GACdxE,EAAAC,EAAAC,cAAA,YACEF,EAAAC,EAAAC,cAACiB,EAAA,EAAD,CACEpB,QAAS,CACPqB,MAAOrB,EAAQzB,YACfgG,SAAUvE,EAAQgE,gBAEpBxD,UAAWR,EAAQ2D,OACnByB,KAAMd,EACNC,SAAUA,EACVjD,QAtCM,WAClB+D,IAAYC,WAAW,CAAE3D,KAAM,eAAiB6C,GAChDe,aAAaxF,WCvEM,UDmGT,uBEnHPyF,EAAA,8OACP,iFACOC,EAAA,2CAEAC,EAAA,8FCeA,IAAMC,EAAY,SAACC,GACxB,IAAMjD,EAAqBkD,KAAKC,MAAMP,aAAaQ,QFJ9B,SEIkD,MACjEC,EAA0B,CAC9BrE,KAAMiE,EAAKjE,KACXsE,SAAUL,EAAKM,KACfC,MAAOP,EAAKO,OAAS,EACrBC,gBAAiBR,EAAKQ,iBAExBf,IAAYC,WAAW,CAAE3D,KAAM,aAAeqE,GAC9CrD,EAAK0D,KAAKL,GACVT,aAAae,QFbQ,OEaST,KAAKU,UAAU5D,IAC7CiC,OAAO4B,cAAc,IAAIC,MAAM,aAuI3BC,EAAoB,SACxBC,EACAC,EACAC,GAEA,IAAMC,EAAgB,QAAAvG,OACpBoG,EAAU5D,OAAS,EAAnB,QAAAxC,OACYoG,EACL5F,IAAI,SAACgG,GACJ,OAAOA,IAERlF,YALP,SAAAtB,OAMaoG,EACN5F,IAAI,SAACgG,GACJ,OAAOA,IAERlF,YAXa,6BAAAtB,OAapBqG,EAAiB7D,OAAS,EACtB6D,EACG7F,IAAI,SAACJ,GACJ,OAAOA,IAERkB,WACH,eAnBgB,gDAqBtB,MACE,GAAAtB,OAAUuG,EADRD,EACF,2FAEA,MAISG,EAAyB,SAACpB,GACrC,OAtK4B,SAACA,GAA8B,IAMnDM,EAAgCN,EAAhCM,KAAME,EAA0BR,EAA1BQ,gBAAiBa,EAASrB,EAATqB,KAC3BC,OAA6BpE,EAC3BH,EAAqBkD,KAAKC,MAAMP,aAAaQ,QFzB9B,SEyBkD,MAEjEc,EAA0BlE,EAAKwE,KAAK,SAACxG,GAAD,OACxCiE,OAAOC,UAAUuC,kBAAkBC,SAAS1G,EAAKsF,YAG7CqB,EAAgC9B,EAAiC2B,KACrE,SAACI,GAAD,OACEA,EAAWC,KACT,SAACC,GAAD,OACEA,IAAgBvB,GAChBqB,EAAWC,KAAK,SAACE,GAAD,OAAO/E,EAAK6E,KAAK,SAACG,GAAD,OAAQA,EAAG1B,WAAayB,UAI3DE,EAAsBjF,EAAKkF,UAC/B,SAAClH,GAAD,OACE2G,GACAA,EAA8BE,KAC5B,SAACC,GAAD,OACE9G,EAAKsF,WAAawB,GAAe9G,EAAKyF,kBAAoBqB,MAI5DK,EAAqBnF,EAAKkF,UAC9B,SAAClH,GAAD,OACEA,EAAKsF,SAASoB,SAASnB,IACtBvF,EAAKyF,iBACJA,GACAzF,EAAKyF,gBAAgBiB,SAASjB,IAC/BA,GAAmBzF,EAAKsF,SAASoB,SAASjB,KAGzC2B,EAAiCpF,EAAKqF,OAAO,SAACrH,GAAD,OACjD8E,EAA8B+B,KAAK,SAACS,GAAD,OACjCA,EAAMZ,SAAS1G,EAAKsF,cAIlBiC,EAAoCvF,EAAKqF,OAAO,SAACrH,GAAD,OACpD8E,EAA8B+B,KAC5B,SAACS,GAAD,OACEA,EAAMZ,SAAS1G,EAAKsF,WACpBP,EAAkC2B,SAAS1G,EAAKsF,cAIhDkC,EAA4B1C,EAA8BuC,OAC9D,SAACI,GAAD,OACEA,EAAKZ,KAAK,SAACT,GAAD,OACRgB,EAA+BP,KAC7B,SAACa,GAAD,OAAOA,EAAEjC,kBAAoBW,GAAKsB,EAAEpC,WAAac,QAKrDH,EAA6B,GAkCjC,GAjCIkB,GAAsB,GACxBlB,EAAiBP,KAAK1D,EAAKmF,GAAoB7B,UAG7C2B,GAAuB,GACzBhB,EAAiBP,KAAK1D,EAAKiF,GAAqB3B,UAGhD8B,EAA+BhF,OAAS,GACxCoF,EAA0BpF,OAAS,GACnCmF,EAAkCnF,OAAS,GAChB,GAA3B6D,EAAiB7D,QAIjBoF,EAA0BG,QAAQ,SAACC,GAC7B5F,EAAK6E,KAAK,SAACT,GAAD,OAAOA,EAAEX,kBAAoBF,GAAQa,EAAEd,WAAaC,KAChEU,EAAiBP,KAAKH,GAExB,IAAMsC,EAAsBD,EAA2BP,OAAO,SAACpC,GAAD,OAC5DmC,EAA+BP,KAC7B,SAACiB,GAAD,OACEA,EAASrC,kBAAoBR,GAAQ6C,EAASxC,WAAaL,MAG5D2C,EAA2Bf,KAAK,SAACT,GAAD,OAAOA,IAAMb,KAChDsC,EAAoBF,QAAQ,SAACvB,GAC3BH,EAAiBP,KAAKU,OAO5BrB,EAAkC2B,SAASnB,IAC3CR,EAAkC2B,SAASjB,GAAmB,IAC9D,KAAAsC,EACMC,EACJR,EAA0BH,OAAO,SAACC,GAAD,OAAWA,EAAMZ,SAASnB,KACvD0C,EAA4CjG,EAAKqF,OACrD,SAACrH,GAAD,OACGgI,EAA2CnB,KAAK,SAACS,GAAD,OAC/CA,EAAMZ,SAAS1G,EAAKsF,eAG1ByC,EAAA9B,GAAiBP,KAAjBwC,MAAAH,EAAApL,OAAAwL,EAAA,EAAAxL,CACKsL,EAA0C7H,IAAI,SAAC6E,GAAD,OAAUA,EAAKK,aAkBpE,OAdAW,EAAgBtJ,OAAAwL,EAAA,EAAAxL,CAAO,IAAIyL,IAAInC,KACV7D,OAAS,IAC5BmE,EAASR,EACP,CAACR,GACDU,EACAoC,QAAQnC,UAIC/D,IAATmE,GAAsBA,EAAKI,SAAS,yBACtCH,EACE,gHAGGA,EAqCA+B,CAAsBrD,IAAS,IAkKzBsD,IA/JmD,SAAAvJ,GAE5DA,EADJwJ,QACI,IACEvJ,EAAwB,CAC5B,CACEqB,MAAO,OACPI,MAAO,aAET,CACEJ,MAAO,WACPI,MAAO,YACPF,UAAW,SAACsC,GAAD,OAAmBA,EAAM5B,aAEtC,CACEZ,MAAO,QACPC,SAAU,EACVC,UAAW,SAACsC,GAAD,YACCX,IAAVW,EAAsB,GAAKhH,IAAkBwI,OAAOxB,MAI1DmB,OAAOC,UAAUC,SAASC,iBAAmBnF,EAAQwJ,MAErDC,SAASlE,MAAQ,6BArBb,IAAAmE,EAsBoBC,mBACtB1D,KAAKC,MAAMP,aAAaQ,QFnNL,SEmNyB,OAvB1CyD,EAAAlM,OAAAmM,EAAA,EAAAnM,CAAAgM,EAAA,GAsBG3G,EAtBH6G,EAAA,GAsBSE,EAtBTF,EAAA,GAAAG,EAyBkCJ,mBAAS,IAzB3CK,EAAAtM,OAAAmM,EAAA,EAAAnM,CAAAqM,EAAA,GAyBGrF,EAzBHsF,EAAA,GAyBgBC,EAzBhBD,EAAA,GA2BJE,oBAAU,WACRvE,aAAae,QFxNM,OEwNWT,KAAKU,UAAU5D,IAC7CiC,OAAO4B,cAAc,IAAIC,MAAM,YAC/B,IAAMsD,EAAkB,GAmBxBpH,EAAK2F,QAAQ,SAAC1C,GACZmE,EAAM1D,KAlBmB,SAACT,GAC1B,IAAIK,EAAWL,EAAKK,SAChB+D,EAAMpE,EAAKK,SAEZgE,gBAAMrE,EAAKQ,kBACX8D,kBAAQtE,EAAKQ,kBACyB,SAAvCR,EAAKQ,gBAAgB+D,gBAErBlE,EAAWL,EAAKQ,iBAAmBR,EAAKK,UAE1C,IAAIiB,EAAM,QAAA3G,OAAW0F,GAIrB,OAHIA,IAAa+D,IACf9C,GAAM,QAAA3G,OAAYyJ,IAEb9C,EAIIkD,CAAmBxE,MAEhCiE,EAAc,GAAAtJ,OACTqE,OAAOC,UAAUwF,UADR,YAAA9J,OAC4BwJ,EAAMO,KAAK,KADvC,oBAGb,CAAC3H,EAAM+G,EAASG,IAEnB,IAMMU,EAAQC,cACRC,EAAcC,YAAcH,EAAM/M,YAAYU,KAAK,OAKnDyM,EAAyB,WAC7B,GAAIhI,EAAKI,QAAU,EACjB,MAAO,mCAGT,IAAM6H,EAAyCjI,EAAKqF,OAAO,SAACrH,GAAD,OACzD8E,EAA8B+B,KAC5B,SAACS,GAAD,OACEA,EAAMZ,SAAS1G,EAAKsF,WACpBP,EAAkC2B,SAAS1G,EAAKsF,cAIhD4E,EAAyClI,EAAKqF,OAAO,SAACrH,GAAD,OACzD8E,EAA8B+B,KAC5B,SAACS,GAAD,OACGA,EAAMZ,SAAS1G,EAAKsF,WACrB2E,EAAuCpD,KAAK,SAACsD,GAAD,OAC1C7C,EAAMZ,SAASyD,EAAc7E,gBAKrC,OACE2E,EAAuC7H,OAAS,GAChD8H,EAAuC9H,OAAS,EAEzC2D,EACLmE,EAAuC9J,IAAI,SAACgG,GAAD,OAAOA,EAAEd,WACpD2E,EAAuC7J,IAAI,SAACgG,GAAD,OAAOA,EAAEd,WACpD+C,QACErG,EAAKwE,KAAK,SAACxG,GAAD,OACRiE,OAAOC,UAAUuC,kBAAkBC,SAAS1G,EAAKsF,cAMlD,IAOT,OACEhG,EAAAC,EAAAC,cAAAF,EAAAC,EAAAgD,SAAA,KACEjD,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CACEC,WAAW,EACXC,YAAa,CACX9L,gBAAiB,UACjBH,QAAS,gBACTN,WAAY,yDAGduB,EAAAC,EAAAC,cAAC+K,EAAA,EAAD,CAAmBC,SAAS,QAAQpM,KAAMqM,MAC1CnL,EAAAC,EAAAC,cAAA,OAAKvD,MAAO,CAAEoI,QAAS,OAAQqG,SAAU,SACvCpL,EAAAC,EAAAC,cAACmL,EAAD,CACE1L,QAASA,EACT+C,KAAMA,EACN5C,WAxES,SAACyB,GAClB,IAAM+J,EAAWjO,OAAOkO,OAAO,GAAI7I,GACnC4I,EAASE,OAAOjK,EAAO,GACvBkI,EAAQ6B,OAwEJtL,EAAAC,EAAAC,cAAA,OACEvD,MACE6N,EACI,CACEiB,SAAU,QACVC,OAAQ,EACRC,WAAY,OACZtN,MAAO,QAET,IAGN2B,EAAAC,EAAAC,cAAC0L,EAAD,CACExH,MA/ED/G,OAAOwO,OAAOnJ,GAAMoJ,OAAO,SAAC1H,EAAD2H,GAAA,OAAsB3H,EAAtB2H,EAAU7F,OAA2B,GAgF/D7B,YAAaA,EACbC,SApCDyE,QAAQ2B,KAqCPnG,YAAa7B,EACb8B,eAAgBkG,4CCjW5B,IAAAsB,EAAAC,EAAA,KAAAC,EAAAD,EAAA,KAAAE,EAAAF,EAAA,GAAAG,EAAAH,EAAAI,EAAAF,GAGMnP,EAAYC,YAAW,CAC3BiI,MAAO,CACLnG,QAAS,OACTN,WAAY,UACZP,WAAY,OACZQ,SAAU,OACVqG,QAAS,OACT/G,WAAY,UAEdc,KAAM,CACJwN,KAAM,UACNC,YAAa,aA+BFtB,IAtBsD,SAAAvL,GAG/D,IAFJwL,EAEIxL,EAFJwL,SACApM,EACIY,EADJZ,KAEMiB,EAAU/C,IAChB,GAAI8B,EAAM,CACR,IAAM0N,EAAO1N,EAEb,OACEsN,EAAAnM,EAAAC,cAACgM,EAAA,EAAD,CAAYlJ,QAAQ,KAAKzC,UAAWR,EAAQmF,OACzCkH,EAAAnM,EAAAC,cAACsM,EAAD,CAAMjM,UAAWR,EAAQjB,MAAOA,GAChCoM,GAIP,OACEkB,EAAAnM,EAAAC,cAACgM,EAAA,EAAD,CAAYlJ,QAAQ,KAAKzC,UAAWR,EAAQmF,OACzCgG,gNCxCMuB,EAAiB,SAAC/K,GAC7B,IAA4C,IAAxCA,EAAKgL,cAAcC,QAAQ,WAEc,IAAzCjL,EAAKgL,cAAcC,QAAQ,WACc,IAAzCjL,EAAKgL,cAAcC,QAAQ,WACc,IAAzCjL,EAAKgL,cAAcC,QAAQ,UAE3B,MAAO,kBAIX,IAA+C,IAA3CjL,EAAKgL,cAAcC,QAAQ,cAEmB,IAA9CjL,EAAKgL,cAAcC,QAAQ,gBACgB,IAA3CjL,EAAKgL,cAAcC,QAAQ,YAE3B,MAAO,wBAIX,IAA8C,IAA1CjL,EAAKgL,cAAcC,QAAQ,aAEc,IAAzCjL,EAAKgL,cAAcC,QAAQ,WACe,IAA1CjL,EAAKgL,cAAcC,QAAQ,WAE3B,MAAO,0BAIX,IAA6C,IAAzCjL,EAAKgL,cAAcC,QAAQ,SAC7B,OAA4C,IAAxCjL,EAAKgL,cAAcC,QAAQ,QACtB,kBAEqC,IAA1CjL,EAAKgL,cAAcC,QAAQ,UACtB,yBAEqC,IAA1CjL,EAAKgL,cAAcC,QAAQ,UACtB,yBAEoC,IAAzCjL,EAAKgL,cAAcC,QAAQ,SACtB,wBAEoC,IAAzCjL,EAAKgL,cAAcC,QAAQ,SACtB,uBAEF,iBAGT,IAA6C,IAAzCjL,EAAKgL,cAAcC,QAAQ,SAC7B,MAAO,qBAGT,IAAqD,IAAjDjL,EAAKgL,cAAcC,QAAQ,iBAAyB,CACtD,IAA2C,IAAvCjL,EAAKgL,cAAcC,QAAQ,OAC7B,MAAO,UAET,IAAgD,IAA5CjL,EAAKgL,cAAcC,QAAQ,YAC7B,MAAO,qBAIX,OAAQjL,EAAKgL,eACX,IAAK,QACH,MAAO,iBAET,IAAK,cACH,MAAO,kBAET,IAAK,sBACH,MAAO,0BAET,IAAK,aACH,MAAO,iBAET,IAAK,2BACH,MAAO,+BAET,IAAK,gBACH,MAAO,oBAET,IAAK,cACH,MAAO,kBAET,IAAK,QACH,MAAO,YAET,IAAK,SACH,MAAO,aAET,IAAK,SACH,MAAO,aAET,IAAK,QACH,MAAO,YAET,IAAK,kBACH,MAAO,sBAET,IAAK,QACH,MAAO,YAET,IAAK,MACH,MAAO,uBAET,IAAK,eACH,MAAO,mBAGX,SAAApM,OAAUoB,EAAV,6PCzGazE,kBAAW,CACxB2P,QAAS,CACPC,UAAW,MACXzP,UAAW,QACX0P,QAAS,CACPnB,WAAY,SAEd5G,QAAS,OACT/G,WAAY,SACZuF,eAAgB,YAElBwJ,iBAAkB,CAChBhO,QAAS,QACTL,SAAUsO,IAAMrO,MAAMgC,IAExBsM,KAAM,CACJ/N,gBAAiBvB,IAAO2B,WACxBZ,SAAUsO,IAAMrO,MAAM4D,GACtBpD,MAAOxB,IAAO4B,MACdN,OAAQ,QACRZ,MAAO,OAETS,KAAM,CACJG,OAAQ,SAEViO,SAAU,CACRJ,QAAS,CACP1J,OAAQ,SACR+J,YAAa,OACbC,YAAa,QACbC,UAAW,QAGflF,KAAM,CACJ0E,UAAW,EACXS,UAAW,OACXC,OAAQ,CACNC,YAAa,MACb7B,WAAY,QAEd8B,eAAgB,CACdtO,MAAOxB,IAAO2B,WACdoO,QAAS,WACTC,aAAc,WAGlBC,gBAAiB,CACflP,SAAU,QACVS,MAAOxB,IAAOgG,aAEhBkK,eAAgB,CACd1O,MAAOxB,IAAOgG,YACdnF,cAAe,aAEjBsP,qBAAsB,CACpB3O,MAAOxB,IAAOgG,YACdnF,cAAe,YACfqO,UAAW,MACXxK,aAAc,OAEhB0L,cAAe,CACb1P,MAAO,QAET2P,oBAAqB,CACnBjJ,QAAS,OACTkJ,cAAe,SACftC,WAAY,QACZY,YAAa,SAEf2B,gBAAiB,CACfC,aAAc,oBACdC,UAAW,oBACX/P,MAAO,OACPwO,UAAW,OACXxK,aAAc,OAEhBgM,YAAa,CACXF,aAAc,aAAexQ,IAAO2Q,WACpCF,UAAW,aAAezQ,IAAO2Q,YAEnCC,aAAc,CACZ7P,SAAU,QACVF,cAAe,YACfW,MAAOxB,IAAO2B,YAEhBkP,mWAAaC,CAAA,GACRzB,IAAM0B,WAAWC,QADT,CAEX9B,UAAW,MACXxK,aAAc,WAEhBuM,QAAS,CACP7J,QAAS,QAEX8J,iBAAkB,CAChBzB,YAAa,OACbzB,WAAY,QAEdmD,aAAc,CACZC,MAAO,CACLC,eAAgB,OAChB9Q,WAAY,OACZiB,MAAOxB,IAAO2B,aAGlB8B,MAAO,CACLjC,MAAOxB,IAAOgG,YACdzF,WAAY,QAEd+Q,KAAM,CAAE5M,aAAc,QAASmL,YAAa,SAC5C0B,IAAK,CACHrC,UAAW,MACXxK,aAAc,OAEhB8M,QAAS,CACPlQ,OAAQ,MACRO,MAAO,QAET4P,QAAS,CACPjQ,MAAOxB,IAAO0R,YACd3Q,SAAUsO,IAAMrO,MAAM2Q,IAExBC,cAAe,CACbpQ,MAAOxB,IAAO0R,YACd3Q,SAAUsO,IAAMrO,MAAMgC,IAExB6O,SAAU,CACRrQ,MAAOxB,IAAO0R,YACd3Q,SAAUsO,IAAMrO,MAAM4D,IAExBkN,sBAAuB,CACrBC,UAAW,SACX3Q,QAAS,OAEX4Q,gBAAiB,CACfjR,SAAU,OACVS,MAAOxB,IAAOgG,aAEhBiM,eAAgB,CACdzQ,MAAOxB,IAAOgG,YACdnF,cAAe,YACfE,SAAU,QAEZmR,oBAAqB,CACnBxR,MAAO,OACPa,gBAAiBvB,IAAO4B,MACxBH,aAAc,mBAEhB0Q,qBAAsB,CACpB3Q,MAAOxB,IAAOgG,YACdnF,cAAe,YACfqO,UAAW,MACXxK,aAAc,OAEhB0N,uBAAwB,CACtBC,UAAW,SACXC,UAAW,QACX7Q,aAAc,mBAEhB8Q,kBAAmB,GACnBC,cAAe,CACb9R,MAAO,OACPa,gBAAiBvB,IAAO4B,OAE1B6Q,oBAAqB,CACnBrL,QAAS,OACTkJ,cAAe,SACftC,WAAY,QACZY,YAAa,SAEf8D,gBAAiB,CACflC,aAAc,oBACdC,UAAW,oBACX/P,MAAO,OACPwO,UAAW,OACXxK,aAAc,OAEhBiO,YAAa,CACXnC,aAAc,aAAexQ,IAAOqG,SACpCoK,UAAW,aAAezQ,IAAOqG,UAEnCuM,aAAc,CACZ7R,SAAU,OACVF,cAAe,YACfW,MAAOxB,IAAO2B,YAEhBkR,cAAe,CACbzL,QAAS,OACT/G,WAAY,SACZuF,eAAgB,YAElBkN,SAAU,CACR9E,WAAY,kBC9JV+E,EAASC,EAAQ,KACvBC,IAA0BF,GAO1B,IAAMG,EAGD,SAAAnR,GAAsB,IAAnB0B,EAAmB1B,EAAnB0B,MAAOoC,EAAY9D,EAAZ8D,MACPzD,EAAU/C,IAChB,OAAKwG,EAIHxD,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMC,WAAS,GACbJ,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMO,MAAI,EAAC6B,GAAI,GAAID,GAAI,EAAG/B,UAAWR,EAAQqB,OAC1CA,GAEHpB,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMO,MAAI,EAAC6B,GAAI,GAAID,GAAI,GAAI/B,UAAWR,EAAQkP,MAC5CjP,EAAAC,EAAAC,cAAA,QACEK,UAAWR,EAAQ+O,aACnBgC,wBAAyB,CACvBC,OAAQvN,EAAMwN,QAAQ,kBAAmB,aAX1C,MAylBIC,EAtkB0C,SAAAlF,GAGnD,IAFJpG,EAEIoG,EAFJpG,KACAuL,EACInF,EADJmF,QAEMnR,EAAU/C,IADZqM,EAEkDC,mBACpDvC,YAAuBpB,IAHrB4D,EAAAlM,OAAAmM,EAAA,EAAAnM,CAAAgM,EAAA,GAEG8H,EAFH5H,EAAA,GAEwB6H,EAFxB7H,EAAA,GAKJM,oBAAU,WACR,IAAMvF,EAAWyC,YAAuBpB,GACxCyL,EAAuB9M,IACtB,CAACqB,IAEJhB,OAAO0M,iBAAiB,UAAW,WACjC,IAAM/M,EAAWyC,YAAuBpB,GACxCyL,EAAuB9M,KAEzB,IAAMgN,EAAuB,WAC3B,IAAMC,EAAsC,CAC1CtL,KAAMN,EAAKM,KACXvE,KAAMiE,EAAKjE,KACXwE,MAAOP,EAAKO,MACZC,gBAAiBR,EAAKQ,gBACtBqL,WAAY7L,EAAK6L,YAAc,IAE5BL,GACHzL,YAAU6L,GAEZ5M,OAAO8M,SAAStM,KAAO,aAqDnBuM,EAA2B,SAACC,GAChC,YACY9O,IAAV8O,GACU,OAAVA,GACiB,KAAjBA,EAAMC,QACND,EAAME,WAAW,MAIfC,EAAU,SAACC,GACf,OAAIA,GACML,EAAyBK,EAAK7C,KAEjCvJ,EAAKqM,YAAYzK,KACtB,SAAC0K,GAAD,OAAiBP,EAAyBO,EAAW/C,QAIzD,OACElP,EAAAC,EAAAC,cAAAF,EAAAC,EAAAgD,SAAA,KACEjD,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,qBACA9K,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQ6O,SACtB5O,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAuBnF,KAAMA,IAC7B3F,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQ6M,SACrBjH,EAAKuM,iBACJlS,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CACEqH,KAAK,QACLhN,KAAMQ,EAAKuM,gBACXE,GAAG,aAHL,aAQDlB,GACClR,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAiBqH,KAAK,QAAQhN,KAAM+L,EAASkB,GAAG,cAAhD,cApFU,WAClB,IAAMC,EACJ1M,EAAKqB,MAAQrB,EAAKqB,KAAKI,SAAS,uBAClC,OAAIzB,EAAK2M,iBAELtS,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQyQ,eACtBxQ,EAAAC,EAAAC,cAAC+E,EAAA,EAAD,CAASC,MAAOmN,EAAmB,GAAKlB,GACtCnR,EAAAC,EAAAC,cAAA,YACEF,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CACEqH,KAAK,QACLC,GAAG,aACH/Q,QAASiQ,EACThN,SAAU6M,EAAoBrO,OAAS,GAJzC,WAUHuP,GACCrS,EAAAC,EAAAC,cAAC+E,EAAA,EAAD,CAASC,MAAM,+GACblF,EAAAC,EAAAC,cAACqS,EAAA,EAAD,CAAchS,UAAWR,EAAQ0Q,aAMpC,KA8DA+B,KAGLxS,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQgN,kBACtB/M,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAWnF,KAAMA,IAChBA,GAAQA,EAAK8M,YAAc9M,EAAK+M,eAC/B1S,EAAAC,EAAAC,cAAA,WACEF,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQ+O,cAAenJ,EAAK+M,gBAC3C/M,EAAK8M,YACJ9M,EAAK8M,WAAWE,MAAM,KAAK7R,IAAI,SAACmF,GAAD,OAC7BjG,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CACEqH,KAAK,QACLhN,KAAI,GAAA7E,OAAKqE,OAAOC,UAAUgO,WAAtB,aAAAtS,OAA4C2F,GAChDmM,GAAG,iBAEFnM,MAKTjG,EAAAC,EAAAC,cAAA,WACEF,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQyO,eAAxB,UACU,IACRxO,EAAAC,EAAAC,cAAA,QACE4Q,wBAAyB,CACvBC,OAAQpL,EAAKjE,QAJnB,KASCiE,EAAKkN,aACJ7S,EAAAC,EAAAC,cAAA,OACEK,UAAWR,EAAQ+O,aACnBgC,wBAAyB,CACvBC,OAAQpL,EAAKkN,YAAY7B,QAAQ,kBAAmB,WAMzDrL,EAAKmN,yBACJ9S,EAAAC,EAAAC,cAAAF,EAAAC,EAAAgD,SAAA,KACEjD,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQyO,eAAxB,2BAGAxO,EAAAC,EAAAC,cAAA,OACEK,UAAWR,EAAQ+O,aACnBgC,wBAAyB,CACvBC,OAAQpL,EAAKmN,wBAAwB9B,QACnC,kBACA,YAMTrL,EAAKoN,uBACJ/S,EAAAC,EAAAC,cAAAF,EAAAC,EAAAgD,SAAA,KACEjD,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQyO,eAAxB,kCAGAxO,EAAAC,EAAAC,cAAA,OACE4Q,wBAAyB,CACvBC,OAAQpL,EAAKoN,sBAAsB/B,QACjC,kBACA,YAMTrL,EAAKmJ,cACJ9O,EAAAC,EAAAC,cAAAF,EAAAC,EAAAgD,SAAA,KACEjD,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQyO,eAAxB,gBACAxO,EAAAC,EAAAC,cAAA,OACE4Q,wBAAyB,CACvBC,OAAQpL,EAAKmJ,aAAakC,QACxB,kBACA,YAMTrL,EAAKqN,aACJhT,EAAAC,EAAAC,cAAAF,EAAAC,EAAAgD,SAAA,KACEjD,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQyO,eAAxB,eACAxO,EAAAC,EAAAC,cAAA,OACE4Q,wBAAyB,CACvBC,OAAQpL,EAAKqN,YAAYhC,QAAQ,kBAAmB,aAK1DrL,EAAKsN,oBAAsBtN,EAAKuN,iBAChClT,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMC,WAAS,EAACG,UAAWR,EAAQmP,KACjClP,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMO,MAAI,EAACC,GAAI,GACbX,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQmP,KACtBlP,EAAAC,EAAAC,cAAA,OACEK,UAAWR,EAAQoP,QACnBvO,IAAI,gCACJC,IAAI,0BAENb,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQqP,SACrBzJ,EAAKsN,oBACJvC,EAAOyC,SAASxN,EAAKuN,gBAAgBlO,OAAO,YAEhDhF,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQyP,UAAxB,sBAGH7J,EAAKsN,oBACJtN,EAAKsN,mBAAmB7L,SAAS,MAC/BpH,EAAAC,EAAAC,cAACC,EAAA,EAAD,CAAMO,MAAI,EAACC,GAAI,EAAGJ,UAAWR,EAAQmP,KACnClP,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQwP,eAAxB,gGAQVvP,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAuB5F,MAAM,yBAC3BlF,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,cAAcoC,MAAOmC,EAAK0N,cACtCrT,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,WAAWoC,MAAOmC,EAAK2N,WACnCtT,EAAAC,EAAAC,cAACkT,EAAD,CACEhS,MAAM,sBACNoC,MAAOmC,EAAK4N,qBAEdvT,EAAAC,EAAAC,cAACkT,EAAD,CACEhS,MAAO,yBACPoC,MAAOmC,EAAK6N,uBAEdxT,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,cAAcoC,MAAOmC,EAAK8N,aACtCzT,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,mBAAmBoC,MAAOmC,EAAK+N,kBAC3C1T,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,oBAAoBoC,MAAOmC,EAAKgO,mBAC5C3T,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,WAAWoC,MAAOmC,EAAKiO,cACnC5T,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,oBAAoBoC,MAAOmC,EAAKkO,mBAC5C7T,EAAAC,EAAAC,cAACkT,EAAD,CACEhS,MAAM,sBACNoC,MAAOmC,EAAKmO,qBAEd9T,EAAAC,EAAAC,cAACkT,EAAD,CACEhS,MAAM,8BACNoC,MAAOmC,EAAKoO,kCAEd/T,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,0BAA0BoC,MAAOmC,EAAKqO,eAEnDrO,EAAKqM,aACJhS,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAuB5F,MAAM,yBAC3BlF,EAAAC,EAAAC,cAACM,EAAA,EAAD,CAAQC,QAAM,GACZT,EAAAC,EAAAC,cAAC+T,EAAA,EAAD,CAAO1T,UAAWR,EAAQgO,eACxB/N,EAAAC,EAAAC,cAACgU,EAAA,EAAD,KACElU,EAAAC,EAAAC,cAACiU,EAAA,EAAD,KACEnU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CAAWzX,MAAO,CAAE0B,MAAO,QAC3B2B,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ8N,eACnBlR,MAAO,CAAE0B,MAAO,QAFlB,QAMCyT,KACC9R,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ8N,eACnBlR,MAAO,CAAE0B,MAAO,QAFlB,OAODsH,EAAKqM,YAAYzK,KAChB,SAAC8M,GAAD,QAASA,EAAEC,wBAEXtU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ8N,eACnBlR,MAAO,CAAE0B,MAAO,QAFlB,gBAODsH,EAAKqM,YAAYzK,KAChB,SAAC8M,GAAD,QAASA,EAAEE,sBAEXvU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ8N,eACnBlR,MAAO,CAAE0B,MAAO,QAFlB,yBASN2B,EAAAC,EAAAC,cAACsU,EAAA,EAAD,KACG7O,EAAKqM,YACHjK,OAAO,SAACjB,GAAD,OAAOA,EAAE2N,mBAChBC,KAAK,SAACzU,EAAG0U,GAAJ,OACJ1U,EAAE2U,aAAeD,EAAEC,aAAe,GAAK,IAExC9T,IAAI,SAAC+T,GAAD,OACH7U,EAAAC,EAAAC,cAACiU,EAAA,EAAD,CACE9T,IAAKwU,EAAInT,KACTnB,UAAWR,EAAQsO,aAEnBrO,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CAAWU,UAAU,KAAKC,MAAM,OAC7BtI,EAAeoI,EAAInT,OAClB1B,EAAAC,EAAAC,cAAA,OACEU,IAAG,WAAAN,OAAamM,EAAeoI,EAAInT,OACnCnB,UAAWR,EAAQjB,KACnB+B,IAAKgU,EAAInT,QAIf1B,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CAAW7T,UAAWR,EAAQwO,cAC3BsG,EAAInT,MAENoQ,KACC9R,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CAAW7T,UAAWR,EAAQ6N,iBAC3BkE,EAAQ+C,IAAQA,EAAI3F,KAGxBvJ,EAAKqM,YAAYzK,KAChB,SAAC8M,GAAD,QAASA,EAAEC,wBAEXtU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ6N,gBACnBkD,wBAAyB,CACvBC,OACG8D,GACCA,EAAIP,sBACJO,EAAIP,qBAAqBtD,QACvB,kBACA,SAEJ,MAIPrL,EAAKqM,YAAYzK,KAChB,SAAC8M,GAAD,QAASA,EAAEE,sBAEXvU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ6N,gBACnBkD,wBAAyB,CACvBC,OACG8D,GACCA,EAAIN,oBACJM,EAAIN,mBAAmBvD,QACrB,kBACA,SAEJ,WAQjBrL,EAAKqP,mBACJhV,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQ0P,uBACrB9J,EAAKqP,oBAIZhV,EAAAC,EAAAC,cAACM,EAAA,EAAD,CAAQqB,MAAI,GACV7B,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQiO,qBACrBrI,EAAKqM,YAAYlR,IAAqB,SAAC+T,EAAKtT,GAAN,OACrCvB,EAAAC,EAAAC,cAAA,aACKqB,GAASvB,EAAAC,EAAAC,cAAA,MAAIK,UAAWR,EAAQmO,kBACnClO,EAAAC,EAAAC,cAAA,OACEK,UAAWR,EAAQ+N,qBACnBnR,MAAO,CAAE0B,MAAO,QAFlB,QAMA2B,EAAAC,EAAAC,cAAA,OAAKvD,MAAO,CAAEuB,WAAY,MAAQ2W,EAAInT,MACtC1B,EAAAC,EAAAC,cAAA,OACEK,UAAWR,EAAQ+N,qBACnBnR,MAAO,CAAE0B,MAAO,QAFlB,gBAOA2B,EAAAC,EAAAC,cAAA,WACG,IACAyF,EAAKqM,YAAYzK,KAChB,SAAC8M,GAAD,QAASA,EAAEC,wBAEXtU,EAAAC,EAAAC,cAAA,OACEK,UAAWR,EAAQ6N,gBACnBkD,wBAAyB,CACvBC,OAAS8D,GAAOA,EAAIP,sBAAyB,OAMrDtU,EAAAC,EAAAC,cAAA,OACEK,UAAWR,EAAQ+N,qBACnBnR,MAAO,CAAE0B,MAAO,QAFlB,uBAOA2B,EAAAC,EAAAC,cAAA,WACGyF,EAAKqM,YAAYzK,KAChB,SAAC8M,GAAD,QAASA,EAAEE,sBAEXvU,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQ6N,iBACrBiH,EAAIN,yBAOhB5O,EAAKqP,mBACJhV,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQ0P,uBACrB9J,EAAKqP,sBAMdrP,EAAKsP,OAAStP,EAAKuP,WACnBlV,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAuB5F,MAAM,iBAC3BlF,EAAAC,EAAAC,cAAA,OAAKK,UAAWR,EAAQmN,eACHrK,IAAlB8C,EAAKuP,UACe,KAAlBvP,EAAKuP,UAAmBvP,EAAKsP,OAC5BjV,EAAAC,EAAAC,cAAA,OACE4Q,wBAAyB,CACvBC,OAAQpL,EAAKsP,MACVnU,IAAI,SAACmM,GAAD,OAAUA,EAAKvL,OACnBgT,OACA9S,WACAuT,WAAW,IAAK,gBAIRtS,IAAlB8C,EAAKuP,UACJlV,EAAAC,EAAAC,cAAA,OACE4Q,wBAAyB,CACvBC,OAAQpL,EAAKuP,SAASC,WAAW,IAAK,aAOjDxP,EAAKyP,QACJpV,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAuB5F,MAAM,UAC3BlF,EAAAC,EAAAC,cAAA,gBACmB2C,IAAhB8C,EAAKyP,QACJpV,EAAAC,EAAAC,cAAA,OACEK,UAAWR,EAAQkP,KACnB6B,wBAAyB,CAAEC,OAAQpL,EAAKyP,YAMjDzQ,OAAOC,UAAUyQ,6BAA6BjO,SAC7CzB,EAAKM,MAAQ,YAIXpD,IADA8B,OAAOC,UAAUC,SAASyQ,+BAG3B3Q,OAAOC,UAAUC,SAASyQ,6BAC3B3P,EAAKsP,OACLtP,EAAKsP,MAAMnS,OAAS,GAClB9C,EAAAC,EAAAC,cAAA,WACEF,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAuB5F,MAAM,uBAC3BlF,EAAAC,EAAAC,cAAC+T,EAAA,EAAD,CAAO1T,UAAWR,EAAQ8P,qBACxB7P,EAAAC,EAAAC,cAACgU,EAAA,EAAD,KACElU,EAAAC,EAAAC,cAACiU,EAAA,EAAD,KACEnU,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ6P,eACnBjT,MAAO,CAAE0B,MAAO,SAElB2B,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ6P,eACnBjT,MAAO,CAAE0B,MAAO,QAFlB,QAMA2B,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ6P,eACnBjT,MAAO,CAAE0B,MAAO,QAFlB,gBAMA2B,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ6P,eACnBjT,MAAO,CAAE0B,MAAO,QAFlB,2BAMA2B,EAAAC,EAAAC,cAAA,OAAKvD,MAAO,CAAE0B,MAAO,aAI3B2B,EAAAC,EAAAC,cAACqV,EAAA,EAAD,CAAgBhV,UAAWR,EAAQgQ,wBACjC/P,EAAAC,EAAAC,cAAC+T,EAAA,EAAD,CAAO1T,UAAWR,EAAQoQ,cAAeqF,cAAY,GACnDxV,EAAAC,EAAAC,cAACsU,EAAA,EAAD,CAAWjU,UAAWR,EAAQmQ,mBAC3BvK,EAAKsP,MACHP,KAAK,SAACzU,EAAG0U,GAAJ,OAAU1U,EAAEyB,KAAK+T,cAAcd,EAAEjT,QACtCZ,IAAI,SAACmM,GAAD,OACHjN,EAAAC,EAAAC,cAACiU,EAAA,EAAD,CACE9T,IAAK4M,EAAKvL,KACVnB,UAAWR,EAAQuQ,aAEnBtQ,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ4P,gBACnBhT,MAAO,CAAE0B,MAAO,SAElB2B,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQwQ,aACnB5T,MAAO,CAAE0B,MAAO,QAEf4O,EAAKvL,MAER1B,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ4P,gBACnBhT,MAAO,CAAE0B,MAAO,QAEf4O,EAAKyI,MAAQ,IAEhB1V,EAAAC,EAAAC,cAACkU,EAAA,EAAD,CACE7T,UAAWR,EAAQ4P,gBACnBhT,MAAO,CAAE0B,MAAO,QAEd4O,EAAK0I,UACL1I,EAAK0I,SACF5N,OACC,SAAC6N,GAAD,OACEA,EAAQlU,MACS,QAAjBkU,EAAQlU,OAEXZ,IAAI,SAAC8U,GAAD,OAAaA,EAAQlU,OACzB2I,KAAK,OAjflB,SAAC4C,GACvB,MAAkB,mBAAdtH,EAAKM,KACP,GAAA3F,OAAU2M,EAAKvL,KAAf,2CACuB,mBAAdiE,EAAKM,KACd,GAAA3F,OAAU2M,EAAKvL,KAAf,sCACuB,mBAAdiE,EAAKM,KACd,GAAA3F,OAAU2M,EAAKvL,KAAf,wBACuB,kBAAdiE,EAAKM,KACd,GAAA3F,OAAU2M,EAAKvL,KAAf,wBACuB,mBAAdiE,EAAKM,KACd,GAAA3F,OAAU2M,EAAKvL,KAAf,wCACuB,mBAAdiE,EAAKM,KACd,GAAA3F,OAAU2M,EAAKvL,KAAf,iDACuB,mBAAdiE,EAAKM,KACd,GAAA3F,OAAU2M,EAAKvL,KAAf,kCACuB,kBAAdiE,EAAKM,KACd,GAAA3F,OAAU2M,EAAKvL,KAAf,2CAEK,GAgeyBmU,CAAgB5I,YAUxCjN,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAuB5F,MAAM,uBAC3BlF,EAAAC,EAAAC,cAACkT,EAAD,CAAMhS,MAAM,YAAYoC,MAAOmC,EAAKmQ,WACpC9V,EAAAC,EAAAC,cAACkT,EAAD,CACEhS,MAAM,aACNoC,MAAM,iJC7nBlBuS,EAEJ,WACA,SAAAC,EAAAC,GACI5Y,OAAA6Y,EAAA,EAAA7Y,CAAe8Y,KAAAH,GAEnBG,KAAAF,SACAE,KAAAC,YAAuBC,EAAApW,EAAW4F,MAAAoQ,GAoIlC,OA1HE5Y,OAAAiZ,EAAA,EAAAjZ,CAAY2Y,EAAA,EACd3V,IAAA,iBACAmD,MAAA,SAAAnD,EAAAkW,EAAAC,GACA,IAAAhT,EAAA2S,KAAAC,YAAA/V,GAGA,OAFAkW,KAAA,QAEA1T,IAAAW,GAAA,OAAAA,EACA+S,GAAA,GACOE,MAAAC,QAAAlT,GACPA,EAAA6G,KAAAmM,GAEAhT,IASG,CACHnD,IAAA,sBACAmD,MAAA,SAAAnD,GACA,IAAAwL,EAAA,GACArI,EAAA2S,KAAAC,YAAA/V,GAEA,GAAAmD,EAAA,CACA,GAAAiT,MAAAC,QAAAlT,GACA,OAAAA,EACSqI,EAAAzF,KAAA5C,GAGT,OAAAqI,IASG,CACHxL,IAAA,iBACAmD,MAAA,SAAAnD,EAAAkW,GACA,IAAA/S,EAAA2S,KAAAC,YAAA/V,GAGA,GAFAkW,KAAA,OAEA1T,IAAAW,GAAA,OAAAA,EACA,OAAA+S,EACO,GAAAE,MAAAC,QAAAlT,GAEP,OADAmT,QAAAC,MAAA,+BACAL,EAEA,IAAAM,EAAAC,OAAAtT,GACA,OAAAsT,OAAAnV,MAAAkV,GAAAN,EAAAM,IAGG,CACHxW,IAAA,kBACAmD,MAAA,SAAAnD,EAAAkW,GACA,IAAA/S,EAAA2S,KAAAC,YAAA/V,GAGA,OAFAkW,MAAA,OAEA1T,IAAAW,GAAA,OAAAA,EACA+S,EACOE,MAAAC,QAAAlT,IACPmT,QAAAC,MAAA,+BACAL,GAEA,SAAA/S,IAUG,CACHnD,IAAA,mBACAmD,MAAA,SAAAnD,EAAAmD,GAUA,YATAX,IAAAW,GAAA,OAAAA,IACAA,EAAA,IAGA,kBAAAA,IACAA,IAAA5B,YAGAuU,KAAAC,YAAA/V,GAAAmD,EACa6S,EAAApW,EAAWqG,UAAA6P,KAAAC,eASrB,CACH/V,IAAA,eACAmD,MAAA,SAAAnD,EAAAkW,GACA,IAAA/S,EAAA2S,KAAAC,YAAA/V,GAEA,QAAAwC,IAAAW,GAAA,OAAAA,GAAA,KAAAA,EACA,OAAA+S,EAGA,IACA,OAAAE,MAAAC,QAAAlT,GACAA,EAAAV,OAAA,EAAA8C,KAAAC,MAAArC,EAAA,IAAA+S,EAEA3Q,KAAAC,MAAArC,GAEO,MAAAoT,GAEP,OADAD,QAAAI,KAAA,+BAAAzW,OAAAD,EAAA,MAAAuW,GACAL,OAKAP,EAzIA,GCoDegB,cAnDsD,SAAAtX,GAG/D,IAFL+R,EAEK/R,EAFL+R,SACAwF,EACKvX,EADLuX,MACK5N,EAYmBC,mBAXA,CACvB8I,GAAI,EACJ1Q,KAAM,GACNuE,KAAM,GACN4M,YAAa,GACboC,MAAO,GACP5B,YAAa,GACbrB,YAAa,GACblD,aAAc,GACdkF,YAAa,KAVTzK,EAAAlM,OAAAmM,EAAA,EAAAnM,CAAAgM,EAAA,GAYE6N,EAZF3N,EAAA,GAYQ4N,EAZR5N,EAAA,GAAAG,EAayBJ,mBAAS,IAblCK,EAAAtM,OAAAmM,EAAA,EAAAnM,CAAAqM,EAAA,GAaEwH,EAbFvH,EAAA,GAaWyN,EAbXzN,EAAA,GAAAoC,EAcuCzC,2BAAoBzG,EAd3DwU,EAAAha,OAAAmM,EAAA,EAAAnM,CAAA0O,EAAA,GAcEuL,EAdFD,EAAA,GAckBE,EAdlBF,EAAA,GAgBCtN,EADY,IAAIiM,EAAkBvE,EAASwE,QAC3BuB,eAAe,OAE/BxR,EAAYiR,EAAMQ,OAAexR,KAuBvC,OAtBA4D,oBAAU,WACTC,IAAM4N,WAAW1R,GAAU2R,KAAK,SAAChS,GAChCwR,EAAQxR,MAEP,CAACK,IAEJ6D,oBAAU,WACLqN,GAAQA,EAAKU,MAAQV,EAAKU,KAAK9U,OAAS,GAC3CsU,EAAU,GAAA9W,OACNqE,OAAOC,UAAUwF,UADX,yBAAA9J,OAC4C0F,KAGrD,CAACkR,EAAMlR,IAEV6D,oBAAU,WACLE,EACHD,IAAM4N,WAAW3N,GAAK4N,KAAK,SAACE,GAC3BN,EAAkBM,KAEbN,OAAkB1U,IACvB,CAACkH,IAGH/J,EAAAC,EAAAC,cAAC4K,EAAA,EAAD,CAAeC,WAAW,GACzB/K,EAAAC,EAAAC,cAAC4X,EAAD,CAAanS,KAAM2R,GAAkBJ,EAAMhG,QAASA,OCnDxC6G","file":"static/js/9.7632e6b8.chunk.js","sourcesContent":["import { Category, Test, TestSummaryBriefDTO } from \"@bg/shared/lib/dal/tests\";\r\nimport { GridSize } from \"@material-ui/core\";\r\n\r\nexport const mainCategoriesHardCoded = [\r\n  \"Pregnancy\",\r\n  \"NICU\",\r\n  \"Pediatric\",\r\n  \"Oncology\",\r\n  \"Reproductive\",\r\n];\r\n\r\nexport class TestByCategoryDTO {\r\n  name: string;\r\n  testCode: string;\r\n  categories?: Category[];\r\n  mainCategoryName: string;\r\n  displayCategory?: string;\r\n  subCategories?: string[];\r\n  shortDescription?: string;\r\n  cptCodes?: string; // comma separated\r\n  price?: number;\r\n\r\n  constructor(test: Test) {\r\n    // need to add price and short description to [PlatformTestCatalog].[dbo].[Tests]\r\n    this.name = test.name;\r\n    this.testCode = test.code;\r\n    if (test.description) {\r\n      this.shortDescription = `${test.description\r\n        .split(\" \")\r\n        .slice(0, 14)\r\n        .join(\" \")}...`;\r\n    }\r\n    this.cptCodes = test.cptCodes;\r\n    this.mainCategoryName = \"\";\r\n    if (test.categories) {\r\n      this.subCategories = test.categories\r\n        .map((category) => category.name)\r\n        .filter((category) => !mainCategoriesHardCoded.includes(category));\r\n      // assuming only one main category per test\r\n      const mainCategory = test.categories.find((category) =>\r\n        mainCategoriesHardCoded.includes(category.name),\r\n      );\r\n      this.mainCategoryName = (mainCategory && mainCategory.name) || \"\";\r\n    }\r\n  }\r\n}\r\n\r\nexport const currencyFormatter = new Intl.NumberFormat(\"en-US\", {\r\n  style: \"currency\",\r\n  currency: \"USD\",\r\n  maximumFractionDigits: 0,\r\n});\r\n\r\nexport interface TestCategoryTableHeaders {\r\n  field: keyof Omit<TestSummaryBriefDTO, \"tags\">;\r\n  label?: string;\r\n  gridSize?: GridSize;\r\n  formatter?: (value: any) => string;\r\n}\r\n","import { colors, themes } from '@bg/shared/lib/theme';\r\nimport { sizes } from '@bg/shared/lib/theme/fonts';\r\nimport { Button, Grid, Hidden, makeStyles } from '@material-ui/core';\r\nimport { toNumber } from 'lodash';\r\nimport React, { FunctionComponent } from 'react';\r\n\r\nimport { CartHeader, TestInCart } from './../TestInCart';\r\n\r\nconst appTheme = themes.appTheme;\r\nconst useStyles = makeStyles({\r\n  tablerow: {\r\n    textAlign: \"center\",\r\n    [appTheme.breakpoints.up(\"sm\")]: {\r\n      borderBottomWidth: \"1px\",\r\n      borderBottomColor: colors.grey,\r\n      borderBottomStyle: \"solid\",\r\n    },\r\n    padding: \"1rem\",\r\n  },\r\n  datarow: {\r\n    [appTheme.breakpoints.up(\"sm\")]: {\r\n      alignItems: \"center\",\r\n    },\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      textAlign: \"start\",\r\n      fontWeight: \"bold\",\r\n      // this is a bit of a hack, if we put price back we'll need to reassess this\r\n      gap: \"3rem\",\r\n    },\r\n  },\r\n  buttonBox: {\r\n    width: \"100%\",\r\n  },\r\n  buttonLabel: {\r\n    textTransform: \"capitalize\",\r\n    fontFamily: \"Roboto Condensed\",\r\n    [appTheme.breakpoints.up(\"sm\")]: {\r\n      fontSize: sizes.lg,\r\n    },\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      fontSize: \"initial\",\r\n    },\r\n  },\r\n  horizontalRule: {\r\n    width: \"100%\",\r\n  },\r\n  icon: { padding: \"1rem\" },\r\n  iconBox: {\r\n    width: \"96px\",\r\n    height: \"99px\",\r\n    backgroundColor: \"#C0EBFE\",\r\n    color: \"#626262\",\r\n    borderRadius: \"6px\",\r\n  },\r\n  removeButton: {\r\n    color: colors.powderBlue,\r\n    backgroundColor: colors.white,\r\n    float: \"right\",\r\n  },\r\n});\r\n\r\ninterface CartDataRowProps {\r\n  headers: CartHeader[];\r\n  cartItem: TestInCart;\r\n  idx: number;\r\n  removeItem: (index: number) => void;\r\n}\r\n\r\nconst CartDataRow: FunctionComponent<CartDataRowProps> = ({\r\n  headers,\r\n  cartItem,\r\n  idx,\r\n  removeItem,\r\n}) => {\r\n  const classes = useStyles();\r\n  const handleRemoveClick = (e: React.MouseEvent<HTMLButtonElement>) => {\r\n    const index = toNumber(e.currentTarget.name);\r\n    if (!isNaN(index)) {\r\n      removeItem(index);\r\n    }\r\n  };\r\n\r\n  return (\r\n    <Grid container key={`row-${idx}`} className={classes.tablerow}>\r\n      <Grid container className={classes.datarow}>\r\n        <Hidden xsDown>\r\n          <Grid item key={`data-${idx}-icon`} xs={3}>\r\n            <div className={classes.iconBox}>\r\n              <img\r\n                src={\"/images/cartIcon-default.svg\"}\r\n                alt=\"dna_icon\"\r\n                className={classes.icon}\r\n              />\r\n            </div>\r\n          </Grid>\r\n        </Hidden>\r\n        {headers.map((header) => (\r\n          <Grid\r\n            item\r\n            key={`data-${idx}-${header.field}`}\r\n            xs={header.gridSize || true}\r\n          >\r\n            {header.formatter\r\n              ? header.formatter(cartItem[header.field])\r\n              : cartItem[header.field]}\r\n          </Grid>\r\n        ))}\r\n      </Grid>\r\n      <Grid key={`remove-button-${idx}`} className={classes.buttonBox}>\r\n        <Button\r\n          className={classes.removeButton}\r\n          classes={{ label: classes.buttonLabel }}\r\n          onClick={handleRemoveClick}\r\n          name={idx.toString()}\r\n        >\r\n          Remove\r\n        </Button>\r\n      </Grid>\r\n      <Hidden smUp>\r\n        <hr className={classes.horizontalRule} />\r\n      </Hidden>\r\n    </Grid>\r\n  );\r\n};\r\n\r\nexport default CartDataRow;\r\n","import { colors, themes } from '@bg/shared/lib/theme';\r\nimport { sizes } from '@bg/shared/lib/theme/fonts';\r\nimport { Grid, Hidden, makeStyles } from '@material-ui/core';\r\nimport { capitalize } from 'lodash';\r\nimport React, { FunctionComponent } from 'react';\r\n\r\nimport { CartHeader } from '../TestInCart';\r\n\r\nconst appTheme = themes.appTheme;\r\nconst useStyles = makeStyles({\r\n  header: {\r\n    color: colors.black,\r\n    padding: \"0.5rem 1rem\",\r\n    [appTheme.breakpoints.up(\"sm\")]: {\r\n      backgroundColor: colors.grey,\r\n      fontWeight: \"bold\",\r\n      textAlign: \"center\",\r\n    },\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      textAlign: \"start\",\r\n      gap: \"3rem\",\r\n    },\r\n  },\r\n  headerCell: {\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      fontSize: sizes.xxxs,\r\n    },\r\n  },\r\n});\r\n\r\ninterface CartHeaderRowProps {\r\n  headers: CartHeader[];\r\n}\r\n\r\nconst CartHeaderRow: FunctionComponent<CartHeaderRowProps> = ({ headers }) => {\r\n  const classes = useStyles();\r\n  return (\r\n    <Grid container className={classes.header}>\r\n      <Hidden xsDown>\r\n        <Grid item key=\"header-icon\" xs={3} />\r\n      </Hidden>\r\n      {headers.map((header) => (\r\n        <Grid\r\n          item\r\n          key={`header-${header.field}`}\r\n          xs={header.gridSize || true}\r\n          className={classes.headerCell}\r\n        >\r\n          {header.label || capitalize(header.field)}\r\n        </Grid>\r\n      ))}\r\n    </Grid>\r\n  );\r\n};\r\n\r\nexport default CartHeaderRow;\r\n","import { themes } from '@bg/shared/lib/theme';\r\nimport { sizes } from '@bg/shared/lib/theme/fonts';\r\nimport { Grid, makeStyles, Paper, Typography } from '@material-ui/core';\r\nimport React, { FunctionComponent } from 'react';\r\n\r\nimport { CartHeader, TestInCart } from '../TestInCart';\r\nimport CartDataRow from './CartDataRow';\r\nimport CartHeaderRow from './CartHeaderRow';\r\n\r\nconst appTheme = themes.appTheme;\r\nconst useStyles = makeStyles({\r\n  container: {\r\n    width: \"648px\",\r\n    marginBottom: \"3rem\",\r\n    [appTheme.breakpoints.up(\"sm\")]: {\r\n      fontSize: sizes.md,\r\n    },\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      fontSize: sizes.sm,\r\n    },\r\n  },\r\n  emptyCart: {\r\n    textAlign: \"center\",\r\n    width: \"100%\",\r\n    padding: \"2rem\",\r\n  },\r\n});\r\n\r\ninterface CartContainerProps {\r\n  headers: CartHeader[];\r\n  cart: TestInCart[];\r\n  removeItem: (index: number) => void;\r\n}\r\n\r\nconst CartContainer: FunctionComponent<CartContainerProps> = ({\r\n  headers,\r\n  cart,\r\n  removeItem,\r\n}) => {\r\n  const classes = useStyles();\r\n\r\n  return (\r\n    <Paper elevation={3} className={classes.container}>\r\n      <Grid container>\r\n        {(cart === undefined || cart.length === 0) && (\r\n          <Typography variant=\"h4\" className={classes.emptyCart}>\r\n            Your Cart is Empty\r\n          </Typography>\r\n        )}\r\n        {cart.length > 0 && (\r\n          <>\r\n            <CartHeaderRow headers={headers} />\r\n            <Grid container>\r\n              {cart.map((cartItem, idx) => (\r\n                <CartDataRow\r\n                  key={idx}\r\n                  headers={headers}\r\n                  cartItem={cartItem}\r\n                  idx={idx}\r\n                  removeItem={removeItem}\r\n                />\r\n              ))}\r\n            </Grid>\r\n          </>\r\n        )}\r\n      </Grid>\r\n    </Paper>\r\n  );\r\n};\r\n\r\nexport default CartContainer;\r\n","import { colors, themes } from \"@bg/shared/lib/theme\";\r\nimport { sizes } from \"@bg/shared/lib/theme/fonts\";\r\nimport { gridContainerSpacing } from \"@bg/shared/lib/theme/themes\";\r\nimport { Button, Grid, makeStyles, Paper, Tooltip } from \"@material-ui/core\";\r\nimport { darken } from \"@material-ui/core/styles\";\r\nimport React, { FunctionComponent } from \"react\";\r\nimport { currencyFormatter } from \"../TestCategory/TestByCategoryDTO\";\r\nimport { TestInCart, cartKey } from \"./TestInCart\";\r\nimport { appInsights } from \"../../AppInsights\";\r\n\r\nconst appTheme = themes.appTheme;\r\nconst useStyles = makeStyles({\r\n  container: {\r\n    height: \"fit-content\",\r\n    fontSize: sizes.sm,\r\n    [appTheme.breakpoints.up(\"sm\")]: {\r\n      width: \"210px\",\r\n      margin: \"0 3rem\",\r\n    },\r\n  },\r\n  gridRoot: {\r\n    width: \"auto\",\r\n    justifyContent: \"center\",\r\n    [appTheme.breakpoints.up(\"sm\")]: {\r\n      margin: \"0.5rem\",\r\n    },\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      padding: \"0.5rem\",\r\n    },\r\n  },\r\n  label: { fontWeight: \"bold\" },\r\n  value: {},\r\n  buttonBox: {\r\n    paddingTop: \"0.75rem\",\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      width: \"90%\",\r\n    },\r\n  },\r\n  button: {\r\n    backgroundColor: colors.deepSeaBlue,\r\n    borderRadius: \"9px\",\r\n    width: \"160px\",\r\n    height: \"27px\",\r\n    \"&:hover\": {\r\n      backgroundColor: darken(colors.mediumBlue, 0.1),\r\n    },\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      width: \"100%\",\r\n    },\r\n  },\r\n  buttonDisabled: {\r\n    backgroundColor: colors.darkGrey,\r\n  },\r\n  buttonLabel: {\r\n    textTransform: \"capitalize\",\r\n    color: colors.white,\r\n    fontFamily: \"Roboto Condensed\",\r\n    fontSize: sizes.sm,\r\n  },\r\n  totalBox: {\r\n    padding: \"1rem 3rem\",\r\n    [appTheme.breakpoints.down(\"sm\")]: {\r\n      flexBasis: \"80%\",\r\n    },\r\n  },\r\n});\r\n\r\ninterface TotalCheckoutProps {\r\n  total: number;\r\n  checkoutUrl: string;\r\n  disabled?: boolean;\r\n  testsInCart?: TestInCart[];\r\n  disabledReason: string;\r\n}\r\n\r\nconst TotalCheckout: FunctionComponent<TotalCheckoutProps> = ({\r\n  total,\r\n  checkoutUrl,\r\n  disabled,\r\n  testsInCart,\r\n  disabledReason,\r\n}) => {\r\n  const classes = useStyles();\r\n  // TODO: only clear cart when req is filled out on orders\r\n  // https://stackoverflow.com/questions/33957477/cross-domain-localstorage-with-javascript\r\n  const handleClick = () => {\r\n    appInsights.trackEvent({ name: \"moveToOrder\" }, testsInCart);\r\n    localStorage.removeItem(cartKey);\r\n  };\r\n\r\n  return (\r\n    <Paper elevation={3} className={classes.container}>\r\n      <Grid\r\n        container\r\n        spacing={gridContainerSpacing}\r\n        className={classes.gridRoot}\r\n      >\r\n        <Grid\r\n          container\r\n          item\r\n          xs={12}\r\n          justifyContent=\"space-between\"\r\n          className={classes.totalBox}\r\n          style={\r\n            window.appConfig.features.isPriceDisabled ? { display: \"none\" } : {}\r\n          }\r\n        >\r\n          <Grid className={classes.label}>Total</Grid>\r\n          <Grid className={classes.value}>\r\n            {currencyFormatter.format(total)}\r\n          </Grid>\r\n        </Grid>\r\n        <Grid item className={classes.buttonBox}>\r\n          <Tooltip title={disabledReason}>\r\n            <span>\r\n              <Button\r\n                classes={{\r\n                  label: classes.buttonLabel,\r\n                  disabled: classes.buttonDisabled,\r\n                }}\r\n                className={classes.button}\r\n                href={checkoutUrl}\r\n                disabled={disabled}\r\n                onClick={handleClick}\r\n              >\r\n                Move to Order\r\n              </Button>\r\n            </span>\r\n          </Tooltip>\r\n        </Grid>\r\n      </Grid>\r\n    </Paper>\r\n  );\r\n};\r\n\r\nexport default TotalCheckout;\r\n","import { GridSize } from \"@material-ui/core\";\r\n\r\nexport interface TestInCart {\r\n\tname: string;\r\n\ttestCode: string;\r\n\tprice: number;\r\n\tdisplayTestCode?: string;\r\n}\r\n\r\nexport interface CartHeader {\r\n\tlabel?: string;\r\n\tfield: keyof TestInCart;\r\n\tgridSize?: GridSize;\r\n\tformatter?: (value: any) => string;\r\n}\r\n\r\nexport const cartKey = \"cart\";\r\n","export var testCodesToBlockOrderingTogether = [[\"8676\", \"8675\", \"8673\", \"8672\", \"8671\", \"8670\", \"8657\", \"8656\"], [\"1300\", \"1360\", \"1600\", \"1603\", \"1500\", \"1605\", \"1722\", \"1533\", \"1729\", \"1723\", \"1530\"], [\"1810\", \"1803\", \"1800\", \"1829\", \"1823\", \"1822\", \"1605\", \"1723\", \"1729\", \"1530\", \"1533\", \"1722\", \"1500\", \"1603\" // it seems like we don't want to restrict ordering wes and wgs tests together, just wes-wes and wgs-wgs\n], [\"1897\", \"1900\"], [\"8700\", \"8540\", \"8530\", \"8500\"], [\"6373\", \"6376\"], [\"64000\", \"64005\"]];\nexport var testCodesThatCanOrderTogether = [[\"8800\", \"8639\", \"1600\"], [\"1897\"], [\"1900\"]]; // TODO: if this list is extended to include overlapping order together blocks, the exclusion logic in catalog will need to be reworked\n\nexport var testCodesWithSpecificAllowedTests = [\"8800\", \"8639\", \"1897\", \"1900\"];","import { DefaultLayout } from \"@bg/shared/lib/components\";\r\nimport { TestSummaryBriefDTO } from \"@bg/shared/lib/dal/tests\";\r\nimport { useMediaQuery, useTheme } from \"@material-ui/core\";\r\nimport { ShoppingCartOutlined } from \"@material-ui/icons\";\r\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\r\nimport { RouteComponentProps } from \"react-router-dom\";\r\nimport { appInsights } from \"../../AppInsights\";\r\nimport { currencyFormatter } from \"../TestCategory/TestByCategoryDTO\";\r\nimport TestCategoryTitle from \"../TestCategory/TestCategoryTitle\";\r\nimport CartContainer from \"./Cart/CartContainer\";\r\nimport { CartHeader, cartKey, TestInCart } from \"./TestInCart\";\r\nimport TotalCheckout from \"./TotalCheckout\";\r\nimport { isEmpty, isNil } from \"lodash\";\r\nimport {\r\n  testCodesThatCanOrderTogether,\r\n  testCodesToBlockOrderingTogether,\r\n  testCodesWithSpecificAllowedTests,\r\n} from \"@bg/shared/lib/utils/TestCodeRestrictions\";\r\n\r\nexport const addToCart = (test: TestSummaryBriefDTO) => {\r\n  const cart: TestInCart[] = JSON.parse(localStorage.getItem(cartKey) || \"[]\");\r\n  const newCartTest: TestInCart = {\r\n    name: test.name,\r\n    testCode: test.code,\r\n    price: test.price || 0,\r\n    displayTestCode: test.displayTestCode,\r\n  };\r\n  appInsights.trackEvent({ name: \"addToCart\" }, newCartTest);\r\n  cart.push(newCartTest);\r\n  localStorage.setItem(cartKey, JSON.stringify(cart));\r\n  window.dispatchEvent(new Event(\"storage\"));\r\n};\r\n\r\nconst shouldExcludeTestCode = (test: TestSummaryBriefDTO) => {\r\n  // returning a non-empty string will disable the add to cart button and show the string in the tooltip\r\n  // 1. Need to disable button for same TC (two different CTCs with same TC)\r\n  // 2. Need to disable button for testCodesToBlockOrderingTogether\r\n  // 3. Need to disable button if two or more TCs from testCodesThatCanOrderTogether are added as only they can be ordered together\r\n\r\n  const { code, displayTestCode, tags } = test;\r\n  let retVal: string | undefined = undefined;\r\n  const cart: TestInCart[] = JSON.parse(localStorage.getItem(cartKey) || \"[]\");\r\n\r\n  const karyotypeTestCodeInCart = cart.find((item) =>\r\n    window.appConfig.karyotypeCmaTests.includes(item.testCode),\r\n  );\r\n\r\n  const testsCantBeOrderTogetherBlock = testCodesToBlockOrderingTogether.find(\r\n    (blockGroup) =>\r\n      blockGroup.some(\r\n        (blockedTest) =>\r\n          blockedTest === code &&\r\n          blockGroup.some((t) => cart.some((ct) => ct.testCode === t)),\r\n      ),\r\n  );\r\n\r\n  const indexOfBlockingTest = cart.findIndex(\r\n    (item) =>\r\n      testsCantBeOrderTogetherBlock &&\r\n      testsCantBeOrderTogetherBlock.some(\r\n        (blockedTest) =>\r\n          item.testCode === blockedTest || item.displayTestCode === blockedTest,\r\n      ),\r\n  );\r\n\r\n  const indexOfDuplicateTc = cart.findIndex(\r\n    (item) =>\r\n      item.testCode.includes(code) ||\r\n      (item.displayTestCode &&\r\n        displayTestCode &&\r\n        item.displayTestCode.includes(displayTestCode)) ||\r\n      (displayTestCode && item.testCode.includes(displayTestCode)),\r\n  );\r\n\r\n  const testsInCartToBeOrderedTogether = cart.filter((item) =>\r\n    testCodesThatCanOrderTogether.some((block) =>\r\n      block.includes(item.testCode),\r\n    ),\r\n  );\r\n\r\n  const exclusiveTestsToBeOrderedTogether = cart.filter((item) =>\r\n    testCodesThatCanOrderTogether.some(\r\n      (block) =>\r\n        block.includes(item.testCode) &&\r\n        testCodesWithSpecificAllowedTests.includes(item.testCode),\r\n    ),\r\n  );\r\n\r\n  const listsOfOrderTogetherTests = testCodesThatCanOrderTogether.filter(\r\n    (list) =>\r\n      list.some((x) =>\r\n        testsInCartToBeOrderedTogether.some(\r\n          (y) => y.displayTestCode === x || y.testCode === x,\r\n        ),\r\n      ),\r\n  );\r\n\r\n  let conflictingTests: string[] = [];\r\n  if (indexOfDuplicateTc > -1) {\r\n    conflictingTests.push(cart[indexOfDuplicateTc].testCode);\r\n  }\r\n\r\n  if (indexOfBlockingTest > -1) {\r\n    conflictingTests.push(cart[indexOfBlockingTest].testCode);\r\n  }\r\n  if (\r\n    testsInCartToBeOrderedTogether.length > 0 &&\r\n    listsOfOrderTogetherTests.length > 0 &&\r\n    exclusiveTestsToBeOrderedTogether.length > 0 &&\r\n    conflictingTests.length == 0\r\n    // order together tests are only blocking if one of the tests inside of the cart is an exclusive test\r\n  ) {\r\n    // TODO: This logic will need to be rewritten to be clearer about which tests are the actual blocking tests\r\n    listsOfOrderTogetherTests.forEach((listThatCanBeOrderTogether) => {\r\n      if (cart.some((x) => x.displayTestCode === code || x.testCode === code)) {\r\n        conflictingTests.push(code);\r\n      }\r\n      const togetherTestsInCart = listThatCanBeOrderTogether.filter((test) =>\r\n        testsInCartToBeOrderedTogether.some(\r\n          (cartTest) =>\r\n            cartTest.displayTestCode === test || cartTest.testCode === test,\r\n        ),\r\n      );\r\n      if (!listThatCanBeOrderTogether.some((x) => x === code)) {\r\n        togetherTestsInCart.forEach((x) => {\r\n          conflictingTests.push(x);\r\n        });\r\n      }\r\n    });\r\n  }\r\n\r\n  if (\r\n    testCodesWithSpecificAllowedTests.includes(code) ||\r\n    testCodesWithSpecificAllowedTests.includes(displayTestCode || \"\")\r\n  ) {\r\n    const listsOfTestsToBeOrderedTogetherWithAddedTC =\r\n      listsOfOrderTogetherTests.filter((block) => block.includes(code));\r\n    const testsInCartThatCannotBeOrderedWithAddedTC = cart.filter(\r\n      (item) =>\r\n        !listsOfTestsToBeOrderedTogetherWithAddedTC.some((block) =>\r\n          block.includes(item.testCode),\r\n        ),\r\n    );\r\n    conflictingTests.push(\r\n      ...testsInCartThatCannotBeOrderedWithAddedTC.map((test) => test.testCode),\r\n    );\r\n  }\r\n\r\n  conflictingTests = [...new Set(conflictingTests)];\r\n  if (conflictingTests.length > 0) {\r\n    retVal = getDisabledReason(\r\n      [code],\r\n      conflictingTests,\r\n      Boolean(karyotypeTestCodeInCart),\r\n    );\r\n  }\r\n\r\n  if (tags !== undefined && tags.includes(\"reanalysisTestCodes\")) {\r\n    retVal =\r\n      \"To place a reanalysis order, go to the report details page for the patient, and select Reanalyze Test there.\";\r\n  }\r\n\r\n  return retVal;\r\n};\r\n\r\nconst getDisabledReason = (\r\n  testCodes: string[],\r\n  conflictingTests: string[],\r\n  karyotypeTestCodeInCart: boolean,\r\n) => {\r\n  const duplicateMessage = `Test ${\r\n    testCodes.length < 2\r\n      ? `code ${testCodes\r\n          .map((x) => {\r\n            return x;\r\n          })\r\n          .toString()}`\r\n      : `codes ${testCodes\r\n          .map((x) => {\r\n            return x;\r\n          })\r\n          .toString()}`\r\n  } cannot be combined with ${\r\n    conflictingTests.length > 0\r\n      ? conflictingTests\r\n          .map((item) => {\r\n            return item;\r\n          })\r\n          .toString()\r\n      : \"current cart\"\r\n  } as they are conflicting or duplicate orders`;\r\n  if (karyotypeTestCodeInCart) {\r\n    return `${duplicateMessage}; please select whether a 5 cell karyotype or a complete karyotype analysis is required.`;\r\n  } else {\r\n    return `${duplicateMessage}.`;\r\n  }\r\n};\r\n\r\nexport const disableAddToCartReason = (test: TestSummaryBriefDTO) => {\r\n  return shouldExcludeTestCode(test) || \"\";\r\n};\r\n\r\nconst CheckoutContainer: FunctionComponent<RouteComponentProps> = ({\r\n  history,\r\n}) => {\r\n  const headers: CartHeader[] = [\r\n    {\r\n      field: \"name\",\r\n      label: \"Test Name\",\r\n    },\r\n    {\r\n      field: \"testCode\",\r\n      label: \"Test Code\",\r\n      formatter: (value: number) => value.toString(),\r\n    },\r\n    {\r\n      field: \"price\",\r\n      gridSize: 1,\r\n      formatter: (value: number) =>\r\n        value === undefined ? \"\" : currencyFormatter.format(value),\r\n    },\r\n  ];\r\n\r\n  window.appConfig.features.isPriceDisabled && headers.pop();\r\n\r\n  document.title = \"Checkout - Baylor Genetics\";\r\n  const [cart, setCart] = useState(\r\n    JSON.parse(localStorage.getItem(cartKey) || \"[]\") as TestInCart[],\r\n  );\r\n  const [checkoutUrl, setCheckoutUrl] = useState(\"\");\r\n\r\n  useEffect(() => {\r\n    localStorage.setItem(cartKey, JSON.stringify(cart));\r\n    window.dispatchEvent(new Event(\"storage\"));\r\n    const tests: string[] = [];\r\n\r\n    const buildOrderUrlQuery = (test: TestInCart): string => {\r\n      let testCode = test.testCode;\r\n      let ctc = test.testCode;\r\n      if (\r\n        !isNil(test.displayTestCode) &&\r\n        !isEmpty(test.displayTestCode) &&\r\n        test.displayTestCode.toLowerCase() !== \"none\"\r\n      ) {\r\n        testCode = test.displayTestCode || test.testCode;\r\n      }\r\n      let retVal = `test=${testCode}`;\r\n      if (testCode !== ctc) {\r\n        retVal += `&ctc=${ctc}`;\r\n      }\r\n      return retVal;\r\n    };\r\n\r\n    cart.forEach((test) => {\r\n      tests.push(buildOrderUrlQuery(test));\r\n    });\r\n    setCheckoutUrl(\r\n      `${window.appConfig.ordersUrl}/create?${tests.join(\",\")}&new-cart=true`,\r\n    );\r\n  }, [cart, setCart, setCheckoutUrl]);\r\n\r\n  const removeItem = (index: number) => {\r\n    const cartData = Object.assign([], cart);\r\n    cartData.splice(index, 1);\r\n    setCart(cartData);\r\n  };\r\n\r\n  const theme = useTheme();\r\n  const mobileWidth = useMediaQuery(theme.breakpoints.down(\"xs\"));\r\n  const getCartTotal = () => {\r\n    return Object.values(cart).reduce((total, { price }) => total + price, 0);\r\n  };\r\n\r\n  const disabledCheckoutReason = () => {\r\n    if (cart.length <= 0) {\r\n      return \"There are no tests in your cart.\";\r\n    }\r\n\r\n    const testsInCartThatNeedToBeOrderedTogether = cart.filter((item) =>\r\n      testCodesThatCanOrderTogether.some(\r\n        (block) =>\r\n          block.includes(item.testCode) &&\r\n          testCodesWithSpecificAllowedTests.includes(item.testCode),\r\n      ),\r\n    );\r\n\r\n    const testsInCartThatAreNotInTheTogetherList = cart.filter((item) =>\r\n      testCodesThatCanOrderTogether.some(\r\n        (block) =>\r\n          !block.includes(item.testCode) &&\r\n          testsInCartThatNeedToBeOrderedTogether.some((exclusiveTest) =>\r\n            block.includes(exclusiveTest.testCode),\r\n          ),\r\n      ),\r\n    );\r\n\r\n    if (\r\n      testsInCartThatNeedToBeOrderedTogether.length > 0 &&\r\n      testsInCartThatAreNotInTheTogetherList.length > 0\r\n    ) {\r\n      return getDisabledReason(\r\n        testsInCartThatAreNotInTheTogetherList.map((x) => x.testCode),\r\n        testsInCartThatNeedToBeOrderedTogether.map((x) => x.testCode),\r\n        Boolean(\r\n          cart.find((item) =>\r\n            window.appConfig.karyotypeCmaTests.includes(item.testCode),\r\n          ),\r\n        ),\r\n      );\r\n    }\r\n\r\n    return \"\";\r\n  };\r\n\r\n  const disableCheckout = () => {\r\n    return Boolean(disabledCheckoutReason());\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <DefaultLayout\r\n        hideLogin={true}\r\n        centerStyle={{\r\n          backgroundColor: \"#f5fbff\",\r\n          padding: \"0 1em 1em 1em\",\r\n          fontFamily: \"'Roboto Condensed', 'Helvetica', 'Arial', sans-serif\",\r\n        }}\r\n      >\r\n        <TestCategoryTitle category=\"Order\" icon={ShoppingCartOutlined} />\r\n        <div style={{ display: \"flex\", flexWrap: \"wrap\" }}>\r\n          <CartContainer\r\n            headers={headers}\r\n            cart={cart}\r\n            removeItem={removeItem}\r\n          />\r\n        </div>\r\n        <div\r\n          style={\r\n            mobileWidth\r\n              ? {\r\n                  position: \"fixed\",\r\n                  bottom: 0,\r\n                  marginLeft: \"-1em\",\r\n                  width: \"100%\",\r\n                }\r\n              : {}\r\n          }\r\n        >\r\n          <TotalCheckout\r\n            total={getCartTotal()}\r\n            checkoutUrl={checkoutUrl}\r\n            disabled={disableCheckout()}\r\n            testsInCart={cart}\r\n            disabledReason={disabledCheckoutReason()}\r\n          />\r\n        </div>\r\n      </DefaultLayout>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default CheckoutContainer;\r\n","import { makeStyles, SvgIconProps, Typography } from \"@material-ui/core\";\r\nimport React, { ComponentType, FunctionComponent } from \"react\";\r\n\r\nconst useStyles = makeStyles({\r\n  title: {\r\n    padding: \"1rem\",\r\n    fontFamily: \"inherit\",\r\n    fontWeight: \"bold\",\r\n    fontSize: \"36px\",\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n  },\r\n  icon: {\r\n    font: \"inherit\",\r\n    marginRight: \"0.25rem\",\r\n  },\r\n});\r\n\r\ninterface TestCategoryTitleProps {\r\n  category: string;\r\n  icon?: ComponentType<SvgIconProps>;\r\n}\r\n\r\nconst TestCategoryTitle: FunctionComponent<TestCategoryTitleProps> = ({\r\n  category,\r\n  icon,\r\n}) => {\r\n  const classes = useStyles();\r\n  if (icon) {\r\n    const Icon = icon;\r\n\r\n    return (\r\n      <Typography variant=\"h4\" className={classes.title}>\r\n        {<Icon className={classes.icon}>{icon}</Icon>}\r\n        {category}\r\n      </Typography>\r\n    );\r\n  }\r\n  return (\r\n    <Typography variant=\"h4\" className={classes.title}>\r\n      {category}\r\n    </Typography>\r\n  );\r\n};\r\n\r\nexport default TestCategoryTitle;\r\n","export const mapNameToImage = (name: string): string => {\r\n  if (name.toUpperCase().indexOf(\"FFPE\") !== -1) {\r\n    if (\r\n      name.toUpperCase().indexOf(\"FETAL\") !== -1 ||\r\n      name.toUpperCase().indexOf(\"SLIDE\") !== -1 ||\r\n      name.toUpperCase().indexOf(\"BLOCK\") !== -1\r\n    ) {\r\n      return \"FFPE Blocks.svg\";\r\n    }\r\n  }\r\n\r\n  if (name.toUpperCase().indexOf(\"PRODUCT\") !== -1) {\r\n    if (\r\n      name.toUpperCase().indexOf(\"CONCEPTION\") !== -1 ||\r\n      name.toUpperCase().indexOf(\"AUTOPSY\") !== -1\r\n    ) {\r\n      return \"PointOfConception.svg\";\r\n    }\r\n  }\r\n\r\n  if (name.toUpperCase().indexOf(\"TISSUE\") !== -1) {\r\n    if (\r\n      name.toUpperCase().indexOf(\"FRESH\") !== -1 ||\r\n      name.toUpperCase().indexOf(\"FROZEN\") !== -1\r\n    ) {\r\n      return \"Fresh Frozen Tissue.svg\";\r\n    }\r\n  }\r\n\r\n  if (name.toUpperCase().indexOf(\"BLOOD\") !== -1) {\r\n    if (name.toUpperCase().indexOf(\"CORD\") !== -1) {\r\n      return \"Cord Blood.svg\";\r\n    }\r\n    if (name.toUpperCase().indexOf(\"PURPLE\") !== -1) {\r\n      return \"Blood Tops Purple.svg\";\r\n    }\r\n    if (name.toUpperCase().indexOf(\"YELLOW\") !== -1) {\r\n      return \"Blood Tops Yellow.svg\";\r\n    }\r\n    if (name.toUpperCase().indexOf(\"GREEN\") !== -1) {\r\n      return \"Blood Tops Green.svg\";\r\n    }\r\n    if (name.toUpperCase().indexOf(\"WHITE\") !== -1) {\r\n      return \"White Blood Cell.svg\";\r\n    }\r\n    return \"Blood Tops.svg\";\r\n  }\r\n\r\n  if (name.toUpperCase().indexOf(\" AND \") !== -1) {\r\n    return \"Specimen Types.svg\";\r\n  }\r\n\r\n  if (name.toUpperCase().indexOf(\"EXTRACTED DNA\") !== -1) {\r\n    if (name.toUpperCase().indexOf(\"CVS\") !== -1) {\r\n      return \"CVS.svg\";\r\n    }\r\n    if (name.toUpperCase().indexOf(\"AMNIOTIC\") !== -1) {\r\n      return \"Amniotic Fluid.svg\";\r\n    }\r\n  }\r\n\r\n  switch (name.toUpperCase()) {\r\n    case \"BLOOD\":\r\n      return \"Blood Tops.svg\";\r\n\r\n    case \"BUCCAL SWAB\":\r\n      return \"Buccal Swab.svg\";\r\n\r\n    case \"CEREBROSPINAL FLUID\":\r\n      return \"Cerebrospinal Fluid.svg\";\r\n\r\n    case \"CORD BLOOD\":\r\n      return \"Cord Blood.svg\";\r\n\r\n    case \"CULTURED SKIN FIBROBLAST\":\r\n      return \"Cultured Skin Fibroblast.svg\";\r\n\r\n    case \"EXTRACTED DNA\":\r\n      return \"Extracted DNA.svg\";\r\n\r\n    case \"FFPE BLOCKS\":\r\n      return \"FFPE Blocks.svg\";\r\n\r\n    case \"LIVER\":\r\n      return \"Liver.svg\";\r\n\r\n    case \"PLASMA\":\r\n      return \"Plasma.svg\";\r\n\r\n    case \"SALIVA\":\r\n      return \"Saliva.svg\";\r\n\r\n    case \"SERUM\":\r\n      return \"Serum.svg\";\r\n\r\n    case \"SKELETAL MUSCLE\":\r\n      return \"Skeletal Muscle.svg\";\r\n\r\n    case \"URINE\":\r\n      return \"Urine.svg\";\r\n\r\n    case \"WBC\" || \"White Blood Cell\":\r\n      return \"White Blood Cell.svg\";\r\n\r\n    case \"PURIFIED DNA\":\r\n      return \"Purified DNA.png\";\r\n  }\r\n\r\n  return `${name}.svg`;\r\n};\r\n","import { colors, fonts } from \"@bg/shared/lib/theme\";\r\nimport { makeStyles } from \"@material-ui/styles\";\r\n\r\nexport default makeStyles({\r\n  buttons: {\r\n    marginTop: \"1em\",\r\n    textAlign: \"right\",\r\n    \"& > *\": {\r\n      marginLeft: \"0.5em\",\r\n    },\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n    justifyContent: \"flex-end\",\r\n  },\r\n  detailsContainer: {\r\n    padding: \"0 1em\",\r\n    fontSize: fonts.sizes.xs,\r\n  },\r\n  gene: {\r\n    backgroundColor: colors.powderBlue,\r\n    fontSize: fonts.sizes.sm,\r\n    color: colors.white,\r\n    height: \"1.4em\",\r\n    width: \"8em\",\r\n  },\r\n  icon: {\r\n    height: \"2.3em\",\r\n  },\r\n  geneList: {\r\n    \"& > *\": {\r\n      margin: \"0.25em\",\r\n      columnCount: \"auto\",\r\n      columnWidth: \"2.5em\",\r\n      columnGap: \"5em\",\r\n    },\r\n  },\r\n  list: {\r\n    marginTop: 0,\r\n    listStyle: \"none\",\r\n    \"& li\": {\r\n      paddingLeft: \"1em\",\r\n      marginLeft: \"-2em\",\r\n    },\r\n    \"& li::before\": {\r\n      color: colors.powderBlue,\r\n      content: \"'•'\",\r\n      paddingRight: \"0.25em\",\r\n    },\r\n  },\r\n  specimenDefault: {\r\n    fontSize: \"0.9em\",\r\n    color: colors.deepSeaBlue,\r\n  },\r\n  specimenHeader: {\r\n    color: colors.deepSeaBlue,\r\n    textTransform: \"uppercase\",\r\n  },\r\n  specimenHeaderMobile: {\r\n    color: colors.deepSeaBlue,\r\n    textTransform: \"uppercase\",\r\n    marginTop: \"5px\",\r\n    marginBottom: \"5px\",\r\n  },\r\n  specimenTable: {\r\n    width: \"100%\",\r\n  },\r\n  specimenTableMobile: {\r\n    display: \"flex\",\r\n    flexDirection: \"column\",\r\n    marginLeft: \"-20px\",\r\n    marginRight: \"-20px\",\r\n  },\r\n  specimenDivider: {\r\n    borderBottom: \"solid 1px #C1C1C1\",\r\n    borderTop: \"solid 1px #C1C1C1\",\r\n    width: \"100%\",\r\n    marginTop: \"10px\",\r\n    marginBottom: \"5px\",\r\n  },\r\n  specimenRow: {\r\n    borderBottom: \"solid 2px \" + colors.lightBrown,\r\n    borderTop: \"solid 2px \" + colors.lightBrown,\r\n  },\r\n  specimenType: {\r\n    fontSize: \"0.8em\",\r\n    textTransform: \"uppercase\",\r\n    color: colors.powderBlue,\r\n  },\r\n  titleQuestion: {\r\n    ...fonts.fontStyles.heading,\r\n    marginTop: \"1em\",\r\n    marginBottom: \"0.25em\",\r\n  },\r\n  topLine: {\r\n    display: \"flex\",\r\n  },\r\n  diseaseContainer: {\r\n    columnWidth: \"20em\",\r\n    marginLeft: \"-2em\",\r\n  },\r\n  specialNotes: {\r\n    \"& a\": {\r\n      textDecoration: \"none\",\r\n      fontWeight: \"bold\",\r\n      color: colors.powderBlue,\r\n    },\r\n  },\r\n  label: {\r\n    color: colors.deepSeaBlue,\r\n    fontWeight: \"bold\",\r\n  },\r\n  info: { marginBottom: \"0.5em\", paddingLeft: \"0.5em\" },\r\n  tat: {\r\n    marginTop: \"2em\",\r\n    marginBottom: \"2em\",\r\n  },\r\n  tatIcon: {\r\n    height: \"3em\",\r\n    float: \"left\",\r\n  },\r\n  tatTime: {\r\n    color: colors.mediumBrown,\r\n    fontSize: fonts.sizes.xl,\r\n  },\r\n  tatDisclaimer: {\r\n    color: colors.mediumBrown,\r\n    fontSize: fonts.sizes.xs,\r\n  },\r\n  tatLabel: {\r\n    color: colors.mediumBrown,\r\n    fontSize: fonts.sizes.sm,\r\n  },\r\n  sampleRecommendedText: {\r\n    fontStyle: \"italic\",\r\n    padding: \"1em\",\r\n  },\r\n  detectedDefault: {\r\n    fontSize: \"12px\",\r\n    color: colors.deepSeaBlue,\r\n  },\r\n  detectedHeader: {\r\n    color: colors.deepSeaBlue,\r\n    textTransform: \"uppercase\",\r\n    fontSize: \"14px\",\r\n  },\r\n  detectedTableHeader: {\r\n    width: \"100%\",\r\n    backgroundColor: colors.white,\r\n    borderRadius: \"6px 6px 0px 0px\",\r\n  },\r\n  detectedHeaderMobile: {\r\n    color: colors.deepSeaBlue,\r\n    textTransform: \"uppercase\",\r\n    marginTop: \"5px\",\r\n    marginBottom: \"5px\",\r\n  },\r\n  detectedTableContainer: {\r\n    overflowY: \"scroll\",\r\n    maxHeight: \"500px\",\r\n    borderRadius: \"0px 0px 6px 6px\",\r\n  },\r\n  detectedTableBody: {},\r\n  detectedTable: {\r\n    width: \"100%\",\r\n    backgroundColor: colors.white,\r\n  },\r\n  detectedTableMobile: {\r\n    display: \"flex\",\r\n    flexDirection: \"column\",\r\n    marginLeft: \"-20px\",\r\n    marginRight: \"-20px\",\r\n  },\r\n  detectedDivider: {\r\n    borderBottom: \"solid 1px #C1C1C1\",\r\n    borderTop: \"solid 1px #C1C1C1\",\r\n    width: \"100%\",\r\n    marginTop: \"10px\",\r\n    marginBottom: \"5px\",\r\n  },\r\n  detectedRow: {\r\n    borderBottom: \"solid 2px \" + colors.darkGrey,\r\n    borderTop: \"solid 2px \" + colors.darkGrey,\r\n  },\r\n  detectedGene: {\r\n    fontSize: \"12px\",\r\n    textTransform: \"uppercase\",\r\n    color: colors.powderBlue,\r\n  },\r\n  buttonWrapper: {\r\n    display: \"flex\",\r\n    alignItems: \"center\",\r\n    justifyContent: \"flex-end\",\r\n  },\r\n  infoIcon: {\r\n    marginLeft: \"3px\",\r\n  },\r\n});\r\n","import {\r\n  PrimaryButton,\r\n  PrimaryExpansionPanel,\r\n  SecondaryButton,\r\n  TestCatalogBreadcrumb,\r\n  TestTitle,\r\n  Title,\r\n} from \"@bg/shared/lib/components\";\r\nimport {\r\n  SampleType,\r\n  Test,\r\n  TestSummaryBriefDTO,\r\n} from \"@bg/shared/lib/dal/tests\";\r\nimport {\r\n  Grid,\r\n  Hidden,\r\n  Table,\r\n  TableBody,\r\n  TableCell,\r\n  TableContainer,\r\n  TableHead,\r\n  TableRow,\r\n  Tooltip,\r\n} from \"@material-ui/core\";\r\nimport momentDurationFormatSetup from \"moment-duration-format\";\r\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\r\nimport { Gene } from \"@bg/shared/lib/dal/tests\";\r\n\r\nimport {\r\n  addToCart,\r\n  disableAddToCartReason,\r\n} from \"./../Checkout/CheckoutContainer\";\r\nimport { mapNameToImage } from \"./GetSampleTypeImage\";\r\nimport useStyles from \"./useStyles\";\r\nimport { InfoOutlined } from \"@material-ui/icons\";\r\n\r\nconst moment = require(\"moment\");\r\nmomentDurationFormatSetup(moment);\r\n\r\ninterface TestDetailsProps {\r\n  test: Test;\r\n  kitLink?: string;\r\n}\r\n\r\nconst Info: FunctionComponent<{\r\n  label: string;\r\n  value?: string;\r\n}> = ({ label, value }) => {\r\n  const classes = useStyles();\r\n  if (!value) {\r\n    return null;\r\n  }\r\n  return (\r\n    <Grid container>\r\n      <Grid item sm={12} md={2} className={classes.label}>\r\n        {label}\r\n      </Grid>\r\n      <Grid item sm={12} md={10} className={classes.info}>\r\n        <span\r\n          className={classes.specialNotes}\r\n          dangerouslySetInnerHTML={{\r\n            __html: value.replace(/(?:\\r\\n|\\r|\\n)/g, \"<br>\"),\r\n          }}\r\n        />\r\n      </Grid>\r\n    </Grid>\r\n  );\r\n};\r\n\r\nconst TestDetails: FunctionComponent<TestDetailsProps> = ({\r\n  test,\r\n  kitLink,\r\n}) => {\r\n  const classes = useStyles();\r\n  const [orderDisabledReason, setOrderDisabledReason] = useState<string>(\r\n    disableAddToCartReason(test),\r\n  );\r\n  useEffect(() => {\r\n    const disabled = disableAddToCartReason(test);\r\n    setOrderDisabledReason(disabled);\r\n  }, [test]);\r\n\r\n  window.addEventListener(\"storage\", () => {\r\n    const disabled = disableAddToCartReason(test);\r\n    setOrderDisabledReason(disabled);\r\n  });\r\n  const handleAddToCartClick = () => {\r\n    const testByCategory: TestSummaryBriefDTO = {\r\n      code: test.code,\r\n      name: test.name,\r\n      price: test.price,\r\n      displayTestCode: test.displayTestCode,\r\n      categories: test.categories || [],\r\n    };\r\n    if (!orderDisabledReason) {\r\n      addToCart(testByCategory);\r\n    }\r\n    window.location.href = \"/checkout\";\r\n  };\r\n\r\n  const OrderButton = () => {\r\n    const isReanalysisTest =\r\n      test.tags && test.tags.includes(\"reanalysisTestCodes\");\r\n    if (test.hasOrderSections) {\r\n      return (\r\n        <div className={classes.buttonWrapper}>\r\n          <Tooltip title={isReanalysisTest ? \"\" : orderDisabledReason}>\r\n            <span>\r\n              <PrimaryButton\r\n                size=\"large\"\r\n                id=\"order-test\"\r\n                onClick={handleAddToCartClick}\r\n                disabled={orderDisabledReason.length > 0}\r\n              >\r\n                Order\r\n              </PrimaryButton>\r\n            </span>\r\n          </Tooltip>\r\n          {isReanalysisTest && (\r\n            <Tooltip title=\"To place a reanalysis order, go to the report details page for the patient and select Reanalyze Test there.\">\r\n              <InfoOutlined className={classes.infoIcon} />\r\n            </Tooltip>\r\n          )}\r\n        </div>\r\n      );\r\n    }\r\n    return null;\r\n  };\r\n\r\n  const getGeneNullText = (gene: Gene) => {\r\n    if (test.code === \"BG-1300-P236-1\") {\r\n      return `${gene.name}-associated neurodevelopmental disorder`;\r\n    } else if (test.code === \"BG-1300-P142-1\") {\r\n      return `${gene.name}-associated neuromuscular disorder`;\r\n    } else if (test.code === \"BG-1300-P397-1\") {\r\n      return `${gene.name}-associated epilepsy`;\r\n    } else if (test.code === \"BG-1300-P76-1\") {\r\n      return `${gene.name}-associated epilepsy`;\r\n    } else if (test.code === \"BG-1300-P463-1\") {\r\n      return `${gene.name}-associated primary immunodeficiency`;\r\n    } else if (test.code === \"BG-1300-P419-1\") {\r\n      return `${gene.name}-associated cerebral palsy spectrum disorders`;\r\n    } else if (test.code === \"BG-1300-P354-1\") {\r\n      return `${gene.name}-associated skeletal disorders`;\r\n    } else if (test.code === \"BG-1300-P92-1\") {\r\n      return `${gene.name}-associated connective tissue disorders`;\r\n    }\r\n    return \"\";\r\n  };\r\n\r\n  const isEmptyOrZeroOrUndefined = (input?: string): boolean => {\r\n    return (\r\n      input === undefined ||\r\n      input === null ||\r\n      input.trim() === \"\" ||\r\n      input.startsWith(\"0\")\r\n    );\r\n  };\r\n\r\n  const showTat = (type?: SampleType): boolean => {\r\n    if (type) {\r\n      return !isEmptyOrZeroOrUndefined(type.tat);\r\n    }\r\n    return test.sampleTypes.some(\r\n      (sampleType) => !isEmptyOrZeroOrUndefined(sampleType.tat),\r\n    );\r\n  };\r\n\r\n  return (\r\n    <>\r\n      <Title>Test Details</Title>\r\n      <div className={classes.topLine}>\r\n        <TestCatalogBreadcrumb test={test} />\r\n        <div className={classes.buttons}>\r\n          {test.requisitionLink && (\r\n            <SecondaryButton\r\n              size=\"large\"\r\n              href={test.requisitionLink}\r\n              id=\"print-req\"\r\n            >\r\n              Print Req\r\n            </SecondaryButton>\r\n          )}\r\n          {kitLink && (\r\n            <SecondaryButton size=\"large\" href={kitLink} id=\"order-kits\">\r\n              Order Kits\r\n            </SecondaryButton>\r\n          )}\r\n          {OrderButton()}\r\n        </div>\r\n      </div>\r\n      <div className={classes.detailsContainer}>\r\n        <TestTitle test={test} />\r\n        {test && test.redirectTo && test.redirectReason ? (\r\n          <div>\r\n            <div className={classes.specialNotes}>{test.redirectReason}</div>\r\n            {test.redirectTo &&\r\n              test.redirectTo.split(\"|\").map((code) => (\r\n                <PrimaryButton\r\n                  size=\"small\"\r\n                  href={`${window.appConfig.catalogUrl}/details/${code}`}\r\n                  id=\"redirect-test\"\r\n                >\r\n                  {code}\r\n                </PrimaryButton>\r\n              ))}\r\n          </div>\r\n        ) : (\r\n          <div>\r\n            <div className={classes.titleQuestion}>\r\n              What is{\" \"}\r\n              <span\r\n                dangerouslySetInnerHTML={{\r\n                  __html: test.name,\r\n                }}\r\n              ></span>\r\n              ?\r\n            </div>\r\n            {test.description && (\r\n              <div\r\n                className={classes.specialNotes}\r\n                dangerouslySetInnerHTML={{\r\n                  __html: test.description.replace(/(?:\\r\\n|\\r|\\n)/g, \"<br>\"),\r\n                }}\r\n              />\r\n            )}\r\n            {/* Product team sets the \"indications for testing\" in the\r\n\t\t\t\t\t\twhoIsThisAppropriateFor */}\r\n            {test.whoIsThisAppropriateFor && (\r\n              <>\r\n                <div className={classes.titleQuestion}>\r\n                  Indications for Testing\r\n                </div>\r\n                <div\r\n                  className={classes.specialNotes}\r\n                  dangerouslySetInnerHTML={{\r\n                    __html: test.whoIsThisAppropriateFor.replace(\r\n                      /(?:\\r\\n|\\r|\\n)/g,\r\n                      \"<br>\",\r\n                    ),\r\n                  }}\r\n                />\r\n              </>\r\n            )}\r\n            {test.howIsDiseaseInherited && (\r\n              <>\r\n                <div className={classes.titleQuestion}>\r\n                  How is this disease inherited?\r\n                </div>\r\n                <div\r\n                  dangerouslySetInnerHTML={{\r\n                    __html: test.howIsDiseaseInherited.replace(\r\n                      /(?:\\r\\n|\\r|\\n)/g,\r\n                      \"<br>\",\r\n                    ),\r\n                  }}\r\n                />\r\n              </>\r\n            )}\r\n            {test.specialNotes && (\r\n              <>\r\n                <div className={classes.titleQuestion}>Special Note</div>\r\n                <div\r\n                  dangerouslySetInnerHTML={{\r\n                    __html: test.specialNotes.replace(\r\n                      /(?:\\r\\n|\\r|\\n)/g,\r\n                      \"<br>\",\r\n                    ),\r\n                  }}\r\n                />\r\n              </>\r\n            )}\r\n            {test.limitations && (\r\n              <>\r\n                <div className={classes.titleQuestion}>Limitations</div>\r\n                <div\r\n                  dangerouslySetInnerHTML={{\r\n                    __html: test.limitations.replace(/(?:\\r\\n|\\r|\\n)/g, \"<br>\"),\r\n                  }}\r\n                />\r\n              </>\r\n            )}\r\n            {(test.turnAroundTimeText || test.turnAroundTime) && (\r\n              <Grid container className={classes.tat}>\r\n                <Grid item xs={7}>\r\n                  <div className={classes.tat}>\r\n                    <img\r\n                      className={classes.tatIcon}\r\n                      src=\"/images/Turnaround%20Time.svg\"\r\n                      alt=\"Turn Around Time Icon\"\r\n                    />\r\n                    <div className={classes.tatTime}>\r\n                      {test.turnAroundTimeText ||\r\n                        moment.duration(test.turnAroundTime).format(\"D [day]\")}\r\n                    </div>\r\n                    <div className={classes.tatLabel}>Turn Around Time</div>\r\n                  </div>\r\n                </Grid>\r\n                {test.turnAroundTimeText &&\r\n                  test.turnAroundTimeText.includes(\"*\") && (\r\n                    <Grid item xs={5} className={classes.tat}>\r\n                      <div className={classes.tatDisclaimer}>\r\n                        TAT dependent on sample type. Please see specimen\r\n                        requirements below for more information.\r\n                      </div>\r\n                    </Grid>\r\n                  )}\r\n              </Grid>\r\n            )}\r\n            <PrimaryExpansionPanel title=\"TECHNICAL INFORMATION\">\r\n              <Info label=\"Methodology\" value={test.methodology} />\r\n              <Info label=\"Coverage\" value={test.coverage} />\r\n              <Info\r\n                label=\"Detected Conditions\"\r\n                value={test.detectedConditions}\r\n              />\r\n              <Info\r\n                label={\"Target Region Coverage\"}\r\n                value={test.targetRegionCoverage}\r\n              />\r\n              <Info label=\"Perform CNV\" value={test.performCNV} />\r\n              <Info label=\"Affected Systems\" value={test.affectedSystems} />\r\n              <Info label=\"Analytes Analyzed\" value={test.analytesAnalyzed} />\r\n              <Info label=\"Proteins\" value={test.proteinText} />\r\n              <Info label=\"Patient Resources\" value={test.patientResources} />\r\n              <Info\r\n                label=\"Provider References\"\r\n                value={test.providerReferences}\r\n              />\r\n              <Info\r\n                label=\"Other Coverage Search Tools\"\r\n                value={test.otherLinksToCoverageSearchTools}\r\n              />\r\n              <Info label=\"New York State Approved\" value={test.nysApproved} />\r\n            </PrimaryExpansionPanel>\r\n            {test.sampleTypes && (\r\n              <PrimaryExpansionPanel title=\"SPECIMEN REQUIREMENTS\">\r\n                <Hidden xsDown>\r\n                  <Table className={classes.specimenTable}>\r\n                    <TableHead>\r\n                      <TableRow>\r\n                        <TableCell style={{ width: \"5%\" }} />\r\n                        <TableCell\r\n                          className={classes.specimenHeader}\r\n                          style={{ width: \"15%\" }}\r\n                        >\r\n                          TYPE\r\n                        </TableCell>\r\n                        {showTat() && (\r\n                          <TableCell\r\n                            className={classes.specimenHeader}\r\n                            style={{ width: \"10%\" }}\r\n                          >\r\n                            TAT\r\n                          </TableCell>\r\n                        )}\r\n                        {test.sampleTypes.some(\r\n                          (s) => !!s.specimenRequirements,\r\n                        ) && (\r\n                          <TableCell\r\n                            className={classes.specimenHeader}\r\n                            style={{ width: \"35%\" }}\r\n                          >\r\n                            REQUIREMENTS\r\n                          </TableCell>\r\n                        )}\r\n                        {test.sampleTypes.some(\r\n                          (s) => !!s.shippingConditions,\r\n                        ) && (\r\n                          <TableCell\r\n                            className={classes.specimenHeader}\r\n                            style={{ width: \"40%\" }}\r\n                          >\r\n                            SHIPPING CONDITIONS\r\n                          </TableCell>\r\n                        )}\r\n                      </TableRow>\r\n                    </TableHead>\r\n                    <TableBody>\r\n                      {test.sampleTypes\r\n                        .filter((x) => x.displayInCatalog)\r\n                        .sort((a, b) =>\r\n                          a.displayOrder > b.displayOrder ? 1 : -1,\r\n                        )\r\n                        .map((row) => (\r\n                          <TableRow\r\n                            key={row.name}\r\n                            className={classes.specimenRow}\r\n                          >\r\n                            <TableCell component=\"th\" scope=\"row\">\r\n                              {mapNameToImage(row.name) && (\r\n                                <img\r\n                                  src={`/images/${mapNameToImage(row.name)}`}\r\n                                  className={classes.icon}\r\n                                  alt={row.name}\r\n                                />\r\n                              )}\r\n                            </TableCell>\r\n                            <TableCell className={classes.specimenType}>\r\n                              {row.name}\r\n                            </TableCell>\r\n                            {showTat() && (\r\n                              <TableCell className={classes.specimenDefault}>\r\n                                {showTat(row) && row.tat}\r\n                              </TableCell>\r\n                            )}\r\n                            {test.sampleTypes.some(\r\n                              (s) => !!s.specimenRequirements,\r\n                            ) && (\r\n                              <TableCell\r\n                                className={classes.specimenDefault}\r\n                                dangerouslySetInnerHTML={{\r\n                                  __html:\r\n                                    (row &&\r\n                                      row.specimenRequirements &&\r\n                                      row.specimenRequirements.replace(\r\n                                        /(?:\\r\\n|\\r|\\n)/g,\r\n                                        \"<br>\",\r\n                                      )) ||\r\n                                    \"\",\r\n                                }}\r\n                              ></TableCell>\r\n                            )}\r\n                            {test.sampleTypes.some(\r\n                              (s) => !!s.shippingConditions,\r\n                            ) && (\r\n                              <TableCell\r\n                                className={classes.specimenDefault}\r\n                                dangerouslySetInnerHTML={{\r\n                                  __html:\r\n                                    (row &&\r\n                                      row.shippingConditions &&\r\n                                      row.shippingConditions.replace(\r\n                                        /(?:\\r\\n|\\r|\\n)/g,\r\n                                        \"<br>\",\r\n                                      )) ||\r\n                                    \"\",\r\n                                }}\r\n                              ></TableCell>\r\n                            )}\r\n                          </TableRow>\r\n                        ))}\r\n                    </TableBody>\r\n                  </Table>\r\n                  {test.recommendedSample && (\r\n                    <div className={classes.sampleRecommendedText}>\r\n                      {test.recommendedSample}\r\n                    </div>\r\n                  )}\r\n                </Hidden>\r\n                <Hidden smUp>\r\n                  <div className={classes.specimenTableMobile}>\r\n                    {test.sampleTypes.map<React.ReactNode>((row, index) => (\r\n                      <div>\r\n                        {!!index && <hr className={classes.specimenDivider} />}\r\n                        <div\r\n                          className={classes.specimenHeaderMobile}\r\n                          style={{ width: \"15%\" }}\r\n                        >\r\n                          TYPE\r\n                        </div>\r\n                        <div style={{ fontWeight: 700 }}>{row.name}</div>\r\n                        <div\r\n                          className={classes.specimenHeaderMobile}\r\n                          style={{ width: \"40%\" }}\r\n                        >\r\n                          REQUIREMENTS\r\n                        </div>\r\n\r\n                        <div>\r\n                          {\" \"}\r\n                          {test.sampleTypes.some(\r\n                            (s) => !!s.specimenRequirements,\r\n                          ) && (\r\n                            <div\r\n                              className={classes.specimenDefault}\r\n                              dangerouslySetInnerHTML={{\r\n                                __html: (row && row.specimenRequirements) || \"\",\r\n                              }}\r\n                            ></div>\r\n                          )}\r\n                        </div>\r\n\r\n                        <div\r\n                          className={classes.specimenHeaderMobile}\r\n                          style={{ width: \"40%\" }}\r\n                        >\r\n                          SHIPPING CONDITIONS\r\n                        </div>\r\n\r\n                        <div>\r\n                          {test.sampleTypes.some(\r\n                            (s) => !!s.shippingConditions,\r\n                          ) && (\r\n                            <div className={classes.specimenDefault}>\r\n                              {row.shippingConditions}\r\n                            </div>\r\n                          )}\r\n                        </div>\r\n                      </div>\r\n                    ))}\r\n                  </div>\r\n                  {test.recommendedSample && (\r\n                    <div className={classes.sampleRecommendedText}>\r\n                      {test.recommendedSample}\r\n                    </div>\r\n                  )}\r\n                </Hidden>\r\n              </PrimaryExpansionPanel>\r\n            )}\r\n            {(test.genes || test.geneText) && (\r\n              <PrimaryExpansionPanel title=\"Gene Coverage\">\r\n                <div className={classes.geneList}>\r\n                  {test.geneText === undefined ||\r\n                    (test.geneText === \"\" && test.genes && (\r\n                      <div\r\n                        dangerouslySetInnerHTML={{\r\n                          __html: test.genes\r\n                            .map((gene) => gene.name)\r\n                            .sort()\r\n                            .toString()\r\n                            .replaceAll(\",\", \"<br>\"),\r\n                        }}\r\n                      />\r\n                    ))}\r\n                  {test.geneText !== undefined && (\r\n                    <div\r\n                      dangerouslySetInnerHTML={{\r\n                        __html: test.geneText.replaceAll(\",\", \"<br>\"),\r\n                      }}\r\n                    />\r\n                  )}\r\n                </div>\r\n              </PrimaryExpansionPanel>\r\n            )}\r\n            {test.probes && (\r\n              <PrimaryExpansionPanel title=\"Probes\">\r\n                <div>\r\n                  {test.probes !== undefined && (\r\n                    <div\r\n                      className={classes.info}\r\n                      dangerouslySetInnerHTML={{ __html: test.probes }}\r\n                    />\r\n                  )}\r\n                </div>\r\n              </PrimaryExpansionPanel>\r\n            )}\r\n            {window.appConfig.showDetectedConditionsPanels.includes(\r\n              test.code || \"\",\r\n            ) &&\r\n              !(\r\n                window.appConfig.features.isDetectedConditionsDiabled ===\r\n                undefined\r\n              ) &&\r\n              !window.appConfig.features.isDetectedConditionsDiabled &&\r\n              test.genes &&\r\n              test.genes.length > 0 && (\r\n                <div>\r\n                  <PrimaryExpansionPanel title=\"DETECTED CONDITIONS\">\r\n                    <Table className={classes.detectedTableHeader}>\r\n                      <TableHead>\r\n                        <TableRow>\r\n                          <TableCell\r\n                            className={classes.detectedHeader}\r\n                            style={{ width: \"10%\" }}\r\n                          />\r\n                          <TableCell\r\n                            className={classes.detectedHeader}\r\n                            style={{ width: \"20%\" }}\r\n                          >\r\n                            GENE\r\n                          </TableCell>\r\n                          <TableCell\r\n                            className={classes.detectedHeader}\r\n                            style={{ width: \"20%\" }}\r\n                          >\r\n                            GENE OMIM ID\r\n                          </TableCell>\r\n                          <TableCell\r\n                            className={classes.detectedHeader}\r\n                            style={{ width: \"50%\" }}\r\n                          >\r\n                            ASSOCIATED CONDITION(S)\r\n                          </TableCell>\r\n                          <div style={{ width: \"17px\" }} />\r\n                        </TableRow>\r\n                      </TableHead>\r\n                    </Table>\r\n                    <TableContainer className={classes.detectedTableContainer}>\r\n                      <Table className={classes.detectedTable} stickyHeader>\r\n                        <TableBody className={classes.detectedTableBody}>\r\n                          {test.genes\r\n                            .sort((a, b) => a.name.localeCompare(b.name))\r\n                            .map((gene) => (\r\n                              <TableRow\r\n                                key={gene.name}\r\n                                className={classes.detectedRow}\r\n                              >\r\n                                <TableCell\r\n                                  className={classes.detectedDefault}\r\n                                  style={{ width: \"10%\" }}\r\n                                />\r\n                                <TableCell\r\n                                  className={classes.detectedGene}\r\n                                  style={{ width: \"20%\" }}\r\n                                >\r\n                                  {gene.name}\r\n                                </TableCell>\r\n                                <TableCell\r\n                                  className={classes.detectedDefault}\r\n                                  style={{ width: \"20%\" }}\r\n                                >\r\n                                  {gene.omim || \"\"}\r\n                                </TableCell>\r\n                                <TableCell\r\n                                  className={classes.detectedDefault}\r\n                                  style={{ width: \"50%\" }}\r\n                                >\r\n                                  {(gene.diseases &&\r\n                                    gene.diseases\r\n                                      .filter(\r\n                                        (disease) =>\r\n                                          disease.name &&\r\n                                          disease.name !== \"nan\",\r\n                                      )\r\n                                      .map((disease) => disease.name)\r\n                                      .join(\"; \")) ||\r\n                                    getGeneNullText(gene)}\r\n                                </TableCell>\r\n                              </TableRow>\r\n                            ))}\r\n                        </TableBody>\r\n                      </Table>\r\n                    </TableContainer>\r\n                  </PrimaryExpansionPanel>\r\n                </div>\r\n              )}\r\n            <PrimaryExpansionPanel title=\"Billing Information\">\r\n              <Info label=\"CPT Codes\" value={test.cptCodes} />\r\n              <Info\r\n                label=\"List Price\"\r\n                value=\"For Insurance or Institutional Prices, please call our Billing Department at +1.800.411.4363 ext. 2.\"\r\n              />\r\n            </PrimaryExpansionPanel>\r\n          </div>\r\n        )}\r\n      </div>\r\n    </>\r\n  );\r\n};\r\n\r\nexport default TestDetails;\r\n","import _classCallCheck from \"D:\\\\agent\\\\_work\\\\79\\\\s\\\\node_modules\\\\babel-preset-react-app\\\\node_modules\\\\@babel\\\\runtime/helpers/esm/classCallCheck\";\nimport _createClass from \"D:\\\\agent\\\\_work\\\\79\\\\s\\\\node_modules\\\\babel-preset-react-app\\\\node_modules\\\\@babel\\\\runtime/helpers/esm/createClass\";\nimport queryString from \"query-string\";\n\nvar QueryStringHelper =\n/*#__PURE__*/\nfunction () {\n  function QueryStringHelper(search) {\n    _classCallCheck(this, QueryStringHelper);\n\n    this.search = search;\n    this.parsedQuery = queryString.parse(search);\n  }\n  /**\r\n   *\r\n   * @param key key of matching query parameter\r\n   * @param defaultToReturn default value when key is null or undefined\r\n   * @returns string\r\n   */\n\n\n  _createClass(QueryStringHelper, [{\n    key: \"getStringValue\",\n    value: function getStringValue(key, defaultToReturn, delimiter) {\n      var value = this.parsedQuery[key];\n      defaultToReturn = defaultToReturn || \"\";\n\n      if (value === undefined || value === null) {\n        return defaultToReturn || \"\";\n      } else if (Array.isArray(value)) {\n        return value.join(delimiter);\n      } else {\n        return value;\n      }\n    }\n    /**\r\n     *\r\n     * @param key key of matching query parameter\r\n     * @returns list of string\r\n     */\n\n  }, {\n    key: \"getStringListValues\",\n    value: function getStringListValues(key) {\n      var values = [];\n      var value = this.parsedQuery[key];\n\n      if (value) {\n        if (Array.isArray(value)) {\n          return value;\n        } else values.push(value);\n      }\n\n      return values;\n    }\n    /**\r\n     *\r\n     * @param key key of matching query parameter\r\n     * @param defaultToReturn default value when key is null or undefined\r\n     * @returns string\r\n     */\n\n  }, {\n    key: \"getNumberValue\",\n    value: function getNumberValue(key, defaultToReturn) {\n      var value = this.parsedQuery[key];\n      defaultToReturn = defaultToReturn || 1;\n\n      if (value === undefined || value === null) {\n        return defaultToReturn;\n      } else if (Array.isArray(value)) {\n        console.error(\"query value is not integer.\");\n        return defaultToReturn;\n      } else {\n        var result = Number(value);\n        return Number.isNaN(result) ? defaultToReturn : result;\n      }\n    }\n  }, {\n    key: \"getBooleanValue\",\n    value: function getBooleanValue(key, defaultToReturn) {\n      var value = this.parsedQuery[key];\n      defaultToReturn = defaultToReturn || false;\n\n      if (value === undefined || value === null) {\n        return defaultToReturn;\n      } else if (Array.isArray(value)) {\n        console.error(\"query value is not integer.\");\n        return defaultToReturn;\n      } else {\n        return value === \"true\";\n      }\n    }\n    /**\r\n     *\r\n     * @param key key of matching query parameter\r\n     * @param value new value to update\r\n     * @returns new string of query parameter with added or updated value\r\n     */\n\n  }, {\n    key: \"addOrUpdateValue\",\n    value: function addOrUpdateValue(key, value) {\n      if (value === undefined || value === null) {\n        value = \"\";\n      }\n\n      if (typeof value === \"number\") {\n        value = value.toString();\n      }\n\n      this.parsedQuery[key] = value;\n      return queryString.stringify(this.parsedQuery);\n    }\n    /**\r\n     * Parses a JSON string from the query parameter and returns the corresponding object\r\n     * @param key key of matching query parameter\r\n     * @param defaultToReturn default value when key is null, undefined, or invalid JSON\r\n     * @returns parsed object or default value\r\n     */\n\n  }, {\n    key: \"getJSONValue\",\n    value: function getJSONValue(key, defaultToReturn) {\n      var value = this.parsedQuery[key];\n\n      if (value === undefined || value === null || value === \"\") {\n        return defaultToReturn;\n      }\n\n      try {\n        if (Array.isArray(value)) {\n          return value.length > 0 ? JSON.parse(value[0]) : defaultToReturn;\n        } else {\n          return JSON.parse(value);\n        }\n      } catch (error) {\n        console.warn(\"Error parsing JSON for key \\\"\".concat(key, \"\\\":\"), error);\n        return defaultToReturn;\n      }\n    }\n  }]);\n\n  return QueryStringHelper;\n}();\n\nexport { QueryStringHelper as default };","import { DefaultLayout } from \"@bg/shared/lib/components\";\r\nimport tests, { Test } from \"@bg/shared/lib/dal/tests\";\r\nimport React, { FunctionComponent, useEffect, useState } from \"react\";\r\nimport { RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport TestDetails from \"./TestDetails\";\r\nimport QueryStringHelper from \"@bg/shared/lib/utils/QueryStringHelper\";\r\n\r\nconst TestDetailsContainer: FunctionComponent<RouteComponentProps> = ({\r\n\tlocation,\r\n\tmatch,\r\n}) => {\r\n\tconst emptyTest: Test = {\r\n\t\tid: 0,\r\n\t\tname: \"\",\r\n\t\tcode: \"\",\r\n\t\tdescription: \"\",\r\n\t\tgenes: [],\r\n\t\tmethodology: \"\",\r\n\t\tsampleTypes: [],\r\n\t\tspecialNotes: \"\",\r\n\t\tnysApproved: \"\",\r\n\t};\r\n\tconst [data, setData] = useState<Test>(emptyTest);\r\n\tconst [kitLink, setKitLink] = useState(\"\");\r\n\tconst [clientTestCode, setClientTestCode] = useState<Test>() || undefined;\r\n\tconst qsManager = new QueryStringHelper(location.search);\r\n\tconst ctc = qsManager.getStringValue(\"ctc\");\r\n\r\n\tconst testCode = (match.params as any).code;\r\n\tuseEffect(() => {\r\n\t\ttests.getDetails(testCode).then((test) => {\r\n\t\t\tsetData(test);\r\n\t\t});\r\n\t}, [testCode]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (data && data.kits && data.kits.length > 0) {\r\n\t\t\tsetKitLink(\r\n\t\t\t\t`${window.appConfig.ordersUrl}/kit-order?testcodes=${testCode}`\r\n\t\t\t);\r\n\t\t}\r\n\t}, [data, testCode]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (ctc) {\r\n\t\t\ttests.getDetails(ctc).then((ctcData) => {\r\n\t\t\t\tsetClientTestCode(ctcData);\r\n\t\t\t});\r\n\t\t} else setClientTestCode(undefined);\r\n\t}, [ctc]);\r\n\r\n\treturn (\r\n\t\t<DefaultLayout hideLogin={true}>\r\n\t\t\t<TestDetails test={clientTestCode || data} kitLink={kitLink} />\r\n\t\t</DefaultLayout>\r\n\t);\r\n};\r\n\r\nexport default withRouter(TestDetailsContainer);\r\n","import TestDetailsContainer from \"./TestDetailsContainer\";\r\n\r\nexport default TestDetailsContainer;\r\n"],"sourceRoot":""}