{"version":3,"sources":["core/components/buttons/DeleteButton.tsx","core/components/modals/confirm-submit.tsx","core/services/model-mapping-service.ts","api/EstimateHistoryApi.ts","modules/schemas/hooks.tsx","modules/schemas/components/full-project-tracking-only-tooltip.tsx","core/util/format.ts","core/components/StyledMaterialTooltip.tsx","modules/schemas/components/preconhbmap/HBFields.ts","modules/settings/components/OAuthConfigurationPanel.tsx","core/components/modals/SideModal.tsx","modules/calendars/components/CalendarSubscriptionCard.tsx","modules/calendars/components/InactiveOptionsButton.tsx","modules/calendars/components/ActiveOptionsButton.tsx","modules/calendars/components/ReadonlyCalendarContent.tsx","modules/calendars/components/NylasSelect.tsx","modules/calendars/components/NylasCalendarContent.tsx","modules/calendars/components/CalendarSubscribePanel.tsx","modules/projects/components/ProjectsCalendarSubscribeModal.tsx","modules/settings/components/HcssConnectConfigurationPanel.tsx","modules/settings/components/BusinessUnitColumns.ts","modules/settings/components/BusinessUnitPanel.tsx","modules/layout/components/common/header-section-with-back-button.tsx","modules/layout/components/navigation/context/customize-setup.tsx","modules/layout/components/navigation/module/project-tracking.tsx","modules/estimates/components/recent-estimates/recent-estimate-list.tsx","modules/layout/components/navigation/module/estimating.tsx","modules/contacts/components/search-contacts-modal/company-card.tsx","modules/contacts/components/search-contacts-modal/contact-list.tsx","modules/contacts/components/search-contacts-modal/company-list.tsx","core/util/pagination.ts","modules/contacts/components/search-contacts-modal/modal.tsx","modules/layout/components/navigation/module/contacts.tsx","core/components/sidenavigation/quick-select.tsx","modules/layout/components/navigation/context/estimate-details.tsx","modules/layout/components/navigation/context/vendor-details.tsx","modules/layout/components/navigation/context/profile-details.tsx","modules/layout/components/navigation/context/imports.tsx","modules/layout/components/navigation/context/customize-reporting.tsx","modules/layout/components/navigation/context/index.tsx","modules/layout/components/site-layout.tsx","modules/layout/components/navigation/module/index.tsx","modules/schemas/components/fields/CheckListChart.tsx","modules/schemas/components/fields/CheckList.tsx","modules/account/components/unauthorized/roadblock.tsx","core/components/sidenavigation/Header.tsx","core/components/sidenavigation/use-side-navigation.ts","core/components/sidenavigation/index.tsx","core/components/buttons/BackButton.tsx","core/components/StyledMaterialTable.tsx","modules/schemas/components/fields/project-id-input.tsx","modules/quote-management/repository/master-solicitation-repo.ts","core/components/NumericInput.tsx","modules/projects/hooks.ts","api/ContactsApi.ts","api/GeneratedClients/EstimateHistoryClient.ts","modules/views/components/filters/filter-select.tsx","modules/quote-management/repository/communication-log-repo.ts","core/components/badge.tsx","colorConfigurations.ts","modules/quote-management/repository/master-proposal-repo.ts","core/hooks/use-debounce.ts","core/hooks/use-debounced-effect.ts","api/HeavyJobApi.ts","modules/projects/sagas.ts","core/models/enums.ts","modules/projects/views/paths.ts","core/util/sandbox.tsx","modules/contacts/components/vendor-list-modal.tsx","api/index.ts","modules/email-subscriptions/state.ts","modules/estimates/sagas.ts","modules/estimates/views/paths.ts","modules/quick-pricing/state.ts","modules/configurationSettings/use-feature-flags.ts","modules/contacts/components/vendor-company-type.tsx","modules/contacts/components/vendor-main-info.tsx","modules/contacts/components/vendor-scopes-of-work.tsx","modules/contacts/hooks/use-save-vendor-details.tsx","modules/contacts/components/vendor-location-detail-info.tsx","modules/contacts/components/vendor-edit-details.tsx","core/models/IUserClaims.ts","modules/views/standard-views/edit-estimate-list.ts","modules/views/standard-views/key-indicators.ts","modules/views/standard-views/quote-dashboard.ts","modules/views/state.ts","modules/account/services/oidc-context.ts","modules/calendars/state.ts","modules/calendars/sagas.ts","config.ts","core/components/empty-state/index.tsx","modules/schemas/filters.ts","core/util/files.ts","core/util/rounding.ts","core/util/types.ts","core/util/patch.ts","core/util/dict.ts","core/util/location-helpers.ts","core/util/provinces.ts","core/util/fenix.ts","core/util/delay.ts","modules/account/components/protected-route.tsx","modules/estimates/context/CurrentEstimateContext.ts","modules/account/services/oidc-service.ts","modules/estimates/context/CodebooksContext.ts","core/components/bundle-fixes/LegacyVirtualTable.tsx","modules/contacts/components/create-minority-type-modal.tsx","modules/tables/columns/single-select-list-editor.tsx","modules/tables/columns/column-providers.tsx","core/components/modals/ConfirmDelete.tsx","firebase-app.ts","modules/schemas/standard-schemas/estimate-extended-schema.ts","modules/schemas/standard-schemas/bidresults-schema.ts","modules/schemas/standard-schemas/activity-codebooks-schema.ts","modules/schemas/state.ts","modules/account/sagas/helpers.ts","modules/account/sagas/auth-signin.ts","modules/account/sagas/auth-listeners.ts","modules/account/sagas/auth.ts","modules/account/sagas/auth-user.ts","modules/account/sagas/auth-decline.ts","modules/account/sagas/user.ts","modules/account/sagas/company.ts","modules/account/index.ts","modules/account/services/account-service.ts","modules/estimates/hooks/use-codebooks-daterange.ts","logging/history.ts","logging/app-insights.ts","logging/middleware.ts","logging/datadog.ts","core/components/not-found.tsx","modules/selectors.ts","core/components/generic-error.tsx","modules/estimates/components/common/estimating-get-started.tsx","modules/estimates/views/estimate-lookup.tsx","modules/estimates/views/index.tsx","modules/contacts/views/index.tsx","modules/contacts/hooks/useBUContextError.ts","core/terms-and-conditions.tsx","modules/account/components/confirm/confirm-panel.tsx","modules/account/components/confirm/decline-panel.tsx","modules/account/components/confirm/index.tsx","modules/account/components/email-verification/index.tsx","modules/account/components/oidc/oidc-callback.tsx","modules/account/components/oidc/oidc-silent-renew.tsx","modules/account/components/oidc/oidc-logout.tsx","modules/account/components/sub-signup.tsx","modules/account/views/index.tsx","modules/account/components/private-route.tsx","modules/account/components/unauthorized/info-card.tsx","modules/account/components/unauthorized/index.tsx","modules/quote-management/context/proposal-context.ts","modules/quote-management/context/vendor-communication-context.ts","dev-tools/index.tsx","dev-tools/util.ts","app-providers.tsx","core/components/unsupported-browser-banner.tsx","App.tsx","print-helper.ts","registerServiceWorker.ts","core/components/app-error-redirect.tsx","mirage/index.tsx","core/components/sandbox-error-redirect.tsx","index.tsx","icons.ts","modules/schemas/components/fields/CompanyInput.tsx","modules/layout/components/navigation/module/styles.tsx","modules/settings/state.ts","modules/schemas/selectors.ts","modules/email-subscriptions/sagas.ts","modules/configurationSettings/state.ts","modules/contacts/hooks/use-get-selected-vendor.tsx","modules/schemas/services/calculated-field.service.ts","core/components/avatar.tsx","localization/english.ts","localization/fr-ca.ts","localization/strings.ts","localization/dates.ts","localization/index.ts","modules/schemas/components/filters/dateTimeUtils.ts","api/RestApi.ts","modules/contacts/components/contact-scopes-of-work.tsx","modules/contacts/components/contact-list-modal.tsx","modules/contacts/hooks/use-get-selected-vendor-from-project.tsx","modules/projects/common/undo-estimate-linking.hook.ts","modules/projects/common/init-project-fields.ts","modules/tables/column-chooser-modal.tsx","core/components/bundle-fixes/LegacyGroupingPanel.tsx","modules/tables/search/extended-integrated-filtering.tsx","modules/configurationSettings/sagas.ts","core/components/filter-pill-noview.tsx","core/components/filters-noview.tsx","modules/views/components/filters/use-selected-filters.ts","mirage/db/constants.ts","core/components/filters-styles.tsx","modules/contacts/components/contact-list-columns.tsx","modules/contacts/components/contact-column-providers.tsx","modules/contacts/components/sync-contact-modal.tsx","modules/contacts/components/contact-list.tsx","modules/contacts/components/vendor-details.tsx","modules/tables/cells/custom-cells-components.tsx","core/util/states.ts","core/components/modals/index.tsx","modules/estimates/utils.ts","core/services/hcss-connect/services/account-service.ts","core/services/hcss-connect/hcss-connect-context.tsx","core/components/hcss-navigation/controllers/ui-controller.ts","core/components/hcss-navigation/contexts/navigation-controller-context.tsx","api/api-saga-factory.ts","modules/settings/index.ts","modules/tables/plugins/export-rows.tsx","core/hooks/use-query-params.ts","modules/projects/common/helpers.tsx","modules/estimates/state.ts","core/components/containers/no-data-placeholder.tsx","core/components/loaders.tsx","core/util/clipboard.ts","modules/profile/state.ts","modules/profile/services/profile-service.ts","modules/profile/sagas.ts","core/components/hcss-navigation/common/constants.ts","logging/usage-tracking.ts","modules/quick-pricing/sagas.ts","api/ContactApi.ts","modules/contacts/helpers/contactProductsListFactory.tsx","modules/contacts/helpers/separateNewAndExistingProducts.tsx","modules/contacts/sagas.ts","modules/contacts/helpers/newProductDtoFactory.tsx","api/AxiosInstance.ts","modules/estimates/components/recent-estimates/use-recent-estimates.ts","core/components/buttons/DownloadButton.tsx","core/components/print/index.tsx","core/components/smartdrive/delete-confirmation.tsx","core/components/smartdrive/table-action.tsx","core/components/smartdrive/table-filecell.tsx","core/components/smartdrive/table.tsx","core/components/date-time-picker.tsx","core/components/header.tsx","core/components/fields/email-field.tsx","core/components/fields/phone-field.tsx","core/util/multi-select-helpers.ts","modules/contacts/hooks/use-vendor-location-drop-down.ts","core/components/hcss-navigation/common/noop.ts","core/components/hcss-navigation/contexts/layout-event-context.tsx","core/components/hcss-navigation/common/render-blocker.tsx","core/components/hcss-navigation/common/shadow.tsx","core/components/hcss-navigation/components/layout-manager/composed-global-side-navigation.tsx","core/components/hcss-navigation/components/resize-transition/helpers.ts","core/components/hcss-navigation/components/dynamic-navigation/module-navigation-wrapper.tsx","core/components/hcss-navigation/components/dynamic-navigation/context-navigation-wrapper.tsx","core/components/hcss-navigation/common/use-is-mounted.tsx","core/components/hcss-navigation/components/dynamic-navigation/index.tsx","core/components/hcss-navigation/components/layout-manager/composed-dynamic-navigation.tsx","core/components/hcss-navigation/components/resize-transition/index.tsx","core/components/hcss-navigation/components/resize-control/toggle-button.tsx","core/components/hcss-navigation/components/resize-control/grab-area.tsx","core/components/hcss-navigation/components/resize-control/index.tsx","core/components/hcss-navigation/components/layout-manager/navigation.tsx","core/components/hcss-navigation/components/layout-manager/page-content.tsx","core/components/hcss-navigation/components/layout-manager/index.tsx","core/components/hcss-navigation/components/index.tsx","core/components/hcss-navigation/components/width-detector/index.tsx","core/components/hcss-navigation/controllers/overflow-controller.ts","core/components/hcss-navigation/contexts/overflow-status-context.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-context.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-unstyled.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/index.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-toggle.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-button.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-menu.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-icon.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/primary-item-container.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/index.tsx","core/components/hcss-navigation/components/global-navigation/side-navigation/items/index.tsx","core/components/hcss-navigation/components/global-navigation/side-navigation/index.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/profile-menu.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-menu-manager.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-menu-item.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-menu-divider.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/help-menu.tsx","core/components/hcss-navigation/components/global-navigation/top-navigation/items/dropdown/dropdown-menu-heading.tsx","core/components/hcss-navigation/components/sections/get-animation-styles.ts","core/components/hcss-navigation/components/sections/base.tsx","core/components/hcss-navigation/components/sections/header-section.tsx","core/components/hcss-navigation/components/sections/menu-section.tsx","core/components/hcss-navigation/components/sections/section-heading.tsx","core/components/hcss-navigation/components/dynamic-navigation/items/index.tsx","core/components/hcss-navigation/components/placeholders/dynamic-menu.tsx","modules/signalr/state.ts","modules/signalr/init.ts","modules/signalr/sagas.ts","modules/account/state.ts","api/GeneratedClients/insights.tsx","modules/account/hooks.ts","core/components/paneled-page/PaneledPageContext.ts","core/components/paneled-page/PageHeaderPanel.tsx","core/components/paneled-page/ContentMain.tsx","core/components/paneled-page/ContentAside.tsx","core/components/paneled-page/ContentSection.tsx","core/components/paneled-page/StatusFlag.tsx","core/components/paneled-page/SectionTableOfContents.tsx","core/components/paneled-page/PageContentPanel.tsx","core/components/paneled-page/FiltersToggle.tsx","core/components/paneled-page/PaneledPage.tsx","modules/email-subscriptions/common/validation-helper.ts","modules/estimates/components/codebooks/CodebooksIcon.tsx","modules/estimates/components/codebooks/CodebooksLimitedView.tsx","modules/estimates/components/codebooks/CodebooksShared.tsx","modules/estimates/components/codebooks/CodebooksUtilizedTable.tsx","modules/estimates/components/codebooks/CodebooksUnusedTable.tsx","modules/estimates/components/codebooks/CodebooksMissingTable.tsx","modules/estimates/components/CodebooksDateRangeDisplay.tsx","modules/estimates/components/CodebooksPage.tsx","core/components/notify.tsx","core/components/modals/ConfirmBack.tsx","core/components/containers/section.tsx","core/components/containers/text-overflow.tsx","modules/schemas/components/fields/MultiSelectListInput.tsx","modules/quote-management/context/solicitation-context.ts","modules/projects/components/NewProjectLink.tsx","modules/schemas/components/filters/BooleanFilter.tsx","modules/schemas/components/filters/ChecklistFilter.tsx","modules/schemas/components/filters/DateTimeFilter.tsx","modules/schemas/components/filters/FilterTypeSelect.tsx","modules/schemas/components/filters/ListFilter.tsx","modules/schemas/components/filters/NumberFilter.tsx","modules/schemas/components/filters/TextFilter.tsx","modules/schemas/components/filters/ProjectIdFilter.tsx","modules/schemas/components/filters/SchemaFieldFilter.tsx","modules/projects/components/quick-pricing/models/quick-price-sheet.model.ts","modules/contacts/components/contact-popover.tsx","modules/tables/selection-table.tsx","core/util/strings.ts","core/util/is-supported-browser.ts","modules/projects/views/index.tsx","modules/contacts/state.ts","modules/settings/views/index.tsx","modules/projects/state.ts","modules/tutorials/tutorial-steps.tsx","modules/tutorials/use-tutorial.tsx","modules/account/services/env-service.ts","modules/schemas/standard-schemas/quote-dashboard-schema.ts","modules/contacts/components/move-contact-modal.tsx","modules/layout/components/navigation/side-navigation.tsx","modules/layout/components/navigation/help-menu.tsx","modules/layout/components/navigation/region-menu-item.tsx","modules/layout/components/navigation/language-menu-item.tsx","modules/layout/components/navigation/top-navigation.tsx","modules/store.ts","modules/sagas.ts","modules/contacts/components/minority-status-columns.tsx","modules/contacts/components/minority-status-list.tsx","modules/schemas/sagas.ts","modules/schemas/index.ts","modules/schemas/components/SchemaSetupModels.ts","modules/schemas/components/fields/ContactInput.tsx","modules/quote-management/repository/vendor-solicitation-repo.ts","modules/quote-management/repository/vendor-proposal-repo.ts","modules/schemas/components/filters/common.ts","modules/projects/index.ts","api/GeneratedClients/ContactsClient.ts","api/ViewsApi.ts","modules/views/sagas.ts","api/EmailSubscriptionApi.ts","core/components/hcss-navigation/common/use-previous.tsx","modules/layout/components/FullPageLoading.tsx"],"names":["DeleteButton","onClick","disabled","showText","testId","children","StyledButton","hcssStyle","style","margin","name","size","strings","core","buttons","delete","styled","Button","ConfirmSubmitModal","props","StyledModalWrapper","bsSize","show","onHide","handleClose","Header","closeButton","Title","title","Body","Footer","className","genericModal","cancel","handleConfirm","submitButtonText","confirm","Modal","ModelMappingService","parseMinorityStatuses","mstatuses","filter","ms","isNullOrWhitespace","code","map","trim","mapToContact","contacts","c","firstName","lastName","email","emailAddress","cellPhone","cellPhoneNumber","phone","phoneNumber","mapVendorToContact","vendor","mapToVendors","vendors","v","hbId","id","minorityStatuses","this","mapToMasterSolicitationFilter","from","toLowerCase","MessageStatus","Draft","Sent","mapToQuoteItem","quoteItems","i","clientNo","hbQuoteFolderId","quoteFolderId","description","alternateDescription","quantity","quantityAdditiveFactored","unit","unitPrice","total","originalHbId","mapToIDocument","fileName","shareUrl","mime","created","cd","modified","md","undefined","Timestamp","fromDate","Date","now","url","mapToIDocuments","files","f","mapToMessageType","solicitations","details","addendum","MessageType","Addendum","followUp","FollowUp","Initial","mapFromMessageType","type","isProposal","quoteProposal","initialProposal","initialSolicitation","mapToSendEmailType2","method","SendEmailVia","Mailgun","SendEmailVia2","OAuth","SMTP","mapNylasAccountToUsableAccount","nylasAccount","isBadOverwrite","account_id","email_address","serviceName","mapNylasProviderToFullName","provider","linked_at","isBad","isAccountBad","sync_state","abbreviation","syncState","NylasSyncState","InvalidCredentials","SyncError","Stopped","Exception","Invalid","baseUrl","appconfig","endpoints","HBINSIGHTS","EstimateHistoryApi","EstimateHistoryClient","constructor","accessToken","super","getDefaultInstance","useHBFields","fieldLabels","useSelector","getEstimatesExtendedSchemaFieldLabels","useMemo","HBFields","section","currentSectionOptions","options","option","mappedKey","determineHBFieldKeyForLabelKey","value","label","FullProjectTrackingOnlyTooltip","schemas","setup","fullProjectTrackingOnly","formatNumber","num","decimals","numeral","format","repeat","formatNumberFixed","re","RegExp","match","exec","toString","fixed","NaN","Number","formatBoolean","val","formatPercent","formatCurrency","formatCurrencyTruncate","formatDate","date","accountForTimezone","d","hasOwnProperty","toDate","moment","utc","formatTime","formatDateTime","split","parseDate","stringValue","isNaN","valueOf","isYearIn100Range","dateValue","isValid","hour","includes","set","formatPhoneNumber","formatString","args","replace","number","formatFirstNameLastName","sortLatLong","a","b","lat","long","sortCompany","aCompanyFieldDisplay","formatCompanyField","bCompanyFieldDisplay","localeCompare","sortContact","aContactFieldDisplay","formatContactField","bContactFieldDisplay","formatLatLong","coords","isString","company","Array","isArray","join","contact","companyName","formatHJJobField","job","getSortMultiSelectFn","config","sortedA","sortValues","getFieldValueAsArray","listValues","customSort","sortedB","val1","val2","newA","newB","maxItems","Math","max","length","aIndex","findIndex","bIndex","getFormatMultiSelect","values","capitalizeWords","str","word","charAt","toUpperCase","slice","TooltipStyling","createGlobalStyle","$maxWidth","StyledMaterialTooltip","maxWidth","Fragment","hideHeader","bodyStyles","body","arrow","classes","popper","popperInteractive","popperArrow","popperClose","tooltip","tooltipArrow","touch","HeavyBidFieldType","group","string","integer","latitudeLongitude","OAuthConfigurationPanel","dispatch","useDispatch","isActive","selectors","getEmailPanelActive","currentUser","useHcssUser","idsrvAccessToken","StyledOAuthConfigurationPanel","actions","toggleEmailPanel","userId","hcssUserId","baseApiUrl","window","location","origin","baseOutboxAuthUrl","OUTBOXAUTH","onGetUserOAuthInfoFailed","error","console","notify","users","oAuthConfig","getUserError","message","onSendTestMessageSuccess","testMessageSuccess","onSendTestMessageFailure","testMessageError","onUpdate","settings","getAccessToken","div","ModalPanelHeader","React","handleHidePanelRequested","event","render","StyledModalPanelHeader","StyledModalPanelCloseButton","StyledModalPanelTitle","panelTitle","ModalPanelBody","StyledModalPanelBody","ModalPanelFooter","StyledModalPanelFooter","ModalPanel","state","panelStatus","ExpandableContentStatus","collapsed","handleKeyPressed","key","componentDidUpdate","prevProps","prevState","document","addEventListener","setState","expanding","debounce","expanded","removeEventListener","collapsing","StyledModalPanel","StyledModalPanelOverlayScreen","StyledModalPanelContent","CalendarSubscriptionCard","templateName","OptionsButton","CardContent","LinkContainer","LinkHeader","InactiveOptionsButton","templateId","onCreateReadonlyLink","onCreateNylasLink","canAccessHcssConnect","useAuthorization","CreateLinkButton","calendars","card","createLink","inverted","pullRight","createReadonlyLink","createNylasLinkk","DropdownButton","red400","blue400","gray600","ConcreteColors","ActiveOptionsButton","readonlyCalendar","nylasCalendar","onDelete","onCreateReadonlyCalendar","showReadonlyDeleteModal","setShowReadonlyDeleteModal","useState","showNylasDeleteModal","setShowNylasDeleteModal","showGenerateReadonlyModal","setShowGenerateReadonlyModal","readonlyLinkExists","nylaslinkExists","deleteNylasLink","deleteReadonlyLink","ConfirmDelete","deleteTitle","zIndex","footer","continue","deleteReadonlyConfirmation","deleteHcssConnectConfirmation","deleteReadonlyWarning","deleteNewReadonlyLink","ReadOnlyCalendarContent","link","PRECON","token","ContentWrapper","readlonlyLinkLabel","width","LinkFormControl","onFocus","target","select","readOnly","ClipboardButton","component","InputGroup","Addon","onSuccess","copy","overlay","syncWarning","placement","LastSync","lastSync","lastPing","none","Clipboard","FormControl","formatGroupLabel","data","groupStyles","groupBadgeStyles","NylasSelect","viewId","selectedCalendar","loadNylasCalendars","nylasAccounts","loading","useHcssConnectContext","showReplaceModal","setShowReplaceModal","newCalId","setNewCalId","read_only","forEach","accountForCal","find","groupLabel","o","push","selected","cal","calendarId","selectedOption","saveCalendar","request","accountId","isNylas","track","module","redux","refreshCalendars","useCallback","leading","StyledSelect","classNamePrefix","onChange","e","calId","isLoading","components","LoadingIndicator","defaultOptions","deleteHcssConnectWarning","deleteNewHcssConnectLink","display","alignItems","justifyContent","marginLeft","paddingLeft","backgroundColor","borderRadius","color","fontSize","lineHeight","minWidth","padding","AsyncSelect","NylasCalendarContent","nylasCalendars","nylasLinkLabel","alignSelf","featureStatus","beta","CalendarSubscribePanel","views","handleDelete","deleteCalendar","handleCreateReadonlyLink","handleCreateNylasLink","getCalendarsByViewId","loaded","getLoaded","StyledPanel","subscribePanel","TitleLabel","links","visible","fontWeight","OpenAccountSettingsButton","settingsActions","toggleCalendarPanel","openAccountSettingsButton","openAccountSettingsAfter","StyledDivWrapper","view","calendarsForView","readOnlyCalendar","iCal","nylas","button","ProjectsCalendarSubscribeModal","viewSelectors","getProjectViewsSorted","calendarModule","getCalendarPanelActive","useEffect","loadCalendars","toggleSideModal","HcssConnectConfigurationPanel","calendarLoading","deleteNylasAccount","connectAccount","calendarsLoaded","calendarSelectors","calendarsByAccountId","getCalendarsByAccountId","href","ModalHeader","NewAccountButton","hcssConnect","connectAccountButton","marginTop","linkedAccounts","sort","account","accountCalendars","CalendarAccountCard","hasExistingCalendars","nc","CalendarAccountCardWrapper","trigger","flexDirection","deletePopover","showDeleteModal","setShowDeleteModal","CardContainer","BadLinkContainer","diff","NewLinkContainer","HelpTrigger","p","deleteConfirmation","helper","recommendDelete","gray500","Link","businessUnitColumns","DataColumnType","Custom","getCellValue","row","home","sortingFunction","priorityA","priorityB","valueAsString","ShortText","BusinessUnitPanel","getBUPanelActive","BUs","accountSelectors","getAccessibleBusinessUnits","homeBU","getHomeBusinessUnit","selectedBU","getSelectedBusinessUnit","hcssUser","getHcssUser","showModal","setShowModal","chosenRowId","setChosenRowId","_","setLocalStorageBU","useLocalStorage","businessUnits","bu","toggleBUPanel","BUTable","selection","handleSelection","change","selectedRowId","businessUnit","reload","columnWidths","setColumnWidths","defaultWidths","columns","sections","height","marginRight","rootComponent","Root","getRowId","rows","onSelectionChange","HomeBUProvider","onColumnWidthsChange","showSortingControls","highlightRow","selectByRowClick","showSelectionColumn","rowComponent","StyledSelectionRow","HomeBUFormatter","icon","formatterComponent","for","columnName","HeaderSectionWithBackButton","backPath","headerStyle","HeaderContainer","BackLink","to","back","FailedSubscriptionsBadge","subscriptions","getSubscriptions","stopedCount","reduce","acc","curr","status","SubscriptionStatus","STOPPED","delayShow","layout","menu","projectTracking","stoppedSubscriptions","Badge","badgeContent","sx","transform","CustomizeSetupContext","path","useLocation","pathname","companyLicense","useUserAndCompanyLicense","isLimitedCompany","isLimitedLicense","permissions","usePermissions","isFeatureEnabled","isFrontEndEmailSubscriptionEnabled","useFeatureFlags","FeatureFlag","FrontEndEmailSubscription","isQuickPricingPhase1Enabled","QuickPricingPhase1","customize","menuStyle","ItemContainer","text","projects","list","isSelected","paths","heavybidIntegration","setupHBIntegration","after","subscriptionSetup","contactWrite","payItemLibrary","theme","colors","neutral","gray700","ProjectTrackingModule","history","useHistory","auth","unlinkedEstimateCount","estimateSelectors","getUnlinkedAndUnhiddenEstimatesCount","canImport","canAccessLimitedPrecon","admin","write","canCustomize","canAccessFullPrecon","headerText","loadSubscriptions","before","estimateMapping","hover","import","RecentEstimateList","recentEstimates","useRecentEstimatesContext","mainText","subText","estimating","getPathForEstimate","textDecoration","EstimateLink","py","px","Box","EstimatingModule","enableCustomizeReporting","isCodebooksFeatureEnabled","iconStyle","beforeWrapperStyle","faBooks","codebooks","edit","CompanyCard","companyId","companyCode","flex","whiteSpace","setShowSearchModal","ContactList","List","isAddEditDisplay","buttonText","showButton","helpText","contactManagement","contactSearchModal","noData","ListItem","disablePadding","ContactCard","borderBottom","marginBottom","ContactInfoField","fieldInfo","LocalPhone","iconColor","green","PhoneAndroid","Email","blue","opacity","textAlign","Avatar","bgcolor","CompanyList","companies","CompanyItem","calculateNumPages","results","numItemsPerPage","ceil","getCurrentPage","currentPage","firstItemInCurrentPageIndex","SearchContactsModal","showSearchModal","getShowSearchModal","isSearching","getIsSearching","currentTab","setCurrentTab","setCurrentPage","searchValue","setSearchValue","debouncedSearch","useDebounce","toLocaleLowerCase","getSearchResultsSorted","uniqueCompanies","companyDict","Object","numPagesContacts","numPagesCompanies","numPages","pagedResults","pagedUniqueCompanies","searchContacts","baseFontSize","Dialog","open","onClose","TransitionComponent","Transition","DialogTitle","InputBase","autoComplete","autoFocus","placeholder","searchBarPlaceholder","fullWidth","currentTarget","CircularProgress","isSandboxEnabled","Banner","MainInfo","WarningIconContainer","warningIconStyle","DialogContent","maxHeight","Tabs","newValue","variant","Tab","StyledBadge","AccountCircle","tabs","Business","DialogActions","Pagination","count","page","forwardRef","ref","Slide","direction","right","top","border","palette","background","paper","boxSizing","boxShadow","transition","overflow","textOverflow","ContactsModule","authorization","common","modules","QuickSelect","dropDown","setShow","HoverContainer","prev","position","Cover","left","GLOBAL_SIDE_NAV_WIDTH","as","MenuItem","header","optionHeader","singlePath","divider","allPath","EstimateDetailsContext","currentEstimate","useCurrentEstimateContext","recentEstimateIds","outboundNewSolicitationCount","useSolicitationContext","workingCopy","getWorkingCopy","currentEstimateId","newQuoteManagementEnabled","NewQuoteManagement","materialReportEnabled","estimateDetailsMatch","useRouteMatch","rawRecentEstimates","estimateId","estimate","params","estimateDetailsPath","keyIndicatorsPath","quotesSummaryPath","reportsPath","materialsPath","estimateCode","estimateName","base","ContextTitle","ContextSubtitle","estimates","estimateAnalysis","estimateDetails","keyIndicators","reporting","materials","isActiveEstimate","quoteManagement","quoteSummary","span","blue200","Dropdown","ProfileDetailsContext","mainDetails","Imports","useAccount","isBidResultsAdminOnly","getAllProjectSchemaFields","x","adminOnly","bidResults","CustomizeReportingContext","activityTotals","customizeReporting","useContextNavigation","estimateCodebooksMatch","customizeReportingMatch","vendorDetailsMatch","profileDetailsMatch","importProjectsMatch","importBidResultsMatch","customizeSetupMatch","context","vendorId","currentSelectedVendor","useGetSelectedVendor","isDisabled","VendorDetailsContext","NoModule","FullHeightContainer","SiteLayout","user","ModuleNavigation","projectsModuleMatch","estimatesModuleMatch","contactsModuleMatch","useModuleNavigation","ContextNavigation","hasDynamicNavigation","isGuestUser","UserType","Guest","globalSideNavigation","SideNavigation","useDynamicNavigation","topOffset","flyoutOnHover","fullWidthFlyout","hideNavVisuallyOnCollapse","showGlobalSideNavShadow","globalTopNavigation","TopNavigation","moduleNavigation","contextNavigation","CheckListChart","keys","indexBy","checked","axisTop","axisRight","axisBottom","axisLeft","labelSkipWidth","labelSkipHeight","labelTextColor","modifiers","notChecked","labelFormat","animate","motionStiffness","motionDamping","isInteractive","CheckList","editingRowIds","addedRows","rowChanges","commitChanges","added","changed","deleted","newObject","newRows","produce","draft","changedIndex","parseInt","mergedObject","changeAddedRows","changeEditingRowIds","changeRowChanges","validateEditedRow","tableRow","tempTableRow","cloneDeep","editedRowId","rowId","maxDescriptionLength","EmptyCell","adminFailure","field","isLocked","getColumns","Boolean","required","LongText","bg","onCommitChanges","onEditingRowIdsChange","onRowChangesChange","onAddedRowsChange","columnExtensions","column","editingEnabled","LegacyVirtualTable","align","noDataCellComponent","showAddCommand","showEditCommand","showDeleteCommand","commandComponent","TableCommandComponent","tableEditColumnProps","validationFunction","cellComponent","CustomEditCellComponent","headerCellComponent","CustomEditCellHeaderComponent","CheckListFormatter","checklistReducer","project","CheckListProvider","useTableContext","editorComponent","defaultValue","connect","getPermissions","configuratingSettings","configSelectors","getConfigurationSettings","Roadblock","StyledRoadblockImage","xmlns","viewBox","svg","SideNavigationHeader","PureComponent","renderCollapsedPanelTitle","subtitle","onPanelToggleRequested","isExpanded","TitleWrapper","activeWrapper","DefaultTitleWrapper","StyledHeader","alignRight","BaseHeader","useSideNavigation","startExpanded","setPanelStatus","setTimeout","onCollapsed","onExpanded","toggle","onCollapsing","onExpanding","Container","panelActive","BaseContainer","SideNavigationWrapper","BackButton","buttonLabel","StyledTableCell","TableCell","TableHeaderLabel","textTransform","StyledTableRow","TableRow","StyledTableHead","TableHead","StyledFixedTable","Table","CellContainer","tootlip","isOverflow","setIsOverflow","textElementRef","useRef","current","scrollWidth","clientWidth","disableHoverListener","noWrap","PreConIdInputBase","other","cursor","setCursor","input","setSelectionRange","preconIdToString","selectionStart","parsedId","parsePreConId","PreConIdInput","form","setFieldValue","schemaField","fieldIsEditable","preconId","db","getFirestore","firebaseApp","collectionId","MasterSolicitationRepo","generateId","doc","collection","getById","async","getDoc","getAll","projectId","whereClauses","where","q","query","snap","getDocs","docs","subscribe","save","solicitation","omitBy","isUndefined","omit","setDoc","promises","attachments","axios","SMARTDRIVE","headers","Authorization","appId","SMARTDRIVEAPPID","Id","fileId","deleteFile","deleteDoc","Promise","all","NumericInput","decimal","isCurrency","isReadOnly","formattedValue","fieldValue","numberMask","createNumberMask","allowDecimal","allowNegative","prefix","decimalLimit","integerLimit","allowLeadingZeroes","persist","numberValue","mask","onBlur","updateVal","useGetCurrentProject","useParams","getProjectHash","useProjectFieldsMetadata","projectsLookup","projectsLookupPristine","getProjectHashPristine","projectSchemaLookup","schemaSelectors","getProjectSchema","fields","projectFieldsMetadata","fieldsMetadata","projectFieldsMetadataPristine","hasChanged","oldFieldMetadata","filteredObj","hasChangedInOldMetadata","isEqual","some","checkIfFieldIsLocked","fieldId","isLockable","updateProjectFieldMetadata","projectFieldMetadata","updateProjectMetadata","projectMetadata","usePreConId","preConId","setPreConId","setIsLoading","getHcssToken","businessUnitId","useSelectedBusinessUnitId","projectSchema","isPreConIdDisabled","hiddenInForm","hiddenInTable","getAndReservePreConId","api","ProjectsApi","result","getLastPreConIdAndReserveNext","loadPreConID","failure","discardReservedPreConId","CONTACTS","ContactsApi","ContactsClient","selectedBusinessUnitId","instance","interceptors","use","jsonParseReviver","create","estimates_GetEstimates","opts","dto","activeEstimates","hideExcludedEstimates","url_","encodeURIComponent","Error","options_","JSON","stringify","Accept","then","_response","processEstimates_GetEstimates","response","_headers","k","result200","resultData200","item","EstimateSummary","fromJS","throwException","resolve","estimates_GetEstimate","processEstimates_GetEstimate","EstimateSummaryExtended","estimates_GetEstimateBlob","responseType","processEstimates_GetEstimateBlob","contentDisposition","fileNameMatch","estimates_PutEstimate","processEstimates_PutEstimate","estimates_PostExcluded","estimateToSet","processEstimates_PostExcluded","Estimate","estimates_DeleteEstimateById","processEstimates_DeleteEstimateById","DeleteEstimateViewModel","estimates_DeleteEstimateByCode","processEstimates_DeleteEstimateByCode","estimates_DoesEstimateCodesExist","codes","searchActiveEstimates","processEstimates_DoesEstimateCodesExist","EstimateExistViewModel","estimates_GetEstimateIndex","processEstimates_GetEstimateIndex","EstimateIndex","estimates_GetEstimateBackupHash","processEstimates_GetEstimateBackupHash","insightsEstimates_GetEstimate","liveEstimates","processInsightsEstimates_GetEstimate","EstimateFlattened","insightsEstimates_GetReportsForEstimate","processInsightsEstimates_GetReportsForEstimate","ReportsDto","insightsEstimates_GetUniqueEstimateFilters","processInsightsEstimates_GetUniqueEstimateFilters","UniqueEstimateFilters","insightsEstimates_PostExcluded","processInsightsEstimates_PostExcluded","quoteFolders_GetQuoteFolders","processQuoteFolders_GetQuoteFolders","QuoteFolderSummaryDto","quoteFolders_CreateQuoteFolder","processQuoteFolders_CreateQuoteFolder","quoteFolders_GetQuoteFolder","processQuoteFolders_GetQuoteFolder","QuoteFolderDto","quoteFolders_UpdateQuoteFolder","processQuoteFolders_UpdateQuoteFolder","quoteFolders_DeleteQuoteFolder","processQuoteFolders_DeleteQuoteFolder","quoteFolders_GetQuoteFoldersDetails","processQuoteFolders_GetQuoteFoldersDetails","quoteMasters_GetQuoteMasterByEstimateCode","processQuoteMasters_GetQuoteMasterByEstimateCode","QuoteMasterDto","quoteMasters_SyncQuotesMaster","model","processQuoteMasters_SyncQuotesMaster","GenericResponse","quotes_GetQuotes","processQuotes_GetQuotes","quotes_CreateQuote","processQuotes_CreateQuote","quotes_GetQuote","processQuotes_GetQuote","quotes_UpdateQuote","processQuotes_UpdateQuote","quotes_DeleteQuote","processQuotes_DeleteQuote","quotes_AcceptQuote","processQuotes_AcceptQuote","quoteVendors_GetVendors","folderId","processQuoteVendors_GetVendors","QuoteVendorSummaryDto","quoteVendors_CreateVendor","processQuoteVendors_CreateVendor","quoteVendors_UpdateVendor","processQuoteVendors_UpdateVendor","quoteVendors_DeleteVendor","processQuoteVendors_DeleteVendor","quoteVendors_GetVendor","processQuoteVendors_GetVendor","QuoteVendorDto","quoteMasters_GetEstimatesPriceSyncStatus","processQuoteMasters_GetEstimatesPriceSyncStatus","EstimateSyncStatusDto","storageReports_GetReport","reportType","processStorageReports_GetReport","processedStatus","processedStatusFailureCode","estimateVersion","bid_Date","start_Date","review_Date","created_Date","modified_Date","uploaded_Datetime","isExcludedEstimate","property","init","_data","toJSON","toISOString","StatusCode","ProcessedEstimateFailureCode","EdmSchemaElementKind","EdmTypeKind","EdmExpressionKind","EdmContainerElementKind","EdmOnDeleteAction","QueryNodeKind","OrderByDirection","ReportType","blobUrl","filter1","filter2","filter3","filter4","filter5","filter6","address","resp_Estimator","tot_Cost","bid_Amount","owner","wc_State","project_Name","project_Number","type_Work","availableReports","ReportViewModel","createdAt","reportName","displayName","EstimateHistoryBaseTable","partitionId","filters","totals","lastModified","lastProcessed","isDeleted","empId","deletedTimestamp","activeEstimateBackups","rootDirectory","EstimateFilters","EstimateTotals","ActiveEstimateBackup","engineer","modified_Time","takeoff_Amount","profit_Bidquan","profit_Takeoff","filter_1","filter_2","filter_3","filter_4","filter_5","filter_6","user_Ascii1","user_Ascii2","user_Ascii3","user_Ascii4","user_Ascii5","user_Ascii6","user_Ascii7","user_Ascii8","user_Ascii9","user_Ascii10","user_Ascii11","user_Ascii12","user_Ascii13","user_Ascii14","user_Ascii15","user_Ascii16","user_Ascii17","user_Ascii18","user_Ascii19","user_Ascii20","user_Vendor1","user_Vendor2","user_Vendor3","user_Vendor4","user_Vendor5","user_Vendor6","user_Flag1","user_Flag2","user_Flag3","user_Flag4","user_Flag5","user_Flag6","user_Flag7","user_Flag8","user_Flag9","user_Flag10","user_Flag11","user_Flag12","user_Code1","user_Name2","user_Integer1","user_Integer2","user_Integer3","user_Integer4","user_Integer5","user_Number1","user_Number2","user_Number3","user_Number4","user_Number5","user_Number6","user_Number7","user_Number8","user_Number9","user_Number10","user_Number11","user_Number12","user_Number13","user_Number14","user_Number15","user_Number16","user_Number17","user_Number18","user_Number19","user_Number20","user_Perc1","user_Perc2","user_Def_Date","user_Date2","user_Date3","user_Date4","user_Date5","user_Date6","user_Date7","user_Date8","user_Date9","user_Date10","user_Date11","latitude","longitude","baseLabor_Direct","baseLabor_Indirect","baseLabor_Total","burden_Direct","burden_Indirect","burden_Total","totalLabor_Direct","totalLabor_Indirect","totalLabor_Total","permanentMaterial_Direct","permanentMaterial_Indirect","permanentMaterial_Total","constructionMaterial_Direct","constructionMaterial_Indirect","constructionMaterial_Total","subcontract_Direct","subcontract_Indirect","subcontract_Total","equipmentOperatingExpense_Direct","equipmentOperatingExpense_Indirect","equipmentOperatingExpense_Total","companyEquipment_Direct","companyEquipment_Indirect","companyEquipment_Total","rentedEquipment_Direct","rentedEquipment_Indirect","rentedEquipment_Total","misc1_Direct","misc1_Indirect","misc1_Total","misc2_Direct","misc2_Indirect","misc2_Total","misc3_Direct","misc3_Indirect","misc3_Total","totalEntryCost_Takeoff_Direct","totalEntryCost_Takeoff_Indirect","totalEntryCost_Takeoff_Total","totalEntryCost_Bid_Direct","totalEntryCost_Bid_Indirect","totalEntryCost_Bid_Total","balMarkup_Bid","actualMarkup_Bid","balancedBid_Bid","bidTotal_Bid","addonBondTotal","totalEqp_Direct","totalEqp_Indirect","totalEqp_Total","manhours_Direct","manhours_Indirect","manhours_Total","addon_Cost","bond","addon_Markup","addon_Total","totalCost_Takeoff","job_Duration","balMarkup_Takeoff","actualMarkup_Takeoff","balancedBid_Takeoff","passThrough_Cost","passThrough_Adjustment","passThrough_Total","totalCost_Bid_LessPassThrough","totalCost_Bid","total_User_Adjustments","total_User_Adjustments_Cost","desired_Bid","desired_Bid_Diff","bidTotal_Takeoff","totalCost_Takeoff_LessPassThrough","markupPercentCost_Takeoff","markupPercentCost_Bid","markupPercentSales_Takeoff","markupPercentSales_Bid","totalCost_Takeoff_LessPassThroughAndAdjustments","totalCost_Bid_LessPassThroughAndAdjustments","totalEntryCost_Bid_Spread_Indirect","addonBond_Cost_Bid_Spread_Total","totalCost_Bid_Spread","balMarkup_Bid_Spread","actualMarkup_Bid_Spread","actv_User_Quan1","actv_User_Quan2","actv_User_Quan3","actv_User_Quan4","open_Biditems","minority_Goal_Percent","minority_Goal_Total","minority_Current_Percent","minority_Current_Total","uploadedTimestamp","found","success","deletionError","exist","index","businessUnitCode","filters_Project_Name","filters_Project_Number","filters_Address","filters_Latitude","filters_Longitude","filters_Status","filters_Engineer","filters_Resp_Estimator","filters_Owner","filters_Bid_Date","filters_Start_Date","filters_Review_Date","filters_Created_Date","filters_Modified_Date","filters_Modified_Time","filters_Bid_Amount","filters_Takeoff_Amount","filters_Profit_Bidquan","filters_Profit_Takeoff","filters_Tot_Cost","filters_Wc_State","filters_Type_Work","filters_Filter_1","filters_Filter_2","filters_Filter_3","filters_Filter_4","filters_Filter_5","filters_Filter_6","filters_User_Ascii1","filters_User_Ascii2","filters_User_Ascii3","filters_User_Ascii4","filters_User_Ascii5","filters_User_Ascii6","filters_User_Ascii7","filters_User_Ascii8","filters_User_Ascii9","filters_User_Ascii10","filters_User_Ascii11","filters_User_Ascii12","filters_User_Ascii13","filters_User_Ascii14","filters_User_Ascii15","filters_User_Ascii16","filters_User_Ascii17","filters_User_Ascii18","filters_User_Ascii19","filters_User_Ascii20","filters_User_Vendor1","filters_User_Vendor2","filters_User_Vendor3","filters_User_Vendor4","filters_User_Vendor5","filters_User_Vendor6","filters_User_Flag1","filters_User_Flag2","filters_User_Flag3","filters_User_Flag4","filters_User_Flag5","filters_User_Flag6","filters_User_Flag7","filters_User_Flag8","filters_User_Flag9","filters_User_Flag10","filters_User_Flag11","filters_User_Flag12","filters_User_Code1","filters_User_Name2","filters_User_Integer1","filters_User_Integer2","filters_User_Integer3","filters_User_Integer4","filters_User_Integer5","filters_User_Number1","filters_User_Number2","filters_User_Number3","filters_User_Number4","filters_User_Number5","filters_User_Number6","filters_User_Number7","filters_User_Number8","filters_User_Number9","filters_User_Number10","filters_User_Number11","filters_User_Number12","filters_User_Number13","filters_User_Number14","filters_User_Number15","filters_User_Number16","filters_User_Number17","filters_User_Number18","filters_User_Number19","filters_User_Number20","filters_User_Perc1","filters_User_Perc2","filters_User_Def_Date","filters_User_Date2","filters_User_Date3","filters_User_Date4","filters_User_Date5","filters_User_Date6","filters_User_Date7","filters_User_Date8","filters_User_Date9","filters_User_Date10","filters_User_Date11","totals_BaseLabor_Direct","totals_BaseLabor_Indirect","totals_BaseLabor_Total","totals_Burden_Direct","totals_Burden_Indirect","totals_Burden_Total","totals_TotalLabor_Direct","totals_TotalLabor_Indirect","totals_TotalLabor_Total","totals_PermanentMaterial_Direct","totals_PermanentMaterial_Indirect","totals_PermanentMaterial_Total","totals_ConstructionMaterial_Direct","totals_ConstructionMaterial_Indirect","totals_ConstructionMaterial_Total","totals_Subcontract_Direct","totals_Subcontract_Indirect","totals_Subcontract_Total","totals_EquipmentOperatingExpense_Direct","totals_EquipmentOperatingExpense_Indirect","totals_EquipmentOperatingExpense_Total","totals_CompanyEquipment_Direct","totals_CompanyEquipment_Indirect","totals_CompanyEquipment_Total","totals_RentedEquipment_Direct","totals_RentedEquipment_Indirect","totals_RentedEquipment_Total","totals_Misc1_Direct","totals_Misc1_Indirect","totals_Misc1_Total","totals_Misc2_Direct","totals_Misc2_Indirect","totals_Misc2_Total","totals_Misc3_Direct","totals_Misc3_Indirect","totals_Misc3_Total","totals_TotalEntryCost_Takeoff_Direct","totals_TotalEntryCost_Takeoff_Indirect","totals_TotalEntryCost_Takeoff_Total","totals_TotalEntryCost_Bid_Direct","totals_TotalEntryCost_Bid_Indirect","totals_TotalEntryCost_Bid_Total","totals_BalMarkup_Bid","totals_ActualMarkup_Bid","totals_BalancedBid_Bid","totals_BidTotal_Bid","totals_AddonBondTotal","totals_TotalEqp_Direct","totals_TotalEqp_Indirect","totals_TotalEqp_Total","totals_Manhours_Direct","totals_Manhours_Indirect","totals_Manhours_Total","totals_Addon_Cost","totals_Bond","totals_Addon_Markup","totals_Addon_Total","totals_TotalCost_Takeoff","totals_Job_Duration","totals_BalMarkup_Takeoff","totals_ActualMarkup_Takeoff","totals_BalancedBid_Takeoff","totals_PassThrough_Cost","totals_PassThrough_Adjustment","totals_PassThrough_Total","totals_TotalCost_Bid_LessPassThrough","totals_TotalCost_Bid","totals_Total_User_Adjustments","totals_Total_User_Adjustments_Cost","totals_Desired_Bid","totals_Desired_Bid_Diff","totals_BidTotal_Takeoff","totals_TotalCost_Takeoff_LessPassThrough","totals_MarkupPercentCost_Takeoff","totals_MarkupPercentCost_Bid","totals_MarkupPercentSales_Takeoff","totals_MarkupPercentSales_Bid","totals_TotalCost_Takeoff_LessPassThroughAndAdjustments","totals_TotalCost_Bid_LessPassThroughAndAdjustments","totals_TotalEntryCost_Bid_Spread_Indirect","totals_AddonBond_Cost_Bid_Spread_Total","totals_TotalCost_Bid_Spread","totals_BalMarkup_Bid_Spread","totals_ActualMarkup_Bid_Spread","totals_Actv_User_Quan1","totals_Actv_User_Quan2","totals_Actv_User_Quan3","totals_Actv_User_Quan4","totals_Open_Biditems","totals_Minority_Goal_Percent","totals_Minority_Goal_Total","totals_Minority_Current_Percent","totals_Minority_Current_Total","reports","estimator","wcState","typeWork","projectName","projectNumber","folder","estimatorInitials","selectedVendor","folderTotal","hasPluggedPrices","quoteMasterId","notes","breakout","showBiditem","showActivity","showResource","useSelfPerform","totalAdditiveFactored","totalAdditiveNonFactored","totalNonAdditiveFactored","totalNonAdditiveNonFactored","updatedSelectedVendorTotal","syncRequired","quoteVendors","adHocAdjustmentItems","QuoteItemDto","biditem","activity","resource","plugPrice","quantityAdditiveNonFactored","quantityNonAdditiveFactored","quantityNonAdditiveNonFactored","currency","isSelfPerform","selfAmount","alternateSort","addendumNumber","actualPlug","alternateQuantity","unitCostInEstimate","isAdhocAdjustmentItem","quotes","QuoteDto","quoteItemId","quoteVendorId","quoteVendorCode","plugIndicator","previousPrice","previousUnit","quoteUnit","quotePrice","quoteCurrency","plugAdditiveFactored","plugAdditiveNonFactored","plugNonAdditiveFactored","plugNonAdditiveNonFactored","adHocAdditiveFactored","adHocAdditiveNonFactored","adHocNonAdditiveFactored","adHocNonAdditiveNonFactored","vendorContact","jobTitle","fax","address1","address2","address3","city","zip","bondable","bondRate","mobilizationAmount","adjustmentPercent","adjustmentAmount","minority1","minority2","minority3","minority4","minority5","excluded","pluggedAmount","quotedAmount","totalAdditive","totalAdjustments","vendorTotal","MinorityClass","percent","certificateNumber","adjustToBidQuantity","quoteFolders","errorMessage","AcceptQuoteDto","vendorCode","prices","adhocAdjustments","QuotePriceDto","QuoteAdhocAdjustmentDto","QuoteVendorNotesDto","lastSyncedPrices","SwaggerException","isSwaggerException","obj","FilterSelect","fieldsBySection","activeFilters","wordWrap","constantSections","s","heavyJob","isHJSectionInLimitedCompany","quickPricing","isQPSectionInLimitedCompany","SectionColumnList","SectionLabel","limitedPreConDescription","limitedDescriptionColumnChooser","BlockCheckbox","Checkbox","CommunicationLogRepo","getLogs","logs","getLogsForVendor","saveLogRecord","record","addDoc","colorbrewer","YlGn","YlGnBu","GnBu","BuGn","PuBuGn","PuBu","BuPu","RdPu","PuRd","OrRd","YlOrRd","YlOrBr","Purples","Blues","Greens","Oranges","Reds","Greys","PuOr","BrBG","PRGn","PiYG","RdBu","RdGy","RdYlBu","Spectral","RdYlGn","Accent","Dark2","Paired","Pastel1","Pastel2","Set1","Set2","Set3","MasterProposalRepo","getByRequestId","requestId","warn","proposals","proposal","delay","debouncedValue","setDebouncedValue","handler","clearTimeout","useDebouncedEffect","fn","deps","destructor","call","HeavyJobApi","apiVersion","getJobs","get","getJobCostTypeCosts","jobIds","URLSearchParams","append","baseURL","reject","unlinkEstimateFromProject","projectEstimateId","post","unlinkEstimatesFromProject","linkEstimatesToProject","projectEstimates","getLastPreConId","getProjectDetailsReport","genericSagas","apiSagaFactory","isBusinessUnitApi","apiPath","stateKey","onLoadSuccess","loadProjects","onLoadFail","onLoadedAllRecords","loadedAllRecords","onLoadedFirstPage","loadedFirstPage","saveProject","action","isNewProject","originalProject","payload","setGoToProject","resetForm","silent","meta","preConIdField","getPreConIdField","getApi","trueUpCompletedProjectIdString","update","put","deleteLocallyCreatedProject","LOCAL_PROJECT_ID","warnings","warning","titles","default","messages","fieldName","warningValue","apiError","errors","localizedErrorLookup","fieldsValidation","errorMessages","invalidValue","getTokenSaga","getSelectedBusinessUnitIdSaga","updatedProject","sagas","takeLatest","getType","load","takeEvery","saveNewProject","deleteProject","deleteProjects","deleteRange","failed","bulkDelete","linkEstimateToProject","original","estimateIds","retryCount","err","maxRetryCount","unlinkEstamesFromProject","errorNotification","loadHJJobs","selectedBUId","undoEstimatesLinking","undoState","getUndoEstimatesLinkingState","allowedStatuses","UndoEstimateLinkingStatus","Ready","OptimisticallyReady","Fails","statuses","take","waitForUndoState","linkedEstimatesIds","errorDuringUndoLinkingNotification","loadHJJobCostTypeCosts","loadHJJobCostTypeCostsWithRetry","QuoteOrigin","QuoteTotalType","AuthenticationMethod","VendorProposalStatus","VendorSolicitationStatus","VendorSolicitationFilter","QuoteAdjustmentType","CommunicationAction","SharedResourceType","DataSyncPreferences","LinkedHeavyJobColumnName","ContactImportName","ContactListColumnName","ExportFileType","calendar","new","duplicate","detail","importProjects","importBidResults","proposalCreate","quickPrice","estimateHistory","payItemLibraryDetail","estimateHistoryDetail","enableSandboxMode","localStorage","setItem","disableSandbox","removeItem","resetSandbox","disableCallbackInSandbox","cb","getItem","DisableInSandbox","onClickCapture","EnableInSandbox","HideInSandbox","preventDefault","stopPropagation","DisableSandboxButton","errorBoundary","sandbox","disableButton","EnableSandboxButton","enableSandboxButton","ResetSandboxButton","resetButton","SandboxToggleButton","CreateCompanyMode","AddVendorModal","contactsSelectors","getShowModal","vendorCodeList","getVendorCodeList","onCancelHandler","contactsActions","YupValidationSchema","Yup","test","enableReinitialize","initialValues","validationSchema","onSubmit","formik","container","addCompanyModal","TimesButton","getFieldProps","inputProps","helperText","xs","validateForm","createVendor","initializeVendor","mode","Stay","catch","log","onSaveHandler","Redirect","onSaveAndEditHandler","saveAnd","Edit","primaryAddress","initializeAddress","alternateAddress","faxNumber","webAddress","region","communicationMethod","CommunicationMethod","None","isBonded","note","products","VendorDtoV1Response","Address","addressLine1","addressLine2","building","stateProvince","countryRegion","postalCode","SchemaFieldType","ViewType","SummaryType","FilterOperation","loadDataForSubscriptionPage","createAsyncAction","loadTemplates","loadRecipients","loadBusinessUnits","saveSubscription","pauseSubscription","resumeSubscription","deleteSubscription","addNewSubscription","createAction","newSubscription","updateSubscription","setValidationResult","removeSubscription","deletingId","resetToOriginals","updateStatus","subscriptionId","initialState","projectTemplates","hiddenTemplates","visibleTemplates","recipients","workingCopies","originals","reducer","savedSub","sub","newSub","unshift","updatedSub","isFieldValid","fieldErrorMessages","validateSubscription","getProjectTemplates","emailSubscriptions","getRecipients","getBusinessUnits","getPristineSubscriptions","getErrors","getIsLoading","ESTIMATE_PAGE_SIZE","CODEBOOK_PAGE_SIZE","EstimatesApi","getEstimates","skip","getLinkedEstimates","ids","filterString","getEstimatesForIds","getHeavybidPartitions","getActivityCodebookLastProcessed","getActivityCodebookUnused","limit","beginDate","endDate","getActivityCodebookMissing","getActivityCodebookUtilized","getActivityCodebookUtilizedDetails","activityCode","getQuoteFolders","getEstimateFilters","getActivityTotals","formulas","getUserDefinedLabels","patchEstimate","patchDocument","patch","getHiddenEstimateIds","patchHiddenEstimateIds","patchIds","loadEstimatesInitial","loadEstimates","loadQuoteFoldersForEstimate","hcssToken","getSelectedBusinessUnitId","loadQuoteFolders","loadActivityTotals","getBrokenOutActivityTotalFieldsSimple","loadedAllEstimates","setLoading","schemaActions","saveSchema","schemaName","hasNextPage","nextSkipValue","newTop","floor","skips","flatten","r","saveEstimate","updatedEstimate","loadSchemas","updateEstimates","est","updatedEstimates","allQuoteFolders","uniqBy","qf","getSchemaHash","saveSchemaField","quoteDashboard","loadEstimateFilters","estimateFilters","loadUserDefinedLabels","userDefinedLabels","allUserDefinedLabels","estimatesExtendedSchema","getEstimatesExtendedSchema","estimatesExtendedSchemaCopy","estimatesExtendedSchemaFieldsCopy","labelKey","filterKey","determineFilterKeyForLabelKey","updateSchemas","allEstimateFilters","filterName","estimatesextended","loadHiddenUnlinkedEstimateIds","loadHiddenEstimateIds","patchHiddenUnlinkedEstimateIds","hide","unhide","updateHiddenEstimateIds","loadHeavybidDivisions","loadActivityCodebookUnused","dateRangeStr","dateRange","GetDateValues","parse","pageNumber","pageSize","nextCursor","axiosError","loadActivityCodebookMissing","responseData","loadActivityCodebookUtilized","loadActivityCodebookUtilizedDetails","loadLastProcessedActivityCodebooks","getPathForSolicitation","solicitationId","getQuoteSolicitationPath","getPathForReportType","getPathForIndicators","indicators","estimateDashbaord","quoteInbox","quoteDetails","vendorSolicitationId","folderDetails","getPathForFolder","solicitationDetails","proposalDetails","masterSolicitationTable","vendorCommunications","vendorCommunicationsDetails","lookup","loadPayItemLibraries","createPayItemLibrary","loadSelectedPayItemLibrary","loadWizardPayItemLibrary","deletePayItemLibrary","loadQuickPriceSheet","deleteQuickPriceSheet","allIds","isLibrariesLoaded","isSelectedLibraryLoaded","selectedWizardLibraryLoading","quickPriceSheetLoading","library","payItems","slimLibrary","selectedLibrary","quickPriceSheet","libraryId","selectedWizardLibrary","getLibrariesLoaded","getAllIds","getLibraries","getSelectedLibrary","getSelectedLibraryLoaded","getSelectedWizardLibraryLoading","getSelectedWizardLibraryMap","createSelector","payItem","payItemLibraryId","mapping","getQuickPriceSheetLoading","getQuickPriceSheet","configurationSettings","featureFlags","flag","active","VendorCompanyType","setVendorType","getCompanyTypes","ct","sortBy","opt","CompanyType","mainInfo","companyType","CompanyTypeDto","__isNew__","isValidNewOption","inputValue","formatCreateLabel","isValidString","isClearable","styles","CustomStyle","red200","selectProps","isFocused","VendorMainInfo","setVendor","showErrors","bondRateString","setBondRateString","handleChange","valueString","substring","accountingCode","bondRateMask","validationState","detailInfo","minHeight","resize","maxLength","EMPTY_GUID","VendorScopeOfWork","sortedProducts","product","allProductTypes","getProductTypes","pt","concat","selectedOptions","prod","productTypeToProductMapping","ScopeOfWork","scopeOfWork","isMulti","productTypes","op","ProductTypeDto","ProductDto","Creatable","gray200","includeUnsavedVendorLocation","unsavedLocation","updatedVendor","unsavedLocationInRedux","locations","loc","nickname","updatedLocations","filteredNullNicknameLocations","commMethodOptions","Fax","Print","VendorLocationDetailInfo","vendorLocation","setIsVendorLocationFormValid","setEditingLocationId","setVendorLocation","isValidNickName","setIsValidNickname","stateOptions","statesEnum","enumNames","administrativeDivisions","states","provinceOptions","provincesEnum","province","provinces","nextState","validateNickName","updateLocations","nickName","DetailInfo","vendorLocationDetails","Feedback","clear","itemComponent","textField","groupBy","groupComponent","search","indexOf","filtered","Select","VendorEditDetails","useHcssToken","setShowErrors","nextLocation","setNextLocation","localVendor","locationOptions","isVendorLocationFormValid","setLocalVendor","useVendorLocationDropDown","getLoading","handleSaveChanges","validateLocalVendor","unsavedVendorLocation","contactActions","updateVendor","useSaveVendorDetails","hasVendorLocation","FullPageLoading","handleOnAddNewVendorLocation","nullNickNameLocation","isPrimary","isAlternate","shouldCreateNewEmptyLocation","initializeVendorLocation","updateVendorLocation","addVendorLocation","sortedLocations","sortVendorLocations","vendorDetails","editTitle","Tools","vendorEditDetail","Content","InfoContainer","isGC","HcssSubscription","officeSectionTitle","valueField","addOfficeButton","noDataPlaceholder","office","scopesOfWork","minorityStatus","when","next","afterConfirm","hasUpdated","allowGoBack","onConfirm","onCancel","ConfirmBack","handleBack","handleSave","confirmBack","uuid","getUserClaimsFromProfile","profile","hcssNamespace","msftNamespace","betaUser","betaCompany","businessUnitName","isFullUser","isLimitedUser","isBetaUser","isSubcontractorUser","isCredentialAdmin","editArchivedEstimateList","schemaId","filterOperation","grouping","columnSummaries","hiddenColumns","ordering","displayedColumns","sorting","chartConfigs","chartConfig","calendarConfig","Between","allowedOptions","filterConstants","dates","nowM7","nowM30","nowM365","Any","filterListValues","loadViews","saveView","deleteView","claimView","updateViews","resetView","updateViewAccess","isPublic","updateViewOrdering","updateViewGrouping","updateViewSorting","updateViewSummary","updateViewFilters","updateViewFilter","updateViewDisplayedColumns","updateViewColoring","coloringColumnName","updateViewType","createChartConfig","chartConfigToCopy","deleteChartConfig","chartConfigIdToDelete","updateChartConfig","chartId","updateLayout","updateCalendarConfig","setSelectedView","tableId","updateMapStyle","setDefaultView","hideView","inMemoryViews","normalizeViews","inMemoryViewsLookup","keyBy","selectedViews","existingChartConfig","splice","createdByUserId","normalizeViewLayout","getViewSections","currentIndex","listActive","calendarActive","chartsActive","charts","newChartConfig","barOptions","chartType","mapActive","indexToDelete","chartConfigCopy","satelliteMapStyleActive","getOriginal","getSelectedViews","getAllViews","getProjectViewsLookup","getAllSchemas","projectViews","schema","getEstimateViewsLookup","getProjectViews","viewLookup","getAllEstimateViews","getEstimateViews","getEstimateViewsSorted","getDefaultProjectView","getPreferences","userPreferences","savedSelectedViewId","tablePreferences","selectedView","getDefaultEstimateView","getCurrentEstimateView","defaultView","getCurrentEditArchivedEstimateView","getCurrentProjectView","getCurrentProjectViewClean","currentView","originalViews","getProjectEstimateView","getEstimatesSchema","estimateSchema","validateLayout","currentViews","existingLayout","every","lg","getNumRows","numSections","viewSections","chartDeleted","activeSections","numRows","currentRow","viewSection","w","h","y","sectionPositionInRow","useOidcContext","createUseContext","oidcService","OidcProvider","Provider","updateCalendars","sideModalActive","newData","getAllCalendars","calendarLookup","isReadOnlyCal","isNylasCal","originalCalendar","existingCalendars","existingCalendar","local","HCSSCONNECT","HEAVYJOB","REMARKABLE","FENIX","mapBox","BASESTYLEURI","BASIC","SATELLITE","MIXPANELKEY","MAPBOX","APPINSIGHTS","firebaseConfig","apiKey","authDomain","databaseURL","storageBucket","messagingSenderId","oidc","authority","client_id","client_secret","redirect_uri","silent_redirect_uri","post_logout_redirect_uri","response_type","scope","flags","subs_showImportFromExcel","rum","rumEnabled","rumConfigOptions","applicationId","clientToken","site","service","env","sessionSampleRate","sessionReplaySampleRate","trackUserInteractions","trackResources","trackLongTasks","defaultPrivacyLevel","dev","hostname","staging","preProd","preProdEstimateHistory","Environment","getCurrentEnvironment","Local","Dev","Staging","PreProd","Production","currentEnvironment","overrideEnvironment","localStorageValue","getOverrideEnvironment","isLocal","PreProdEstimateHistory","getEnvironmentConfig","estimateHistoryEndpointOverride","defaults","fingerPrintHashSeed","bingApiKey","EmptyState","text1","text2","buttonIconName","buttonIconTitle","mainIcon","MainIcon","PageWrapper","Jumbotron","ImageContainer","defaultIconStyle","Blurb","ButtonContainer","green200","filterField","filterText","Links","descFound","urlFound","NotEquals","element","filterHyperlinks","Checklist","items","percentComplete","filterChecklist","States","validText","validateText","filterList","Company","filterValues","valueArray","intersectionOfValues","intersection","hasCommonValues","filterContainsAllValues","Equals","filterCompanyList","Contact","filterContactList","MultiSelectList","projectValue","filterMultiSelectList","Currency","Calculated","fromValue","validateNumber","toValue","validFromValue","validToValue","validValue","GreaterThan","GreaterThanOrEqualTo","LessThan","LessThanOrEqualTo","filterNumeric","boolValue","normalizeBoolean","filterBoolean","DateTime","dateFilterValues","range","custom","rangeValues","calculateValuesFromRange","calculateDateFilterValues","currentValue","isSame","isAfter","isSameOrAfter","isBefore","isSameOrBefore","isBetween","filterDateTime","PreConId","Contains","valueToCheck","StartsWith","startsWith","EndsWith","endsWith","filterProjectId","isDateOrTimeFilterActive","isFilterActive","fieldType","formatFileSize","bytesPassed","suffix","bytes","toFixed","getIconForFile","MimeIconMap","roundNumber","isDict","changes","entries","flatMap","setNested","src","dest","isValidLatitude","abs","isValidLongitude","isNullIsland","tryParseLatLong","invalidColumn","parseFloat","locationType","invalidLongitude","invalidLatitude","enum","abbr","buildFenixURL","preconIdSeed","encodeURI","time","res","ProtectedRoute","isFullFeature","FullPreconRedirect","isAdmin","AdminRedirect","isAddEdit","LimitedPreconRedirect","AddEditRedirect","isContactAddEdit","ContactAddEditRedirect","canAccessFullProjectTracking","NoAccessToFullProjectTrackingRedirect","canAccessEstimateInsights","estimateInsights","NoAccessToEstimateInsightsRedirect","userAdmin","adminRequired","writeRequired","contactRequired","fullFeatureRequired","fullPreconRequired","fullProjectTracking","constate","estimatePathMatch","quotePathMatch","exact","quoteMasterPathMatch","quoteDraftsPathMatch","idFromParams","setCurrentEstimateId","existsInBUError","CurrentEstimateProvider","oidcEnv","userManager","automaticSilentRenew","accessTokenExpiringNotificationTime","userStore","WebStorageStateStore","store","UserManager","getUser","successRedirect","signinRedirect","signinRedirectCallback","signinSilent","signinSilentCallback","clearRedirect","signoutRedirect","signoutRedirectCallback","getRedirect","redirect","getSettings","getEvents","events","envService","currentDivisionId","setCurrentDivisionId","setReportType","reportTypeOptions","Unused","selectedUtilizedCode","setSelectedUtilizedCode","utilizedLoaded","getActivityCodebookUtilizedLoaded","utilizedDetailsLoaded","getActivityCodebookUtilizedDetailsLoaded","allUtilizedData","unusedLoaded","getActivityCodebookUnusedLoaded","allUnusedData","missingLoaded","getActivityCodebookMissingLoaded","allMissingData","overflowStatus","getActivityCodebooksOverflowStatus","getLastProcessedActivityCodebooks","getAllEstimates","isCurrentReportOverflow","ReportTypeEnum","Missing","missingOverflow","Utilized","utilizedOverflow","unusedOverflow","estimateTimestamp","partitionEstimates","codebooksTimestamp","activityCb","unusedData","missingData","utilizedData","hasNoCodebooksData","CodebooksProvider","useCodebooksContext","stubCellComponent","DVirtualTable","StubCell","yup","minorityTypeModal","validation","codeRequiredText","descriptionRequiredText","CreateMinorityTypeModal","setVisible","prefillValue","addMinorityType","newMinorityType","m","TextField","touched","buttonCancel","buttonAdd","CLEAR_TEXT","dropdown","DropDownEditor","onValueChange","setOptions","sortedData","allowCreate","dynamic","addFieldValue","trimEnd","DropdownContainer","onCreate","emptyList","createOption","hasErrors","DateTimeEditorContainer","DateEditor","includeTime","DateFormatter","normalizeDate","ignoreTimezone","DateFormatProvider","LockableWrapper","NoteFormatter","popover","Popover","wordBreak","OverlayTrigger","NoteProvider","CurrencyFormatter","CurrencyFormatProvider","PhoneNumberFormatter","PhoneNumberFormatProvider","PhoneNumber","PercentageFormatter","PercentageProvider","showAsPercent","DetailLinkFormatter","coloring","typedColumn","getCellRoute","columnUConfig","stateIndex","getProjectLinkWithHighLight","lisVal","LinkProvider","randCol","getHighlightColor","arrColorCodes","reminder","HyperLinksFormatter","rel","HyperLinksProvider","overrideColumns","FenixLinkFormatter","FenixLinksProvider","LatLongFormatter","LatLongEditor","setInputValue","LatLongLockableComponent","LatLongProvider","PreConIdFormatter","PreConIdEditor","initialValue","setValue","useDebouncedGridValue","preconIdColumn","col","PreConIdProvider","CompanyFormatter","ContactFormatter","CompanyEditor","ContactsSelectors","getVendorDataOptions","companiesExist","filtersSelected","CompanyInputContainer","CompanyDropdownFilter","nextValue","multiSelect","emptyCompanyListWithFilter","emptyCompanyList","ContactEditor","vendorDataOptions","getVendorListSortedByCode","contactProductIds","productTypeId","ContactInputContainer","ContactDropdownFilter","getContactDropdownValue","emptyContactList","CompanyProvider","ContactProvider","MinorityStatusFormatter","MinorityStatusEditor","minorityTypeOptions","getMinorityStatusOptions","showCreateMinorityTypeModal","setShowCreateMinorityTypeModal","setPrefillValue","mappedOptions","setMappedOptions","mt","mappedValue","newOptions","onCreateOption","onInputChange","MinorityTypeProvider","MinorityPercentEditor","formatted","formatMinorityStatusPercent","MinorityPercentProvider","MinorityTypeCodeProvider","MinorityTypeCodeFormatter","MinorityTypeCodeEditor","PreConTextProvider","TextEditor","BooleanFormatter","PreConBooleanFormatProvider","BooleanEditor","PreConDropDownFormatProvider","DropDownFormatter","NumericInputEditor","isPercentage","valueState","stringNumber","setStringNumber","preConType","isFinite","extendedNumberFormatter","Infinity","float","NumberFormatter","PreConNumberFormatProvider","LockedPopover","memo","locked","FormatterComponent","isFieldLocked","newColumn","modals","confirmDelete","initializeApp","getAuth","estimateExtendedSchema","heavyBid","standard","protected","lastActivity","activeEstimate","excludedEstimate","hiddenInEdit","division","bidDate","startDate","reviewDate","createdDate","bidTotal","totalCost","typeOfWork","text3","text4","text5","text6","text7","text8","text9","text10","text11","text12","text13","text14","text15","text16","text17","text18","text19","text20","integer1","min","decimalScale","setCellValue","integer2","integer3","integer4","integer5","number1","number2","number3","number4","number5","number6","number7","number8","number9","number10","number11","number12","number13","number14","number15","number16","number17","number18","number19","number20","date1","date2","date3","date4","date5","manhours","orderedSections","info","estimateInfo","tags","userDefinedText","userDefinedInts","userDefinedIntegers","userDefinedNumbers","userDefinedDates","bidResultsSchema","winner","table","amount","fromLowBid","leftOnTable","percentFromLowBid","reloadStandardSchemas","moveSchemaField","destination","addSchemaField","saveDataSyncPreference","dataSyncPreference","addSchemaFieldOption","listValue","removeSchemaField","saveSchemaSection","removeSchemaSection","moveSchemaSection","sectionId","originalIndex","destinationIndex","addSchemaSection","resetSchema","bidresults","quoteDashboardSchema","activityCodebooks","codebookCode","codebookDescription","codebookLevel","codebookUnits","codebookLastUpdate","codebookTimesUsed","codebookTimesModified","codebookPartitionId","codebookModifiedCount","activityDescription","activityUnits","activityLastModified","activityPartitionId","codebookInfo","saving","saved","bidResultsLookupFields","estimateLookupFields","hJJobLookUpFields","lastModifiedByFieldId","projectSchemaId","reorderFields","newField","generateColumnConfig","hJField","listObject","newSection","fieldIndex","estimateLocation","findField","bidResultsLocation","hJJobFieldLocation","lastModifiedLocation","createGuestUser","claims","homeBusinessUnitId","homeBusinessUnitName","selectedBusinessUnitName","accessibleBusinessUnits","userName","createGuestUserPayload","firUser","canAccessHeavyBidInsights","canAccessQuoteManagement","canAccessFullReadonlyPrecon","OneClickLink","createHcssUser","Subcontractor","homeBusinessUnit","lsKey","lsBusinessUnit","selectedBusinessUnit","homeBu","SANDBOX_CONSTANTS","USER_ID","COMPANY_ID","COMPANY_NAME","BUSINESS_UNIT_ID","BUSINESS_UNIT_NAME","USER_FIRST_NAME","USER_LAST_NAME","USER_NAME","createSandboxUser","createHcssUserPayload","userInfo","companyHasFullPreconLicenses","HcssCredentials","preferences","heavyBidNumbers","createSandboxPayload","signinWithFirebase","getClaims","setPersistence","browserSessionPersistence","signInWithCustomToken","decoded","getIdTokenResult","resourceId","getUserInfo","homeBusinessUnitCode","userResponse","signInWithHcss","access_token","language","switchRegion","switchLanguage","firebaseToken","signInWithHcssCredentials","cancelAuthListener","channel","unsubscribeFromAuthState","close","createAuthListener","eventChannel","emitter","unsubscribe","onAuthStateChanged","handleFirebaseAuthState","authenticationMethod","updateGuestUserState","oidcUser","publishHcssUser","updateUserAuthState","updateGuestAuthState","signOut","subscribeToAuthState","fork","expired","updateOidcUser","declineInvitation","accountService","signInWithEmailLink","checkExistingResponse","checkExistingUser","isSubcontractor","hasQuotesApplication","hasPreConApplication","hasInsightsApplication","confirmInvitation","fingerPrint","logEulaAcceptance","logError","updatePreferences","setTutorialCompleted","tutorials","tutorialId","successPayload","getCompanyUsers","getCompanyClients","clients","getBusinessUnitUsers","authSagas","userSagas","companySagas","startEmailVerification","completeEmailVerification","getEmailVerificationStatus","canAccessResource","resourceType","defaultCodebooksDateRange","nowM6month","useCodebooksDateRange","setDateRange","calculatedValues","startOf","endOf","createBrowserHistory","guidRegex","firRegex","appInsights","listen","normalizedPath","segment","router","reactPlugin","ReactPlugin","initializeAppInsights","ApplicationInsights","instrumentationKey","disableAjaxTracking","disableExceptionTracking","enableAutoRouteTracking","extensions","extensionConfig","identifier","loadAppInsights","loggingMiddleware","accountActions","setAuthenticatedUserContext","authIntercepter","productTier","getProductTier","aptrinsicUser","aptrinsicCompany","aptrinsic","gainsightAuthIntercepter","pendoAuthIntercepter","projectActions","calendarActions","estimateActions","viewActions","visitor","environment","planLevel","pendo","initialize","initializeDatadogRum","datadogRum","NotFound","notFound","getErrorsState","accountErrors","configErrors","projectsErrors","schemasErrors","viewsErrors","getSiteBreakingErrors","errorShouldBeIgnored","errorsToIgnore","GenericError","genericError","EstimatingGetStarted","gettingStarted","instructions","EstimateLookup","useQueryParam","useCompareEstimatesDirect","queryParams","requestOptions","EstimatesPage","lazy","CodebooksPage","EstimateEdit","CustomizeReportingPage","EstimateDetails","EstimatesRouter","Suspense","fallback","Views","VendorList","VendorDetails","ImportContacts","ContactsSetup","vendorList","getVendorList","useContactBUContextError","notInBU","Fab","bottom","paddingRight","mr","contactSearchButton","TermsAndConditions","SpacedSection","ConfirmationPanel","onEmailChange","onSignIn","confirming","getAccount","showTC","setShowTC","isChecked","setIsChecked","fp","getPromise","acceptedAt","raw","hash","x64hash128","getFingerprint","ConfirmContainer","onKeyDown","keyCode","StyledModal","DeclinePanel","DeclineContainer","StandardColors","hcssHeavyBid","ConfirmPage","legacyMode","newMode","setEmail","autoLogonLoading","setAutoLogonLoading","displayErrors","setDisplayErrors","attemptFailed","hasAccess","VendorSolicitation","VendorProposal","autoLogon","authenticationError","invalidMessage","isAuthenticated","authorizedResource","showTitle","MainContent","TitleContainer","Subtitle","verifyTitleRfq","verifyTitleProposal","LearnMoreLink","isValidEmail","invalidEmail","EmailVerificationPage","setloading","isInvalid","setIsInvalid","completeVerification","FailVerification","SuccessfulVerification","emailVerification","successMsg","successBtn","errorIconStyle","fail","failMsg","baseIconStyle","OidcCallback","signInHcss","handleCallback","redirectPath","OidcSilentRenew","OidcLogout","SubSignup","onSignupClick","acr_values","alt","Brand","ContentFooter","OidcRoutes","PrivateRoute","withRouter","authorizedRequest","authorizeProposal","checkAccess","Component","checkSettings","InfoCard","help","helpLocation","helpLinkTestId","Card","Unauthorized","cardData","unauthorized","supportPortal","StyledSiteTitle","fontFamily","jumbotron","listItem1","heavybidInsights","listItem2","listItem3","logout","useMasterProposals","setProposals","onSnapshot","snapshots","useOutboundProposals","VendorProposalRepo","getOutboundSubscription","useInboundProposals","getInboundSubscription","master","outbound","inbound","outboundVendorProposals","inboundVendorProposals","masterProposals","ProposalProvider","communicationLogs","setCommunicationLogs","vendorCommunicationLogs","VendorCommunicationProvider","DevToolsCore","DevTools","explicitlyDisabled","explicitlyEnabled","shouldLoadDevTools","AppProviders","RestfulReactProvider","UnsupportedBrowserBanner","showBanner","setShowBanner","useSessionStorage","isSupportedBrowser","CSSTransition","in","timeout","classNames","unmountOnExit","role","unsupportedBrowser","bannerTitle","CloseIconContainer","closeIconStyle","bannerDetail","here","ActionButtonWrapper","dismiss","blue300","momentLocalizer","querySelector","classList","add","closest","remove","App","AccountViews","MainApp","appIsReady","useStartupActions","isLoadingUser","isAuthorized","EstimatesViews","ProjectsViews","SettingsViews","ContactsViews","appIsLoaded","getLoadedState","hasPreFetched","setHasPreFetched","isLinkToHeavyJobFeatureEnabled","LinkToHeavyJob","isQuickPricingEnabledPhase1","enableQuickPricingPhase1","enableCodebooks","addSilentRenewError","addAccessTokenExpiring","removeAccessTokenExpiring","removeSilentRenewError","payItemLibraries","loadConfigurationSettings","loadContactsState","signalR","startSignalRConnection","loadProfile","cameFromEmail","subWithoutData","checkReadiness","userType","configLoaded","projectsLoaded","schemasLoaded","viewsLoaded","AppErrorRedirect","SandboxCore","SandboxLoader","queryString","checkQueryString","SandboxErrorRedirect","themes","preConstruction","BaseTheme","muiTheme","createTheme","typography","warningCustom","main","falTimes","falCircle","falImage","falBuilding","falFileCertificate","fasCaretDown","fasFileSignature","fasDigging","fadAddressBook","fadAlignSlash","fadArchive","fadBell","fadCalculator","fadChartLine","fadCommentAltLines","fadDollarSign","fadEnvelopeOpenDollar","fadFileInvoiceDollar","fadFolderOpen","fadMapMarkedAlt","fadMoneyBill","fadSpinnerThird","fadTrafficCone","fadUserCircle","fadStopwatch","fadFileSearch","fadUserAlt","fadExclamationTriangle","fadUserCheck","fadUserTimes","fadBuilding","fadPencil","fadTools","fadAbacus","fadConstruction","fadTelescope","fadTerminal","fadSortNumericUpAlt","farAddressBook","farAnalytics","farBell","farCalculator","farChartLine","farClipboardListCheck","farCogs","farCommentAlt","farCommentAltLines","farEnvelopeOpenDollar","farFileImport","farFileInvoiceDollar","farFolderOpen","farFolders","farHome","farInboxIn","farInboxOut","farLongArrowRight","farProjectDiagram","farRoad","farSlidersV","farSmile","farStream","farUsers","farFileContract","farSearchPlus","farCommentDollar","farWindow","farBox","farSortNumericUpAlt","farMobile","farPhone","farEnvelope","farSearch","farLink","farUnlink","farTimes","farPlus","farCheck","farEyeSlash","farTable","farLock","farLockOpen","AppInsightsErrorBoundary","onError","ReactDOM","getElementById","navigator","serviceWorker","ready","registration","unregister","StaticCompanyFieldInput","editable","CompanyBadge","ItemComponent","CompanyOption","SingleCompanyFieldInput","keepInvalidValues","filterEnabled","MultiCompanyList","StaticInputContainer","MultiCompanyFieldInput","showConfirmDeleteModal","setShowConfirmDeleteModal","confirmDeleteItem","setConfirmDeleteItem","convertToCompany","handleAdd","setAddValue","filteredOptions","existIds","openDeleteModal","addValue","MultiDropdownContainer","MultiDividerLine","ArrowDropdownContainer","CompanyInput","handleSingleChange","handleMultiSelectChange","optionRef","OptionContainer","onMouseEnter","onMouseLeave","OptionHeader","rootClose","hr","ModuleTitle","emailPanelActive","calendarPanelActive","businessUnitPanelActive","getSaved","getSaving","getIsAdmin","getSchemaHashPristine","getAllSchemasPristine","filterEstimateSection","memoize","getEstimateSchema","getEstimateReportingSchema","getAllEstimateReportingSchemaFields","flattenTableFields","getBrokenOutActivityTotalFields","mappedFields","baseTotalField","useDefaultValue","characterLengthLimited","quantityTotalForField","costTotalForField","expression","getSchemas","getCompleteProjectSchema","projectSchemaOriginal","activityTotalFields","oldFields","merge","oldSectionWithEstimates","sectionWithEstimates","filteredActivityTotalFields","indexOfLastEstimatesField","getProjectSchemaPristine","getProjectSchemaFieldsBySection","getProjectSchemaOrderedSections","getProjectSchemaSections","getProjectSchemaSectionsWithFields","getProjectSchemaFields","getOrderedProjectSchemaFields","filterTableFields","BidResults","Estimates","getProjectSchemaTableFields","getDateFields","getBidResultsSchema","getAllBidResultsSchemaFields","getBidResultsSchemaTableFields","getActivityCodebooksSchema","getActivityCodebooksSchemaFields","getEstimatesExtendedSchemaFields","schemaFieldLabelDict","currentField","getCompleteEstimatesExtendedSchema","estimatesSchema","tables","getAllEstimatesSchemaFields","getEstimatesSchemaTableFields","getProjectTableColumns","getFilteredProjectTableColumns","isPreConIdEnabled","isHJJobEnabled","getDevExpressColumnsForProjectTable","filteredColumns","isColumnReadOnly","groupingEnabled","isGroupingEnabled","t","Location","HJJob","mapColumnType","roundQuickPriceTotalPriceValue","configOverride","statesObjectList","latLong","sortMultiSelect","formatMultiSelect","sortPreConId","calculatedFieldConfig","calculatedFieldService","getConfig","requiresEstimatesAccess","hasEstimatesVariables","buId","TemplatesApi","RestApi","templateData","bind","RecipientsApi","recipientData","loadBus","BUsApi","buData","subscription","isNewSubscription","setPristineSubscription","currentSubscriptions","initialValidationResult","updatedSubscription","emailSubscription","notification","saveFailed","deletingSubscription","deleteFailed","EmailSubscriptionApi","STATE_KEY","supportedOperators","isOperatorNode","node","isSymbolNode","isConstantNode","validateVariable","variable","allVariables","nameErrors","fieldIdErrors","isTableField","columnId","calculated","invalidVariableField","requiredVariableName","duplicateVariableName","invalidVariableName","variables","formula","estimateVariables","isEstimateField","nodes","math","originFormula","renameSymbolNodes","calculate","hasEstimatesAccess","round","compile","getValueForField","evaluate","projectFields","variableField","oldName","newName","symbolNodes","n","getVariableOptions","allowedFieldTypes","estimateFields","selectEstimatesFields","supportedProjectFields","tableVariableOptions","getColumnFieldForTableFieldType","tableField","formatNumberConstant","isInteger","formatHandler","implicit","convertFormulaToLatexFormat","toTex","er","changeVariableName","validateFormula","invalidVariables","allowedNames","symbolNode","checkSymbolNodes","invalidOperators","operatorNodes","operatorNode","checkOperatorNodes","invalidNumbers","constantNodes","constantNode","MAX_SAFE_INTEGER","checkConstantNodes","variablesErrors","invalidFormulaVariable","operatorsErrors","invalidFormulaOperator","numbersErrors","invalidFormulaConstant","ex","invalidFormula","validateVariables","variablesWithIndex","validationErrors","putFieldValuesInFormula","variableValue","setCalculateFields","calculatedValue","tryFormatFormula","calculateAndFormat","CompanyAvatar","rest","getAvatarColor","maxInitials","initials","getCompanyInitials","toLocaleUpperCase","UserAvatar","charCodeAt","hue","lum","en","minorityStatusList","errorAdded","errorSaved","updated","errorUpdated","errorDeleted","noMinorityStatusHelpText","noMinorityStatusButtonText","logo","exceedSizeError","imageTypeError","newTitle","minorityStatusesHeading","scopesHeading","notesHeading","officeHeading","accountingCodeHeading","HBAlternateOffice","HBPrimaryOffice","addCompany","searchPlaceholder","contactFields","cell","mainContact","contactList","errorMoved","moveContact","emailError","noContactsHelpText","noContactsButtonText","commandButton","move","sync","buttonTitle","addEdit","visitContact","contactListModal","modalAddTitle","modalEditTitle","buttonSave","emptyLocationsText","emptyScopeOfWorksText","officeLabel","scopesLabel","placeholders","contactListMoveContactModal","toCompany","fromCompany","buttonMove","removingProductsAlert","removingOneProductAlert","contactListSyncContactModal","columnsName","errorCreated","scopeOfWorkModal","companySetup","minorityTypeHeader","minorityType","duplicated","productType","selectedFile","sheetSelector","defaultCompanyCode","fullName","first12","companyExist","overwrite","contactExist","acceptedFiles","rowLimit","importMapping","requiredField","requiredForNewRecords","requiredForExistRecords","requiredNicknameField","requiredStateProvinceField","booleanAcceptableValues","contactMethodAcceptableValues","columnTitles","companyWebsite","companyNotes","cellNumber","prevalidation","copyBtn","rowLimitError","importResult","importingLabel","completeLabel","validationsTitle","companiesCreated","companiesUpdated","contactsCreated","contactsUpdated","archived","recent","synced","estimateInformation","estimateExcluded","dashboard","solicitationDashboard","createSolicitation","createQuoteProposal","drafts","sent","vendorCommunication","noReports","noEstimatesTitle","noEstimatesHelperText","allReports","unavailable","reportDownload","cost","costDescription","costAndPrice","costAndPriceDescription","estimateRecap","estimateRecapDescription","reportsHelpText","showAll","hideAll","showHideColumns","adjustFilters","addFilters","selectFilters","activeEstimateTotal","archivedEstimates","archivedEstimateTotal","activeEstimateLocations","noLocationFound","reportTitle","lastUpdateCodebook","lastUpdateEstimate","datePicker","last3Months","last6Months","lastYear","unused","pageTitle","noUnusedCodes","noMatchingFilters","utilized","tip","pageTitle2","noUtilized","noModifications","noMatchingSearch","missing","noMissingActivities","columnNames","level","biditemCode","activityCodebookCode","lastUpdate","iconAlt","reportOverflow","noLocationFoundHelpText","customizeActivityTotals","nameRequired","expressionRequired","unitRequired","formulaMatch","exactlyMatches","estimateTypeSelectorOptions","kpiDisplay","classification","normal","outlier","na","allKpis","kpisByCategory","noCustomBody","breakdownModal","normalRange","plot","calculationDetails","noVariance","allKpisHidden","categories","labor","equipment","material","subcontract","markup","laborAndEquipment","vendorName","timeStamp","solicitationName","manualModal","phoneCallMade","phoneCallReceived","emailSent","emailReceived","faxSent","faxReceived","mailSent","mailReceived","inPerson","communicationSuccess","communicationError","contactInfo","submit","previewReport","recordCommunication","print","communicationDetails","timeline","eventHistory","filterContent","clickToExpand","initial","noName","special","accepted","rejected","submittedPrices","gc","reviewed","markedAsUnread","manuallyRejected","queuedForSync","manual","phoneCall","received","mail","meeting","gcEnteredPricesForSub","unknownAction","will","willNot","report","bidding","yes","no","unknown","minority","sentInitialSolicitation","sentFollowUpSolicitation","sentAddendumSolicitation","subAcceptedInvite","subRejectedInvite","subSubmittedPrices","gcRejectedPrices","gcReviewedPrices","madePhoneCall","receivedPhoneCall","sentEmail","receivedEmail","sentFax","receivedFax","sentMail","receivedMail","inPersonMeeting","gcReconsideredPrices","gcReconsideredManuallyEnteredPrices","gcManuallyEnteredPrices","gcQueuedForSync","dateTime","linkedEstimate","vendorComTitle","preview","vendorPreview","isRequired","keyDates","lastSummaryRunOn","lastSpreadRunOn","estimateTable","linkEstimates","noLinkedEstimates","estimateModal","errorLoading","notifications","deleteConfirmationName","deleteConfirmationNoName","draftQuotes","sentQuotes","dueDate","noDataText","removeContact","chooseContact","addContact","personalEmail","viaBusinessUnitEmail","viaOtherEmail","sendingEmail","useCompanyEmail","personalEmailNeedsAttention","sendPreview","sendAll","sendingFrom","sendingTo","emailSubject","emailSubjectRequired","emailPreview","proposalPreview","loadingPreview","quoteProposalFor","projectDetails","codeRequired","emailsSentSuccessfully","createProposal","previewAndSend","copyProposal","contactDetails","enterPrices","folders","chooseFolders","chooseVendors","atLeastOneVendor","atLeastOnePrice","externalLinks","addHCSSPlans","addLinks","uploadFiles","excelDropdownPlaceHolder","savingDraft","saveDraft","proposalItems","noPricesHelpText","noAttachmentsHelpText","linkCopied","quoteNotes","typeRequired","quoteName","priceExpiration","priceExpirationRequired","firstNameRequired","lastNameRequired","contactsRequired","contactsPlaceholder","sendRepliesTo","noEmailProvided","receiveProposal","statusTitleQuestion","statusTitleReceived","statusToolTipReceived","importExcel","importExcelQP","step1","step2","subTextQP1","subTextQP2","subText1","subText3","subText2","selectFile","download","importXlHeader1","importXlHeader2","importXlHeader3","addPrices","review","sentTo","sentFrom","jobDetails","draftSolicitations","sentSolicitations","solName","folderNotes","removeVendor","noFolders","noFolderInfo","removeFolder","subcontractor","genericEmail","quoteRequestFor","quoteRequest","emailNote","emailNoteLimit","emailNotePlaceholder","solicitationSetup","header1","header2","addNewProject","detailsBelow","projectHelp1","projectHelp2","projectHelp3","estHelp1","estHelp2","estHelp3","helpText3Est","addProjectButtonText","linkWarning","linkWarningEst","requiredFields","noFoldersHelpText","noEstimateFoldersHelpText","noVendorsHelpText","noLinksHelpText","solicitationNotes","quoteDueBy","quoteDueByRequired","selectFolders","selectVendors","any","unsolicited","repliedWillBid","repliedWillNotBid","submittedQuote","solicitationStatus","inSelectedFolders","inEstimate","noDataTitle","noDataHelpText","showQuoteSheetLink","searchQuotes","selectEstimator","selectDate","noEstimators","emptyEstimator","folderColumns","selectedVendors","vendorColumns","vendorNotes","quoteColumn","folderDetailsQuotes","selectedVendorPerItem","allVendorsTitle","banner","overwrittenMessage","folderSelectionClear","moduleName","awaitingResponse","invitationAccepted","invitationDeclined","receivedNewPrices","MarkedAsUnread","folderNoItemsNoVendors","folderNoItems","folderNoVendors","adjustments","confirmRevertChnges","disabledTooltipForEditing","extendedPrice","subContractor","noDescription","noResource","quoteHasBeenReviewed","quoteReviewedError","quoteHasBeenMarkedAsUnread","quoteHasBeenRejected","quoteHasBeenManuallyEntered","quoteChangesHaveBeenReverted","quoteChangesRevertError","quoteValidationError","quoteVendorFolderValidationError","quoteVendorFolderValidationErrorTitle","quoteRejectedError","updatingPrices","ignoringPrices","closeQuote","revertingPrices","revertModalContentLine1","revertModalContentLine2","queueForSync","disabledTitle","enableTitle","validThrough","internalNotes","folderNotFound","chooseFolder","viewDetails","pending","itemsBidOfTotal","itemsBid","invitedOn","receivedOn","reviewedOn","rejectedOn","extraItems","gridView","listView","adjExtendedPrice","adjUnitPrice","adjustment","anticipatedStartDate","blanks","changeStatus","contactInformation","downloadAll","headerMessage","importantDates","itemDetails","guestUserBannerText","guestUserBannerLinkText","jobSite","lastSubmissionMessage","noItems","noItemsMessage","noItemsAddButton","notBidding","notesTooLong","projectInformation","quoteDueDate","roundingDiff","reviewSubmit","statusTitleNo","statusTitleYes","statusTooltipNo","statusTooltipQuestion","statusTooltipYes","submitPromptMessage","submitPromptTitle","submitting","subtotal","subItem","addSubitem","removeSubitem","noSubItemsHelpText","urlLinks","unitMismatchMessage","confirmModal","closeQuoteModal","prompt","overlayMessage","quoteReview","submitTo","contactUs","totalAmount","submission","viewQuote","signupTitle","free","discover","emptyState","pricesLastSynced","nameDescription","quantityCost","unitCost","tax","esc","topMaterialsFromEstimate","searchMaterials","permanentMaterial","constructionMaterial","materialType","allMaterials","columnChart","yAxisName","perUnit","estimateInsightsRequired","permissionsUpdated","revoke","newPermissions","addEditContact","seeHeavyBid","adminTooltip","companyAdminTooltip","limitedUserTooltip","dataAccessTooltip","writeTooltip","userPermissions","usersWithAccess","revokeAdmin","revokeAdminConfirmation","defaultNewUserPermissions","permissionsTable","dataAccess","heavy","bid","combined","customizeOld","title1","title2","title3","bidResultsXMLHeader1","bidResultsXMLHeader2","bidResultsXMLHeader3","downloadXML","learnMore","subtitle1","subtitle2","wizardStep1","wizardStep2","wizardStep3","divToBuErrorTitle","divToBuCodebooksErrorTitle","contactSupport","divToBuErrorBody","divToBuFilteredErrorTitle","unauthorizedErrorTitle","unauthorizedErrorBody","noCodebooksData","codebookslimitedPlaceholder","fullFeaturesText","moreInfoText","email2","companyProfile","smtpSettings","incomingHeader","incomingSubHeader","outgoingHeader","outgoingSubHeader","noVendorCommsFoundTitle","noVendorCommsFoundBody","currentBU","dateTimeFormat","enableSandbox","feedback","chat","online","offline","helpCenter","suggestion","about","privacy","tutorial","alphaHelp","removeDisplayedFilters","clearActiveFilters","textPlaceholder","addFiltersText","adjustFiltersText","collapseFiltersText","expandFiltersText","numMin","numMax","ok","discardButton","saveButton","cancelButton","unsavedChanges","projectTitle","fieldTitle","linkHeavyJob","modalTitle","linkJobButton","noJobsTitle","noJobsText","deleteLinkJobButton","deleteAll","removed","loaders","updating","checklist","true","false","hint","commit","export","pdf","filename","csv","excel","optionsHeader","exportHeader","exportCSV","exportCSVFull","exportExcel","exportContactsCsv","exportContactsExcel","exportPDF","exportPDFFull","showColumns","highlight","showBulkOperations","hideBulkOperations","expandAll","collapseAll","backToTop","exportDisabledMessage","stillFetchingData","rightClickColumn","asc","desc","on","off","columnChooser","highlightModal","visibility","allHidden","addColumns","summary","sum","templateSelect","unknownUser","templateAccessOptions","public","private","templateOptions","undo","rename","setAsDefault","claim","renameModal","newModal","claimModal","savePrivateModal","accessTooltip","unclaimed","requiredPublic","lackPermissions","accessType","schemaTypes","projectList","uniqueName","takeoffs","selectFirstRow","mappingsErrorNotificationTitle","rowNumber","lastImported","removedLinkWarnings","isLinked","isLinkedHelperTitle","isLinkedHelperDescription","agtekType","customType","importTakeoffs","removeLinks","removeLinksConfirmation","noAccess","selectSourceType","fileInput","columnMapings","validationResult","noEstimateLink","versionInfoTitle","versionInfoDescription","noValidationWarnings","supportedFileFormatsWarning","supportedFileFormatsHint","skipOverwrite","importAsNewLineAndKeepExist","importAsNewLineAndRemoveExist","overwriteRow","existingRow","newRow","duplicateRowsWereDetected","duplicateRecordsWereDetected","rowWillBeSkipped","duplicateTakeoffs","willBeNewLines","willBeOverwriten","willBeSkipped","willBeRemoved","willBeRetained","skipped","retained","importTakeoffsAlert","invalidAgtekFile","totalPrice","numberProjectPayItems","removedUser","confirmSave","overwriteAndMove","removeAndSave","removeAndOverwrite","startNewQuickPrice","steps","source","linkPayItems","newSheet","selectedProject","noLibraries","noLibrariesAdmin","noEstimates","noEstimatesLink","noEstimates2","selectOwner","searchOwner","selectVersion","selectAVersion","version","noLibrariesErrorTitle","noLibrariesErrorText","importProjectPayItems","projectPayItemCode","projectPayItemDescription","alert","skipImport","numberOfItems","linkPayItem","empty","noMatch","noLibraryMatch","searchProjectPayItems","searchPayItems","linkItem","modal","addProjectPayItem","addProjectPayItems","addNewProjectPayItems","addProjectPayItemRow","duplicatedCode","unlinkedBanner","actualPrice","linkedPayItemUnit","saveQuickPriceSheetFailed","numberTooLarge","unableToAutomaticallyGeocodePlace","duplicateName","linkSameLocationId","invalidYear","estimateSelectionTable","expand","collapse","downloadReport","downloadReportSpinner","sectionSelectionTitle","sectionSelectionSelectAll","template","viewType","noFilters","noProjects","noProjectsReadOnly","noProjectsDueToEstimateTotalsFilters","quickEntryCreate","quickEntryDisabled","noOptions","createNewOptions","selectedProjects","month","week","day","agenda","viewHeader","eventWidget","detailsButton","addSections","sectionName","fieldNameMissingSingular","excessCustomFields","fieldNameMissingPlural","fieldNameDuplicated","blankWebValue","blankChecklistValue","blankDesktopValue","duplicateWebValue","duplicateDesktopValue","duplicatedSelectionValueForTableField","blankSelectionValueForTableColumn","generic","noJobLinked","noJobLinkedDescription","changeLinkedJob","unLinkJobButton","featureDisabled","linkedJobTable","category","budgeted","expected","actual","variance","showHidden","undoLoading","projectSection","linkProject","selectProject","searchProjects","hideProjects","addProject","projectCard","linkedEstimatesOne","linkedEstimates","linkButton","projectDialog","unlinkButton","showTotalButton","searchEstimates","selectedEstimates","estimatesLinked","addProjectModal","saveHint","saveAndLink1","saveAndLink2","saveAndLinkHint","estimatesMapped","estimatesMappedOrHidden","noEstimatesMatchedOrHidden","noEstimatesMatched","noEstimateInsightsAccess","errorDuringUndoLinkingTittle","errorDuringUndoLinkingDescription","errorDuringUndoLinkingLinkText","lockedField","containsNotListedOptions","multiSelectListError","yupValidationErrors","valueNotInTheList","singleSelect","useLengthLimit","lengthLimit","defaultLimitExceeded","lengthLimitDescription","numberLengthLimitDescription","defaultValueDescription","standardValues","webDisplayValue","desktopDisplayValue","enabled","editableByAdmin","managedByCompanyAdmin","displaySum","lockable","fieldNamePlaceholder","columnNamePlaceholder","quickEntry","quickEntryInfo","columnLimit","addColumn","multiSelectInfo","multiSelectModal","sortAlpha","sortAlphaShort","customSortShort","fieldList","addFields","dragSectionTooltip","dragFieldTooltip","helpPopoverDescription","helpPopoverTitle","dragFields","examples","types","percentage","selectionList","hyperlink","yesNo","variablesNamesColumn","variablesFieldsColumn","variablesTableName","addVariableBtn","addVariableTooltip","formulaInputLabel","previewLabel","chooseProject","invalidCalculationField","instructionsTooltip","allowedOperators","exampleFormula","hideCalculations","showCalculations","deleteAllDescription","importValues","filesDescription","pleaseNote","noteDescription","skipFirstRow","previewColumn","webValue","desktopValue","previewDescription","notSupportedFile","importSucceed","importAgain","addBtn","canBeImported","canBeSyncedWithHB","filterBy","filterPlaceholderText","filterPlaceHolderText","atLeastOneColumn","exceedColumnNumberLimit","duplicatedColumName","columnMustHasName","copied","multiSelectWarning","hbMappingsWarning","copiedFromTable","copiedFrom","copyFrom","geocoder","dropLatLongPin","errorFetchingData","supportedProjectsFileFormats","acceptedFileFormat","dropFileOrClickHere","acceptableValues","acceptableContactValues","acceptableContactValuesDescription","acceptableValuesOptions","acceptableLocationValuesWithGeocoding","exampleValueList","acceptedState","acceptedStateExample","acceptedCompanyValue","acceptableCompanyValuesDescription","percentageExample","multiSelectSeparators","comma","semicolon","pipe","importResults","previewValidation","emptyMessage","validationResults","excelRow","noFile","supportedFormat","settingOptions","recordExists","firstRowHeadings","excelColumn","columnMapping","finish","projectsCreated","projectsUpdated","importSpinner","importComplete","validationSpinner","validationComplete","importFailStartAgain","validateSpinner","validationSuccess","viewErrors","validationWarnings","mappingsErrorNotificationMessage","read","invalid","rowValidation","duplicateRow","genericImport","requiredColumn","missingValue","missingMultiValue","fileType","invalidTextValue","invalidLinksValue","invalidChecklistValue","invalidPreConIdValue","invalidPreConIdPrefix","invalidBidResultsValue","invalidEstimatesValue","invalidNumberValue","invalidDateValue","invalidBooleanValue","invalidListSelection","invalidLocationValue","exceededCharactersLength","invalidLocationLatitudeValue","invalidLocationLongitudeValue","duplicateEstimates","rowWillBeSavedInInvalidState","invalidValuesWillBeSkipped","invalidValuesWereSkipped","invalidTableColumnsValue","maxTableColumnsCount","duplicatedContactWithProvidedInfo","notFoundContactWithProvidedInfo","firstAndLastNameAreRequiredForContactSearch","invalidImportContactFormat","duplicatedCompanyWithProvidedName","notFoundCompanyWithProvidedName","valueImportedAsAddressText","invalidTakeoffsValue","maxTakeoffsNumber","maxProjectPayItemsNumber","invalidTakeoffRow","invalidTakeoffField","invalidTakeoffId","requiredTakeoffField","requiredProjectPayItemField","duplicateProjectPayItemCodeValue","takeoffColumnShouldBeUnique","duplicateProjectName","maxPayItemsNumber","requiredPayItemsField","duplicatePayItemCodeValue","preConIdDisabled","preConIdEnable","preConIdWillBeSet","preConIdWillNotBeSet","noProjectsWithPreConId","pleaseEnablePreConId","createProjectWithPreConId","pleaseDisablePreConId","nextPreConId","allCurrentProjectsDontHavePreConId","pie","line","bar","vertical","horizontal","projectCount","xAxis","yAxis","totalBy","selectField","sliceOptions","inputPlaceholder","noDataReadOnly","share","copySuccess","copySuccessTwo","copyFailure","copyFailureTwo","toolTip","statsFor","won","lost","dollars","hitRatio","fetchingAccount","projectTutorial","rearrange","customizable","complete","smtp","oauth","previouslyConfigured","changeSettings","resend","username","server","port","password","validations","serverAddressBlank","portBlank","usernameBlank","passwordBlank","unable","integrationSetup","dataSyncPreferences","descriptionBold","estimatesExtended","projectTrackingField","heavyBidField","heavyBidInfo","multiSelectSyncInfo","us","au","fr","gb","es","de","ca","enterEmail","signIn","signUp","slogan","welcome","login","feature1","feature2","feature3","feature4","feature5","feature6","subTitle1","subTitle2","breadcrumbs","maps","satellite","smartdrive","copyLink","uploaded","deleteMessage","noFiles","groupSubMenu","year","quarter","contactColumnNames","scopes","vendorColumnName","heavyBidCode","notice","companyTypeFilterRequired","contactTypeFilterRequired","tableTypeEmptyColumn","tableTypeMoreThan6Columns","officeNicknameRequired","iFrameFallback","autoSaveIndicator","errorText","estimatesLoadIndicator","remarkable","textHeader","columnChooserModal","kpisTitle","inputs","placeHolder","sortByOptions","alphabetically","radio","summaryType","avg","projectTemplatesDropdown","recipientsDropdown","subscriptionDetail","defaultName","labels","sendEmail","bulkEditRecipients","copyRecipients","deleteConfirm","invalidEmails","subscriptionFrequencyDropdown","days","sunday","monday","tuesday","wednesday","thursday","friday","saturday","frequency","timeZone","dateResultDisplay","at","subscriptionStatusIndicator","paused","pause","start","tooltips","pauseSubs","startSubs","hasAName","hasUniqueName","templates","hasOneTemplate","hasOneRecipient","hasInvalidRecipients","hasTime","hasTimeZone","hasDay","getPreviewFailed","sendingEmailFailed","sendingEmailStarted","sendingEmailSuccess","sendingEmailError","invalidUser","ownedByOtherUser","confirmDeleteTitle","confrimDelteMessage","noCompanies","ownerDropdown","ownerRequired","versionName","versionNameRequired","duplicateVersionName","versionNameTooLong","fileImport","payItemCode","payItemDescription","linkName","hJJob","noAccessCode","acceptableLocationValues","acceptableLocationValuesDescription","comingSoon","contactsText","notificationsText","LocalizedStrings","getLanguageName","locale","languageName","Intl","DisplayNames","of","regions","languages","selectedRegion","setLanguage","nowP7","nowP30","nowM3month","nowP365","currentYear","getFullYear","formatOptions","getOne","createRange","skipInvalidFields","validateRange","archive","archiveRange","continuationToken","orderBy","ascending","ContactScopeOfWork","vendorProducts","contactProducts","setContactProducts","newCodes","setNewCodes","vendorProductsProduct","vp","vendorProductId","createValue","setCreateValue","setSelectedOptions","selectedOptionsWithNewCodes","setSelectedOptionsWithNewCodes","contactProductCodes","vendorProductCodes","sortedSelectedOptions","sortedOptions","handleAddNewOptionText","determineNewCodesList","selectedCodes","formattedCreateValue","newCodesList","selectedNewCodes","getAccumulatedContactProducts","Autocomplete","multiple","noOptionsText","filterOptions","createFilterOptions","formattedInputValue","isExistingOption","isExistingSelectedOption","formattedInput","trimStart","autoHighlight","selectOnFocus","clearOnBlur","handleHomeEndKeys","disableCloseOnSelect","selectedCreateOption","selectedExistingCodes","selectedCodesWithNewCodes","accumulatedContactProducts","renderInput","ContactListModal","editingContact","selectNewContactCallback","setShowCreateContactModal","showCreateContactModal","showModalFromList","contactLocationId","setContactLocationId","setVendorProducts","selectedCompany","setSelectedCompany","foundVendor","selectedVendorId","useGetSelectedVendorFromProject","showCompanyDropdown","ableToSetShowCreateContactModal","vendorLocationId","isNewContact","locationSelectionOptions","l","sendContactInputData","fullname","displayData","onSelectCompanyHandler","enforceFocus","paddingBottom","contactParams","addContactFromProject","updateInput","onAddHandler","updateContact","onEditHandler","StyledForm","columnSpacing","StyledTextField","FormControlLabel","control","InputLabel","labelId","MenuProps","disableEnforceFocus","FormHelperText","spacing","FormGroup","multiline","maxRows","paddingTop","Form","useUndoEstimatesLinking","undoOptions","setUndoOptions","setUndoLoading","projectSelectors","resetUndo","resetUndoEstimatesLinking","undoEstimateLinking","whenFails","whenUndid","Success","canUndoStatuses","canUndo","fieldValueExist","getEmptyFieldValue","checklistValues","initProjectFields","existingValues","existValue","pId","initNewProjectFields","SortType","Alphabetically","FieldType","Default","CustomColumnChooserModal","showProductIcons","columnLookup","setHiddenColumns","columnSelect","disabledColumnList","hJJobCodeColumn","hJJobDescription","quickPriceTotalPriceColumn","quickPriceCountColumn","changeHiddenColumns","hiddenColumnLookup","searchFieldsValue","setSearchFieldsValue","sortBySelection","setSortBySelection","setCollapsed","hasSection","isTableOrDisabled","showAllColumns","hideAllColumns","hidingEnabled","filteredSectionsOrColumns","sectionsToFilter","newSections","newColumns","fieldIdsToExclude","updatedCollapsed","isCollapsedAll","newHiddenColumns","ModalBodyContainer","overflowY","InputProps","startAdornment","endAdornment","ScrollableModalContent","ColumnChooserPaneledPage","collapsedSections","onToggleHandler","isSectionCollapsed","newCollapsed","handleCheckAll","fieldsLookup","SectionColumnContainer","ColumnListContainer","ColumnList","ColumnCheckbox","borderTop","fitTo","contentInnerWrapperId","mainContainerId","TableOfContents","checkedStatuses","areAllChecked","atLeastOneChecked","isCollapsed","isQuickPriceSectionInLimitedCompany","Section","collapsible","passThroughProps","sectionCheckBox","indeterminate","isVisible","leadingIcon","getLeadingIcon","trailingIcon","getTrailingIcon","disableField","wrap","overflowWrap","ColumnTitle","NumericOptionsToggle","setSummaryItems","summaryItems","showOptionToggle","summ","Sum","pointerEvents","Avg","schemaFieldTypeOptions","ToggleButton","ColumnTitleContainer","LegacyGroupingPanel","GroupingPanelItem","showGroupingControls","sortingDirection","onSort","onGroup","ButtonGroup","forwardedRef","ButtonIcon","Toggle","noCaret","Menu","DateOptions","activeItem","dateGrouping","setGrouping","extendedGroups","interval","existingGroupIndex","newGroup","newGroups","updateDateType","capitalize","columnPredicatesByType","linkToString","checkListToString","getColumnsExtensions","predicateByType","predicate","extensionsDataTypes","ExtendedIntegratedFiltering","filterExtensions","retString","FilterPillButton","onReset","StyledFilterPillButton","FilterPillNoView","showFilterConfig","setShowFilterConfig","anchorEl","setAnchorEl","isFilterActiveCheck","FilterPillContainer","canUseFilter","onPillContainerClickHandler","FilterPillName","setDisplayedFilters","displayFilters","filterId","ThemeProvider","customStyles","anchorOrigin","transformOrigin","SchemaFieldFilter","blue150","MuiPopover","styleOverrides","FiltersNoView","selectedFields","permanentFilters","pageId","setIsExpanded","useContext","FiltersNoViewContext","setFilters","SetFiltersNoViewContext","displayedFilters","showFilterSelect","setShowFilterSelect","filterLookup","showFilters","setShowFilters","rawSchema","selectedSchemaFields","fromEntries","selectedSections","selectedOrderedSections","typedFilters","missingFilters","difference","allFilters","validFilters","currentFilterSelect","isDisplayed","useSelectedFilters","filteredDisplayedFilters","filteredActiveFilters","isDisplayedFilters","handleFilterReset","newFilterLookup","dropdownButtonStylings","filterA","filterB","defaultFilterOperation","newFilter","newFilters","createContext","FiltersNoViewProvider","ExpandFilters","FiltersWrapper","FilterControl","FiltersContainer","FilterClearOption","FilterAddEditOption","getContactListColumns","FirstNameColumn","LastNameColumn","TitleColumn","CellPhoneNumberColumn","PhoneNumberColumn","EmailColumn","MainContactColumn","isMainContact","LocationColumn","NoteColumn","defaultColumnOrdering","ContactLocationFormatter","currentVendorLocations","contactLocation","vl","VendorLocationAddress","isNullAddress","Overlay","ContactLocationProvider","ContactEmailFormatter","ContactEmailProvider","EmailAddress","ContactPhoneFormatter","ContactPhoneProvider","CellPhoneNumber","SyncContactModal","contactToSync","handleCloseModal","Typography","gap","syncContactToProjects","CustomCommandCell","setIsDeleting","setToDelete","setEditingContact","setMovingContact","setShowSyncContactModal","setContactToSync","restProps","Cell","StyledDropdownButton","changedContactId","editingVendorContact","originalContact","StyledIcon","movingContactId","movingContact","setShowMoveContactModal","onSelect","contactToSyncId","rowIndex","Icon","newContact","setEditingRowIds","setAddedRows","setRowChanges","isDeleting","toDelete","showSyncContactModal","addBlankRow","defaultSorting","estimatedRowHeight","defaultOrder","editCommand","deleteCommand","onExecute","command","handleOnExecute","groupByColumn","mainIconName","deleteContact","flexWrap","VendorContactInfo","VendorProducts","MinorityStatuses","columnGap","flexBasis","WebAddress","FaxNumber","Pill","fillPercentage","verticalAlign","displayCityStateZip","primary","WrapperDiv","InnerDiv","Children","child","isValidElement","cloneElement","isScrollable","ModalColumns","ScrollableModalBody","CModal","dateString","normalizeEstimateDates","userDefinedDate1","userDefinedDate2","userDefinedDate3","userDefinedDate4","userDefinedDate5","summary_Date","spread_Date","generateActivityTotalFormulaKey","mapActivityTotalsBackToFormulas","estWithFormulasAndTotals","activityTotal","uniqueKey","generateKV","itemCode","formulaExpression","itemUnit","units","formulaUnit","FormulaMatchOptions","Exact","shouldGenerateKV","currentCost","currentQuantity","HcssConnectAccountService","client","mapperService","hcssCalendarAccounts","validAccounts","inValidAccounts","getNylasAccountDetails","responses","allSettled","getNylasAccountInfo","invalidAccount","validAccount","accounts","getNylasAccountCalendars","cals","redirectUrl","connectionUrl","loadingNylasAccounts","setLoadingNylasAccounts","loadingHcssCalendarAccounts","setLoadingHcssCalendarAccounts","loadingNylasCalendars","setLoadingNylasCalendars","loadingRedirect","setLoadingRedirect","setNylasAccounts","setNylasCalendars","hcssConnectApi","redirectQueryArg","loadHcssCalendarAccounts","accs","getHcssCalendarAccounts","loadNylasAccounts","hcssNylasAccounts","hcssAccounts","getNylasAccounts","getNylasCalendarsForNylasAccounts","loadData","deletedAccount","disconnectNylasAccount","tempAccounts","deleteIndex","connectUrl","assign","HcssConnectProvider","DEFAULT_UI_STATE","moduleNavWidth","DYNAMIC_NAV_WIDTH","isResizeDisabled","flyoutIsOpen","_setFlyoutIsOpen","isResizing","setIsResizing","setIsResizeDisabled","setmoduleNavWidth","MODULE_NAV_WIDTH_CACHE_KEY","setIsCollapsed","NAV_COLLAPSED_CACHE_KEY","isCollapsedStore","setIsCollapsedStore","NAV_COLLAPSED_STORE_CACHE_KEY","setFlyoutIsOpen","isOpen","uiState","toggleCollapse","manualResizeStart","manualResizeEnd","enableResize","disableResize","useUIController","NavigationControllerProvider","useNavigationControllerContext","previouslyLoaded","stateSlice","loadingFirstPage","onBeforeLoadSuccess","nextPageToken","ExportRows","templateDisplayName","exportBidResultsCSV","highlightProjects","tableColumns","exportRows","dataBody","formatExportRows","jspdf","orientation","compress","jsPDF","totalPagesExp","columnStyles","headerName","dataKey","halign","cellWidth","pdfObject","startY","pageBreak","tableWidth","showHead","showFoot","font","fontStyle","fillColor","textColor","valign","cellPadding","lineColor","lineWidth","minCellHeight","headStyles","alternateRowStyles","allSectionHooks","didDrawCell","nameColumn","tableColumn","rowVal","rgbColor","hex","hexToRgb","maxY","setDrawColor","setLineWidth","textPos","wrappedWidth","didDrawPage","setFontSize","setTextColor","setFontStyle","headerPageWidth","internal","getWidth","pageHeight","getHeight","getNumberOfPages","autoTable","putTotalPages","unparse","blob","Blob","saveAs","formatExportBidResultsRows","isPDFExport","dataColumns","dataRow","keyExists","getLinks","getCheckList","parsedRows","winningValues","bidResult","winningValue","checkedString","unCheckedString","totalChecked","totalUnchecked","rawValue","qs","stringpreconId","leadingZeros","matchAll","parsedNumber","numLeadingZeros","finalNumber","paddedNumberLength","completedString","padStart","validProjectName","formattedName","existingProjectsWithName","populateProjectWithEstimateValues","estimateField","meanBy","sumBy","populateHJJobFieldsWithValues","jobs","j","filterProjectFieldsBeforeSave","populateProjectWithBidResults","leftOnTableResult","sortedRows","winningRowIndex","bidRows","winningAmount","percentLeftOnTable","getDifferenceFromSecondValue","fromLowBidResult","winningRow","companyRow","bidRow","getDifferenceWinnerCellValue","winningBid","getWinningBid","winningBidCompany","winningBidAmount","getLastModifiedByName","lastModifiedByUserId","getLastModifiedByClientName","lastModifiedByClientId","clientName","populateProjectWithLastModifiedBy","lastModifiedBySystemUser","lastModifiedBy","nonEstimatesLookupFieldIds","tableLookupField","ModificationTypes","Units","Crew","ProdType","ProdRate","WorkersCompCode","ReportGroup1","ReportGroup2","ReportGroup3","ReportGroup4","ReportGroup5","ReportGroup6","LoadEstimateErrorStatus","loadingState","allLoaded","quoteFoldersLoaded","activityTotalsLoaded","loadEstimateErrorStatus","hiddenUnlinkedEstimateIds","hiddenUnlinkedEstimateIdsLoaded","heavybidDivisions","heavybidDivisionsLoaded","activityCodebookUnused","activityCodebookUnusedLoaded","activityCodebookUtilized","activityCodebookUtilizedLoaded","activityCodebookUtilizedDetails","activityCodebookUtilizedDetailsLoaded","activityCodebookMissing","activityCodebookMissingLoaded","activityCodebooksOverflowStatus","lastProcessedActivityCodebooks","normalizedEstimate","MissingDivToBUMapping","p1","p2","divisionCode","modification","dict","customTotals","newLoadingState","getIds","getHiddenUnlinkedEstimateIds","getUnlinkedEstimates","has","hiddenIds","hiddenIdsLoaded","getActiveEstimates","getActiveEstimatesTrim","getActiveEstimatesWithoutExcluded","getArchivedEstimates","getArchivedEstimatesWithoutExcluded","getActiveEstimateLocations","getEstimateFieldsLookup","getCurrentEstimateViewFiltersLookup","getCurrentEditArchivedEstimateFiltersLookup","getCurrentEstimateViewFiltersList","getCurrentEditArchivedEstimateViewFiltersList","getFilteredEstimates","getAllLoaded","getQuoteFoldersLoaded","getFilteredEditArchivedEstimates","getLoadEstimateErrorStatus","getHeavybidDivisionsLoaded","getHeavybidDivisions","NoDataPlaceholder","mainIconSize","iconName","buttonDataTestId","gray300","LoadingSpinner","renderSpinnerClass","StyledLoadingSpinner","PageLoadingOverlay","PageLoadingOverlayContainer","ContentLoadingOverlay","ContentLoadingOverlayContainer","hideMessage","SectionLoadingOverlay","SectionLoadingOverlayContainer","PanelLoadingOverlay","PanelLoadingOverlayContainer","ListLoadingOverlay","ListLoadingOverlayContainer","BaseLoadingOverlayContainer","copyToClipboard","clipboard","writeText","copyTableToClipBoard","getSelection","tableNode","selectNodeContents","removeAllRanges","addRange","execCommand","updateProfile","addLogo","profileLogoUrl","getProfile","ProfileService","createProfileFromCompanyInfo","tempProfile","profileAccentColor","CreateProfileDto","createProfile","resp","newProfile","getMyProfile","UpdateProfileDto","exception","TRANSITION_DURATION","TRANSITION_DURATION_MS","TRANSITION_TIMING_FUNCTION","RESIZE_TRANSITION_DURATION","FLYOUT_DELAY","DYNAMIC_NAV_WIDTH_FLYOUT","DYNAMIC_NAV_WIDTH_COLLAPSED","GLOBAL_TOP_NAV_HEIGHT","GLOBAL_NAV_COLLAPSE_THRESHOLD","NAVIGATION_LAYER_ZINDEX","CACHE_KEY","RESIZE_CONTROL_HANDLE_OFFSET","RESIZE_CONTROL_HANDLE_WIDTH","RESIZE_CONTROL_OUTER_WIDTH","SCROLL_HINT_HEIGHT","SCROLL_HINT_SPACING","SCROLL_BAR_SIZE","userAgent","eventName","properties","callback","QuickPriceApi","createQuickPriceSheet","newLibrary","getDetailedVendors","cancelToken","filteredProducts","getMinorityTypes","getVendor","getVendorsCsvReport","getVendorsExcelReport","reponse","deleteVendor","createVendorContact","updateVendorContact","contactId","moveVendorContact","deleteVendorContact","searchVendorContacts","searchTerm","createVendorMinorityStatus","updateVendorMinorityStatus","statusId","deleteVendorMinorityStatus","getLocationsByVendorId","createVendorLocation","createVendorLocations","createMinorityType","updateMinorityType","createProductType","updateProductType","PreconContactsApi","vendorDto","updateContactProducts","moveContactProducts","newVendorId","oldContactProducts","newContactProducts","newProducts","oldProducts","loadVendors","loadVendorsState","loadMinorityTypes","minorityTypes","loadProductTypes","loadCompanyTypes","companyTypes","handleNewProductsFromContact","preconApi","originalContactParams","existingContactProducts","separateNewAndExistingProducts","existingProducts","createdProductsList","newProduct","createdVendorProduct","foundProduct","existingProduct","newProductType","newProductDtoFactory","updatedProductTypes","updateProductTypes","updateCompanyTypes","newContactsProductsList","updatedVendorProducts","createdProduct","foundMatchingVendorProduct","vendorProduct","createdContactProduct","contactProductsListFactory","loadVendorsReport","fileSaver","Csv","csvData","excelData","cv","newVendor","preconContactsApi","completedContact","cvcd","CreateVendorContactDto","updateDto","oldVendorId","updatedContact","MoveContactSuccessNotification","addMinorityStatus","vms","minorityTypeId","certificationNumber","newMs","MinorityStatusDto","updateMinorityStatus","updateModel","deleteMinorityStatus","createModel","addProductType","__retry","getState","reason","setRecentEstimateIds","currId","addEstimate","prevEstimates","newRecentList","RecentEstimateProvider","defaultProps","mb","SmartDriveDeleteConfirmation","fileOperations","fileToDelete","setFileToDelete","allSelectedRowsOperations","selectedRowIds","setSelectedRowIds","useSmartDriveContext","Warning","newSelectedRowIds","SmartDriveTable","downloadFile","delModalOperations","setModalShowUp","uppy","ui","toggleFileModal","isReadOnlyUser","handleUploadFilesClick","Wrapper","sm","SmallerButton","file","setSelection","DateTimePicker","useTime","_currentDate","setCurrentDate","currentDate","onCurrentDateChange","dateStr","ToolGrid","GridContainer","area","TemplateContainer","TemplateLabel","ControlLabel","EmailField","PhoneField","selectedValues","isCustomSort","Set","vendorParam","editingLocationId","setLocationOptions","createVendorLocationDropdownOptions","getFirstLocation","vendorLocations","filteredNullNickname","notNullLocation","noop","onItemDragStart","onItemDragEnd","emitters","emitItemDragStart","emitItemDragEnd","LayoutEventProvider","RenderBlocker","shouldComponentUpdate","blockOnChange","propsChanged","propName","Shadow","isBold","isOverDarkBackground","colorStops","ComposedGlobalSideNavigation","GlobalNavigation","camelToKebab","getStyle","isTransitioning","ModuleNavigationWrapper","Outer","Inner","tabIndex","ContextNavigationWrapper","isEntering","isExiting","slideIn","keyframes","useIsMounted","isMounted","DynamicNavigation","shouldRenderContext","ToggleContent","mountOnEnter","ComposedDynamicNavigation","transitionState","transitionStyle","moduleNavigationRef","disableInteraction","DynamicNavigationWrapper","ContentCollapsed","hasContext","ResizeTransition","inProp","userIsDragging","onExpandStart","onExpandEnd","onCollapseStart","onCollapseEnd","onEntering","onEntered","onExiting","onExited","dynamicProperties","unmounted","exiting","exited","entering","entered","willChange","getChanges","buttonRef","hasHighlight","HitArea","GrabArea","showHandle","OuterGrabArea","InnerGrabArea","ResizeControl","invalidDragAttempted","controller","mouseEnterGrabArea","mouseIsOverGrabArea","mouseLeaveGrabArea","handleResizeStart","initialX","pageX","mouseIsDown","handleResize","handleResizeEnd","initializeDrag","delta","initialWidth","didDragOpen","isDragging","mutationRefs","calculatePositionChange","updateResizeAreaPosition","clientX","currentWidth","publishWidth","shouldCollapse","showGrabArea","isGrabAreaDisabled","toggleButtonRef","shadowDirection","ChevronRight","ChevronLeft","OuterControl","DragCursor","onMouseDown","focusable","fill","fillRule","innerWidth","adjustedMax","adjustedMin","refs","getPropertyValue","setProperty","Navigation","pageRef","navigationRef","flyoutTimeout","itemIsDragging","setItemIsDragging","GlobalTopNavigation","navContainerTopOffset","flyoutWidth","TopNavigationContainer","NavigationContainer","onMouseOut","relatedTarget","contains","NavigationContainerMask","onMouseOver","nav","PageContent","useGlobalTopNavigation","useGlobalSideNavigation","leftOffset","expandedSize","LayoutManager","LayoutContainer","HcssNavigation","containerDivStyle","sizerStyle","WidthDetector","resizeObjectDocument","resizeObject","rafSchedule","offsetWidth","onResize","handleContainerRef","handleObjectRef","handleObjectLoad","contentDocument","componentDidMount","componentWillUnmount","sizerEl","onLoad","containerStyle","_containerStyle","calculateHash","Context","OverFlowStatusProvider","DropdownContext","UnstyledDropdown","dropdownToggleRef","createRef","dropdownMenuRef","dropdownToggleRegionRef","toggleClose","isMuiSelectClick","forceClose","targetEl","clickMuiBackdrop","clickMuiMenuItem","clickMuiList","handleToggleFromMenu","handleToggle","toggleRegionWidth","getBoundingClientRect","dropdownToggle","togglewidth","dropdownMenu","StyledDropdown","DropdownToggle","attrs","blue100","DropdownMenu","css","widthEm","columnCount","columnWidthEm","DropdownIcon","PrimaryItemsContainer","moreLabel","Create","toArray","setWidth","itemsLimit","setItemsLimit","forceEffectValue","triggerForceEffect","itemsWidths","hashRef","throttleSetWidth","throttle","lastItemWidth","wasJustLimited","currentHash","THROTTLE_INTERVAL","partialWidth","ITEM_APPROX_MINWIDTH","visibleItems","overflowItems","updateWidth","useOverflowController","OverflowDropdownMenu","flexShrink","appSwitcherComponent","AppSwitcher","productHomeComponent","ProductHome","primaryItems","secondaryItems","createButtonComponent","PrimaryContainerWrapper","SecondaryContainerWrapper","GlobalItem","itemId","hoverTitle","itemContainerStyle","buttonStyle","buttonColor","buttonBackgroundColor","ItemWrapper","SideNavBadge","SideNavigationOptions","Projects","ProjectNavBadge","overlap","GlobalSideNavigation","showCreateButton","createHoverTitle","CreateContainerWrapper","ProfileMenu","subtext","guest","showCurrentBU","ProfileDropdownMenu","ProfileMenuUserInfo","gray100","DropdownMenuItem","WrappedComponent","iconClassName","useReactRouterLink","MenuItemLink","Consumer","DropdownMenuDivider","enterAnimationDown","enterAnimationUp","exitAnimationDown","exitAnimationUp","parentId","shouldGrow","alwaysShowScrollHint","traversalDirection","setTraversalDirection","prevId","usePrevious","prevParentId","TransitionGroupComponent","ScrollableTransitionGroup","StaticTransitionGroup","TransitionGroup","appear","animationStyles","animationName","getAnimationStyles","ScrollableSectionWrapper","ScrollableSectionInner","StaticSectionWrapper","HeaderSection","baseStyles","mergedStyles","MenuSection","SectionHeading","Item","isTempDisabled","renderInternal","BeforeWrapper","TextWrapper","SubTextWrapper","AfterWrapper","ItemDisabledLink","InteractiveStateManager","ItemBaseButton","ItemBaseLink","PlaceholderDynamicMenu","PlaceHolderHeaderContainer","hasBefore","PlaceHolderItem","wrapperStyles","beforeStyles","contentStyles","ItemBefore","ItemContent","connecting","connected","reconnectCount","createConnection","requestedBusinessUnitId","HubConnectionBuilder","withUrl","accessTokenFactory","build","createSocketChannel","connection","emit","END","onclose","stop","socketSaga","socket","socketChannel","updateProjects","updateAppAccess","updatePermissions","updateAccountType","declining","companyClients","createUserDictFromUserList","userDict","getAuthorization","useGet","useInsightsEstimatesGetReportsForEstimate","useInsightsEstimatesPostExcluded","useMutate","useIntegrationsV2GetAllCalulatedKPIs","paramsInPath","pathParams","useIntegrationsV2GetAllResources","credentialAdmin","usePreferences","isFullCompanyAdmin","isFullPreConAdmin","isFullLicense","isFullReadOnlyLicense","userLicense","isFullEditableUser","isFullReadOnlyUser","PaneledPageContext","HeaderPanelTitle","StyledHeaderPanelTitle","HeaderPanelSubtitle","StyledHeaderPanelSubtitle","HeaderPanelTools","StyledHeaderPanelTools","HeaderPanelFiltersTemplate","pageContext","HeaderPanelFilters","defaultExpanded","onDefaultExpandFilters","StyledFiltersPanelContainer","defaultContentPadding","filtersHasOpenDropdown","filtersPanelExpanded","templateTools","onToggleFiltersPanel","panelLabel","PageHeaderPanelTemplate","StyledPageHeaderPanel","contentAlign","maxpagewidth","maxPageWidth","Filters","baseTheme","ContentMain","handleScroll","onScroll","scrollTop","mainContainerRef","onMount","StyledContentMain","innerWrapperId","innerWrapperTestId","isContentAsideTemplate","componentType","ContentAsideTemplate","fillContentHeight","ContentAside","setAsideWidth","StyledContentAside","expandedwidth","asideWidth","aside","isContentSectionTemplate","ContentSectionTemplate","ContentSection","componentClassIdentifier","resizeListener","defaultCollapsed","haveContentReady","handleHeightChange","onHeightChange","isLastSection","onSectionToolsClicked","renderTestId","contentWindow","nextProps","targetSectionListModel","sectionIndex","sectionTitle","sectionFlagged","flagged","onSectionCollapse","unmountContentOnCollapse","onSectionExpand","hasSectionTools","tools","StyledContentSection","isCurrentSection","tableOfContentsActive","StyledStatusFlag","StatusFlag","combinedClassNames","additionalClassNames","flagIconColor","flagIcon","StyledTableOfContents","isTableOfContentsTemplate","sectionFlag","SectionTableOfContentsTemplate","SectionTableOfContents","moveIndicatorToCurrentSection","currentSectionIndex","getOffsetCompensationAmount","allSections","onSelectSection","withTheme","getContentSectionListFromChildren","contentSectionCount","checkForTableOfContents","numTOCChildNodes","childArray","checkForAside","numAsideChildNodes","refreshSectionFlagging","currentSectionList","updatedSectionList","PageContentPanelTemplate","Aside","PageContentPanel","sectionScrollOffsets","contentScrollPosition","contentResizingCalcInProgress","fillerHeight","fillerWasResized","userRequestedScrollToSection","hasContentAside","hasTableOfContents","handleMainContainerMounted","calculateFillerHeight","updatedScrollOffsets","getUpdatedSectionScrollOffsets","handleWindowResize","calculateWidth","selfElement","lastSection","containerHeight","lastSectionHeight","baseMargin","calculateScrollUpBuffer","calculateScrollDownBuffer","childNodes","updatedScrollPosition","scrollOffset","sectionScrollOffset","getCurrentSectionWithUpdatedPosition","currentScrollPosition","scrollChange","lastPassedSectionIndex","scrollUpBuffer","scrollDownBuffer","triggerInterferenceWithPreviousSections","currentSectionOffset","calculatedBuffer","defaultBuffer","previousSection","previousSectionHeight","passedPreviousTrigger","lowTrigger","sectionAtIndex","handleClickInside","onClickInsideContent","hideFiltersOnContentClicked","handleScrollContent","flagSectionsOnScroll","updatedSectionIndex","delayUserScrollRequestReset","delayFillerResizeStatusReset","handleSectionChangedHeight","handleSelectSection","selectedSectionIndex","sectionPosition","updatedWidth","newAllSections","StyledPageContentPanel","containerwidth","asidewidth","fillerheight","mainContainerTestId","contentInnerWrapperTestId","isLast","gray400","FiltersToggle","handleClick","toggleFiltersOnEvent","handleMouseEnter","PaneledPage","dropdownCheckTimeout","mounted","activeDropdownId","hideFilters","handleClickInsidePage","checkForOpenDropdowns","handleClickInsideFilters","handleFiltersPanelToggled","handleDefaultExpandFilters","checkForInvalidNodes","process","activeElementId","activeElement","handleClickInsideContent","filtersPanelShouldHide","userExpandedAnyDropdown","contextState","onClickInsideFilters","StyledPaneledPage","DAY_POSSIBLE_VALUES","otherSubs","projectTemplateIds","recipientIds","isValidName","isValidTemplates","isValidRecipients","isValidTime","isValidTimeZone","isValidDay","otherSub","viewIds","subscriptionRecipientIds","subHaveAtLeastOneRecipient","subHasInvalidUsers","newSubTime","scheduledTimes","newSubTimeZone","timeZoneId","newSubDays","CodebooksIcon","CodebooksLimitedView","Timestamps","SectionSubText","SectionHeader","SectionTitle","h2","activityColumn","codebookCodeColumn","descColumn","levelColumn","unitColumn","estimateColumn","biditemColumn","lastUpdateColumn","lastModifiedColumn","timesUsedColumn","timesModifiedColumn","codebookValueColumn","modifiedValueColumn","modificationColumn","unusedColumns","missingColumns","utilizedColumns","utilizedDetailsColumns","CodebooksUtilizedPage","codebooksFields","utilizedTableData","setUtilizedTableData","_setSelection","filteredUtilized","filterArray","mappedCodebookCode","codebook","selectedCode","timesModified","CodebooksUtilizedTable","tableData","vtRef","scrollToRow","sizing","defaultSizing","prevSelected","lastSelected","exportCsv","exportPdf","showColumnVisibility","CodebooksUtilizedDetailsTable","utilizedCode","utilizedDetails","BottomSection","BackIcon","noDataRowComponent","rowProps","NoDataRow","colSpan","CodebooksUnusedPage","unusedTableData","setUnusedTableData","filteredUnused","mappedActivity","CodebooksUnusedTable","tableMenuMessages","headerMenuMessages","sortAscending","sortDescending","CodebooksMissingPage","missingTableData","setMissingTableData","filteredMissing","CodebooksMissingTable","rangeOptions","CodebooksDateRangeDisplay","showOverflowIcon","showPopover","setShowPopover","dateTouched","setDateTouched","dateValues","DropdownLabel","DateRangeDisplayButtonContainer","OverflowIconContainer","OverflowErrorIcon","DateRangePickerPopover","disableRestoreFocus","DateRangePicker","DateRangePickerContainer","RangeOptionsContainer","inputId","DateTimeContainer","DateTimePickerContainer","divisions","divisionsLoaded","isFreeCompany","defaultDiv","chatAvailable","getExpertChatAvailability","embedded_svc","bootstrapEmbeddedService","StyledDropdownButtonContainer","ReportTypeOptionItem","DivisionOptionItem","tool","headline","NotificationBody","NotificationFooter","CancelButton","red300","red100","CollapsibleSectionHeader","CollapseIcon","CollapsibleSection","initialExpanded","onToggle","_isExpanded","_setIsExpanded","CollapsibleSectionBody","SectionList","TextOverflow","TextOverflowVertically","MultiSelectFieldInput","handleBlur","sortedValue","displayOptions","existSelectedOptions","dataItems","MultiSelectListInput","setFieldTouched","includesValue","newFieldValue","useMasterSolicitations","setSolicitations","useOutboundSolicitations","VendorSolicitationRepo","useInboundSolicitations","estimatesSyncStatus","setEstimatesSyncStatus","syncStatus","getEstimatesSyncStatus","SentToGC","outboundVendorSolicitations","inboundVendorSolicitations","masterSolicitations","SolcitationProvider","AddProjectButton","booleanOptions","booleanOptionsLookup","BooleanFilter","checklistFilterOptions","checklistFilterLookup","ChecklistFilter","rangeOptionsLookup","DateTimeFilter","allowCustom","FilterTypeSelect","allFilterOperations","filterOptionLookup","ListFilter","contactsSelector","allOptions","SelectContainer","getOptionLabel","NumberFilter","handleInputChange","NumberFilterContainer","NumberInputContainer","updateLowerValue","updateUpperValue","DropdownIndicator","CreatableSelect","menuIsOpen","TextFilter","ProjectIdFilter","hasEstimateInsightsAccess","onChangeFilter","selectedValue","calculatedFieldsWithEstimates","showFilterTypeSelect","FilterContainer","FilterHeader","FilterOptionsContainer","SchemaFieldFilterControl","overrides","QuickPricingSourceOptions","ContactPopover","PopoverContainer","CompanyPopover","SelectionTable","TableSelection","Row","String","createElement","ProjectsPage","ProjectsSetupPage","HBIntegrationSetupPage","ProjectsEmailSubscriptionSetupPage","ProjectsDetailPage","ProjectsImportPage","ProjectsImportProjectsPage","ProjectsImportBidResultsPage","EstimateMappingPage","ProposalSetupPage","QuickPricingWrapper","PayItemLibraryPage","ProjectsRouter","isQuickPricingEnabledPhase2","QuickPricingPhase2","ProjectsDetailPageWrapper","isCopy","PayItemLibrary","EstimateHistory","basePath","setSelectedVendor","modalState","searchResults","searching","searched","showMoveContactModal","filterDuplicateProducts","deletedId","currentMainContactIndex","vendorHasMainContact","ContactDto","vc","vendorToDeleteFrom","updatedContacts","vendorToAddIn","vendorToAddInProductsLookup","updatedMinorityType","getSearchResults","getVendorCodeIdDict","geDetailedVendor","getShowMoveContactModal","firstLocation","getVendorFirstLocation","offices","getVendorIdCompanyTypeDict","getContactIdProductTypeDict","flat","self","SMTPSettingsPage","AdminSettingsPage","ProfilePage","SettingsRouter","fastDeepClone","rfdc","setSelectedViewId","selectedViewId","createNewProjectLocally","newLocalProject","deletingProjectID","hJJobs","undoEstimateLinkingState","hJJobCostTypeCosts","hJJobCostTypeCostsLoading","enableUndoEstimateLinking","originalEstimatesIds","updateUndoEstimateLinkingStatus","saveProjectSuccess","moveLastModifiedDate","saveProjectFailure","linkEstimatesToProjectRequest","noProjectsChanged","currentLinkedEstimates","newProjectEstimate","selectedEstimate","InProgress","newFieldMetadata","newProjectMetadata","deletingProjectId","jobId","hJJobCostTypeCostsLoadingError","getAllProjectsLoaded","getFirstPageLoaded","getHJJobs","getProjectFieldsLookup","getProjectSectionsList","getProjectSectionsLookup","getOrderedProjectSections","sectionLookup","sectionList","getProjectFields","getFilterableProjectFields","getFilterableProjectFieldsLookup","getProjectFieldsBySection","getFilterableProjectFieldsBySection","getFilterableProjectFieldsOrdered","getEstimateTotalRelatedFieldIds","isCalculatedFieldWithEstimates","getFilterableFields","getSelectableFields","getProjectsLookup","firstPageLoaded","getEstimatesLookup","projectsHash","Map","enrichProjectWithEstimates","estimateLookup","enrichProjectWithTableLookupFields","tableLookupFields","tableFieldId","selectAccountProjectData","companyUsers","identityClients","getAllProjectsWithEstimates","projectHash","clientId","projectCopy","calculatedFields","enrichProject","getProjectEstimateMapping","getCurrentProjectViewFiltersLookup","getCurrentProjectViewFiltersList","getIsProjectsFilteredByEstimateTotals","fieldIds","isFilterValueEmpty","getCurrentProjectViewFields","getFilteredProjects","getSelectableFieldList","sensitivity","getShareableFieldsFromProjectSection","firstSection","getCalendarSubscribeIsActive","getAllProjectLoadedStatus","getHJJobCostTypeCosts","getHJJobCostTypeCostsLoading","tutorialSteps","projectsList","content","selector","UpdateStep","clientHeight","parentElement","firstChild","click","tutorialStepsNoAddEdit","step","goTo","prevRendered","setPrevRendered","defaultTutorialState","setisOpen","tutorialCompleted","openTutorial","closeTutorial","useTutorial","TutorialProvider","useTutorialContext","firebaseBaseUrl","idsrvBaseUrl","SentToSub","SubAccepted","GCManuallyEntered","SubRejected","GCApproved","GCIgnored","MoveContactModal","removingContactProducts","setRemovingContactProducts","setContact","vendorDestinationProducts","differenceBy","sortedRemovingContactProducts","removingContactProductIds","cp","onMoveHandler","paddingX","flexItem","severity","Contacts","currentPath","iconPrefix","iconTransform","isPreconUser","HelpMenuOverride","HelpMenu","DropdownDivider","ConnectedProjectsTutorialMenu","useDropdownMenuManager","RegionMenuItem","setRegion","menuItems","lan","InputAdornment","LanguageMenuItem","FeedbackComponent","GuestProfileMenuComponent","SettingsComponent","ProfileMenuComponent","SandboxComponent","ChatComponent","ProductHomeComponent","getSiteBrandTitle","centralDateTime","tz","centralDay","centralHour","hours","TertiaryLink","CustomChatButton","availability","CustomIcon","isCompanyNameValidForSandbox","SettingsDropdownMenu","LanguageSelector","rootReducer","combineReducers","sagaMiddleware","createSagaMiddleware","createStore","applyMiddleware","Cypress","run","accountSagas","schemasSagas","viewsSagas","projectsSagas","signalRSagas","estimatesSagas","configSagas","calendarsSagas","profileSagas","contactSagas","emailSubscriptionSagas","quickPriceSagas","defaultExport","CertNumberColumn","PercentColumn","minorityStatusColumns","MinorityStatusList","MinorityTypeColumn","newStatus","MinorityTypeDto","handleCommit","updatedMinorityList","createRowChange","updatedRow","numbers","estimateSectionId","debounceAutosave","autosave","msg","fetchSchemaFromState","inRedux","exceptionMessage","fieldNames","orderedSchemaFieldTypes","showInSetup","isAvailableToBasic","toContactFieldData","StaticContactFieldInput","selectedContact","MultiContactList","ContactOption","MultiContactsFieldInput","hasError","convertToContact","filteredData","SingleContactFieldInput","ContactInput","handleMultiChange","isSender","operation","dateStandardRanges","end","deleteCompanyType","x_Requested_Business_Unit_Id","_error","isAxiosError","processDeleteCompanyType","_responseText","result404","resultData404","ProblemDetails","getCompanyType","processGetCompanyType","updateCompanyType","processUpdateCompanyType","result409","resultData409","deleteMinorityType","processDeleteMinorityType","getMinorityType","processGetMinorityType","processUpdateMinorityType","deleteProductType","processDeleteProductType","getProductType","processGetProductType","processUpdateProductType","deleteProfile","processDeleteProfile","processGetProfile","ProfileDto","deleteProfileContact","processDeleteProfileContact","updateProfileContact","processUpdateProfileContact","deleteProfileMinorityStatus","processDeleteProfileMinorityStatus","updateProfileMinoirtyStatus","processUpdateProfileMinoirtyStatus","deleteProfileProduct","processDeleteProfileProduct","updateProfileProduct","processUpdateProfileProduct","deleteRegion","processDeleteRegion","getRegion","processGetRegion","RegionDto","updateRegion","processUpdateRegion","processDeleteVendor","processGetVendor","processUpdateVendor","processDeleteVendorContact","processUpdateVendorContact","processDeleteVendorMinorityStatus","processUpdateVendorMinorityStatus","deleteVendorProduct","productId","processDeleteVendorProduct","updateVendorProduct","processUpdateVendorProduct","processGetCompanyTypes","createCompanyType","processCreateCompanyType","result201","resultData201","getContacts","processGetContacts","GetContactDto","getContactsSearch","processGetContactsSearch","GetContactSearchDto","processGetMinorityTypes","processCreateMinorityType","processGetProductTypes","processCreateProductType","processGetMyProfile","getProfiles","processGetProfiles","ProfileSummaryDto","processCreateProfile","processUpdateProfile","getRegions","processGetRegions","createRegion","processCreateRegion","getVendorByCode","processGetVendorByCode","getVendors","processGetVendors","VendorSummaryDtoResponse","processCreateVendor","processGetDetailedVendors","upload","processUpload","result400","resultData400","addProfileLogo","content_","FormData","processAddProfileLogo","result413","resultData413","result415","resultData415","createProfileContact","processCreateProfileContact","createProfileMinorityStatus","processCreateProfileMinorityStatus","createProfileProduct","processCreateProfileProduct","processCreateVendorContact","processCreateVendorMinorityStatus","createVendorProduct","processCreateVendorProduct","lastContacted","regionId","ApiException","isApiException","ViewsApi","setAsSelected","savedView","isNewView","viewsUnSorted","viewsSorted","existingPreferences","emailId","stopSubscription","previewEmail","FullFlexContainer","Light"],"mappings":"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,gBAAiB,GACjBC,cAAe,CACb,qBACA,0BACA,4BACA,0BACA,6BACA,+BACA,0BACA,2BACA,4BACA,6BACA,+BACA,+BACA,+BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,qCACA,qCACA,qCACA,qCACA,qCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,kCACA,kCACA,kCACA,kCACA,kCACA,yBACA,0BACA,2BACA,iCACA,mCACA,gCACA,8BACA,gCACA,6BACA,kCACA,oCACA,iCACA,yCACA,2CACA,wCACA,4CACA,8CACA,2CACA,mCACA,qCACA,kCACA,iDACA,mDACA,gDACA,wCACA,0CACA,uCACA,uCACA,yCACA,sCACA,6BACA,+BACA,4BACA,6BACA,+BACA,4BACA,6BACA,+BACA,4BACA,8CACA,gDACA,6CACA,0CACA,4CACA,yCACA,8BACA,iCACA,gCACA,+BACA,gCACA,kCACA,+BACA,gCACA,kCACA,+BACA,2BACA,qBACA,2BACA,6BACA,4BACA,6BACA,kCACA,qCACA,oCACA,iCACA,uCACA,kCACA,8CACA,8BACA,uCACA,4CACA,4BACA,iCACA,iCACA,kDACA,0CACA,sCACA,2CACA,uCACA,gEACA,4DACA,mDACA,gDACA,qCACA,qCACA,wCACA,gCACA,gCACA,gCACA,gCACA,8BACA,sCACA,oCACA,yCACA,uCACA,0BAEFl8E,GAAI,4BACJtD,KAAM,0BACNy/E,SAAU,CACR,cACA,cACA,sBACA,yBACA,4BACA,2BACA,kCACA,6BACA,wBACA,uBACA,wBAEFC,iBAAkB,CAChB,cACA,cACA,sBACA,yBACA,4BACA,2BACA,kCACA,6BACA,wBACA,uBACA,wBAEFC,QAAS,CACP,CACEh4D,WAAY,sBACZ2M,UAAW,SAGfsrD,aAAc,GACdC,YAAa,GACbC,eAAgB,ICpNLznD,EAAsB,CACjC+mD,SAAU,oBACV/nC,QAAS,CACP,0BAA2B,CACzB1vB,WAAY,0BACZ03D,gBAAiB,GACjBv1E,OAAO,IAGXw1E,SAAU,GACVC,gBAAiB,GACjBC,cAAe,CACb,qBACA,0BACA,kBACA,6BACA,+BACA,0BACA,2BACA,4BACA,6BACA,+BACA,+BACA,+BACA,8BACA,8BACA,8BACA,8BACA,8BACA,8BACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,kCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,mCACA,qCACA,qCACA,qCACA,qCACA,qCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,oCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,qCACA,kCACA,kCACA,kCACA,kCACA,kCACA,yBACA,0BACA,2BACA,iCACA,mCACA,gCACA,8BACA,gCACA,6BACA,kCACA,oCACA,iCACA,yCACA,2CACA,wCACA,4CACA,8CACA,2CACA,mCACA,qCACA,kCACA,iDACA,mDACA,gDACA,wCACA,0CACA,uCACA,uCACA,yCACA,sCACA,6BACA,+BACA,4BACA,6BACA,+BACA,4BACA,6BACA,+BACA,4BACA,8CACA,gDACA,6CACA,0CACA,4CACA,yCACA,8BACA,iCACA,gCACA,6BACA,+BACA,gCACA,kCACA,+BACA,gCACA,kCACA,+BACA,2BACA,qBACA,2BACA,6BACA,4BACA,kCACA,6BACA,kCACA,qCACA,oCACA,iCACA,uCACA,kCACA,8CACA,8BACA,uCACA,4CACA,4BACA,iCACA,iCACA,kDACA,0CACA,sCACA,2CACA,uCACA,gEACA,4DACA,mDACA,gDACA,qCACA,qCACA,wCACA,gCACA,gCACA,gCACA,gCACA,8BACA,sCACA,oCACA,yCACA,wCAE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,EAA2B//B,GAEpC,8CAAQA,GAAR,aACE,cAAC4gL,EAAD,UACE,cAACC,EAAD,UACGntK,IAAMotK,SAASp/K,IAAI1B,EAAMd,UAAkB6hL,GAC1CrtK,IAAMstK,eAAeD,GACjBrtK,IAAMutK,aAAkBF,EAAxB,2BACKA,EAAM/gL,OADX,IAEE89B,SAAU99B,EAAM89B,YAElBijJ,WAQH9gJ,EACXjgC,GAGE,4CAAIX,MAAO,CAAE6e,QAAS,QAAale,GAAnC,aACE,cAAC4gL,EAAD,UACE,cAACC,EAAD,UAAW7gL,EAAMd,gBAMnB0hL,EAAa/gL,UAAO2T,GAAI;;;;;EAOxBqtK,EAAWhhL,UAAO2T,GAAI;;;;;;oCC1C5B,oEAAO,MAAMslE,EAAa,CACxBqZ,KAAM,CACJ,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEFpZ,UAAW,CACT,UACA,SACA,iBACA,UACA,WACA,aACA,WACA,cACA,WACA,uBACA,iCACA,UACA,UACA,OACA,SACA,QACA,WACA,UACA,OACA,SACA,WACA,YACA,QACA,mBACA,WACA,gBACA,WACA,YACA,cACA,WACA,UACA,WACA,SACA,gBACA,aACA,aACA,WACA,iBACA,eACA,2BACA,OACA,WACA,SACA,QACA,eACA,cACA,eACA,iBACA,eACA,YACA,QACA,OACA,UACA,iBACA,WACA,aACA,gBACA,YACA,YAISi4C,EAAmBl4C,EAAWqZ,KAAKzwF,KAAI,CAAC0wF,EAAM/uC,KAClD,CAAEh6C,MAAO+oF,EAAM70E,QAASu7D,EAAWC,UAAU11B,OAGvCy1B,O,iCCjIf,yEAuBe,SAAS53E,EAAMlB,GAC5B,MAAMsQ,G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","file":"static/js/main.b89e6590.chunk.js","sourcesContent":["import { Button, Icon } from \"hcss-components\";\nimport * as React from \"react\";\nimport { strings } from \"localization\";\nimport styled from \"styled-components\";\n\nexport interface DeleteButtonProps {\n onClick?: () => void;\n showText?: boolean;\n disabled?: boolean;\n testId?: string;\n children?: React.ReactNode;\n}\n\nexport default function DeleteButton({\n onClick,\n disabled,\n showText,\n testId = \"Button\",\n children\n}: DeleteButtonProps) {\n return (\n \n \n
{children || (showText && strings.core.buttons.delete)}
\n \n );\n}\n\nconst StyledButton = styled(Button)`\n align-items: baseline;\n border: none !important;\n background-color: transparent !important;\n font-weight: unset !important;\n text-transform: capitalize !important;\n font-size: 1.5rem !important;\n letter-spacing: normal !important;\n padding: 0 !important;\n div:hover {\n text-decoration: underline;\n }\n i:hover {\n text-decoration: none;\n }\n i {\n font-size: initial;\n }\n`;\n","import React from \"react\";\nimport { strings } from \"localization\";\nimport { Sizes } from \"react-bootstrap\";\nimport { Button, Modal, Icon } from \"hcss-components\";\nimport styled from \"styled-components\";\ninterface ConfirmSubmitModalProps {\n show: boolean;\n title: string;\n submitButtonText?: string;\n children?: React.ReactNode;\n size?: Sizes;\n handleConfirm: () => void;\n handleClose: () => void;\n}\nexport const ConfirmSubmitModal = (props: ConfirmSubmitModalProps) => {\n return (\n \n \n {props.title}\n \n {props.children}\n \n \n \n {strings.genericModal.cancel}\n \n  \n \n \n \n );\n};\n\nconst StyledModalWrapper = styled(Modal)`\n z-index: 12000;\n`;\n","import { Timestamp } from \"firebase/firestore\";\nimport { FileMeta } from \"hcss-smartdrive\";\nimport { SendEmailVia, SendEmailVia2 } from \"../../api\";\nimport { trim } from \"lodash-es\";\nimport { ContactDto } from \"api/GeneratedClients/ContactsClient\";\nimport { strings } from \"localization\";\nimport {\n Document,\n MessageType,\n QuoteItem,\n MessageStatus,\n Contact,\n NylasSyncState,\n Vendor\n} from \"core\";\n\nimport {\n MinorityClass,\n QuoteVendorDto,\n QuoteItemDto\n} from \"api/GeneratedClients/EstimateHistoryClient\";\nimport { isNullOrWhitespace } from \"core/util\";\nimport { UsableAccount } from \"./hcss-connect\";\nimport { NylasAccount } from \"./hcss-connect/models/NylasAccount\";\n\nexport class ModelMappingService {\n parseMinorityStatuses = (mstatuses?: MinorityClass[]) => {\n return (\n mstatuses\n ?.filter(ms => !isNullOrWhitespace(ms.code))\n .map(ms => trim(ms.code)) ?? []\n );\n };\n\n mapToContact = (contacts: ContactDto[]): Contact[] => {\n return contacts.map(c => ({\n firstName: c.firstName,\n lastName: c.lastName,\n email: c.emailAddress ?? \"\",\n cellPhone: c.cellPhoneNumber,\n phone: c.phoneNumber\n }));\n };\n\n mapVendorToContact = (vendor: QuoteVendorDto): Contact[] => {\n return [\n {\n firstName: vendor.firstName ?? \"\",\n lastName: vendor.lastName ?? \"\",\n cellPhone: vendor.cellPhone ?? \"\",\n email: vendor.email ?? \"\",\n phone: vendor.phone ?? \"\"\n }\n ];\n };\n\n mapToVendors = (vendors: QuoteVendorDto[]): Vendor[] => {\n return vendors.map(v => ({\n hbId: v.id,\n code: v.code,\n name: v.name ?? \"\",\n minorityStatuses: this.parseMinorityStatuses(v.minorityStatuses),\n contacts: this.mapVendorToContact(v)\n }));\n };\n\n mapToMasterSolicitationFilter = (from: string) => {\n switch (from.toLowerCase()) {\n case \"drafts\":\n return MessageStatus.Draft;\n case \"sent\":\n return MessageStatus.Sent;\n default:\n return undefined;\n }\n };\n\n mapToQuoteItem = (quoteItems: QuoteItemDto[]): QuoteItem[] => {\n return quoteItems.map(i => ({\n hbId: i.id,\n clientNo: i.clientNo || \"\",\n hbQuoteFolderId: i.quoteFolderId,\n description: i.alternateDescription || \"\",\n quantity: i.quantityAdditiveFactored,\n unit: i.unit || \"\",\n unitPrice: 0,\n total: 0,\n originalHbId: i.id\n }));\n };\n\n mapToIDocument = ({\n id,\n fileName,\n shareUrl,\n mime,\n size,\n created: cd,\n modified: md\n }: FileMeta): Document => {\n const created =\n cd !== null && cd !== undefined\n ? Timestamp.fromDate(new Date(cd))\n : Timestamp.now();\n\n const modified =\n md !== null && md !== undefined\n ? Timestamp.fromDate(new Date(md))\n : created;\n\n const url = shareUrl || \"\";\n\n return {\n id,\n fileName,\n url,\n mime,\n size,\n created,\n modified\n };\n };\n\n mapToIDocuments = (files: FileMeta[]) => {\n return files.map(f => this.mapToIDocument(f));\n };\n\n mapToMessageType = (from: string) => {\n switch (from) {\n case strings.solicitations.details.addendum:\n return MessageType.Addendum;\n case strings.solicitations.details.followUp:\n return MessageType.FollowUp;\n default:\n return MessageType.Initial;\n }\n };\n\n mapFromMessageType = (type: MessageType, isProposal = false) => {\n switch (type) {\n case MessageType.Addendum:\n return strings.solicitations.details.addendum;\n case MessageType.FollowUp:\n return strings.solicitations.details.followUp;\n default:\n return isProposal\n ? strings.quoteProposal.details.initialProposal\n : strings.solicitations.details.initialSolicitation;\n }\n };\n\n mapToSendEmailType2 = (method: SendEmailVia) => {\n switch (method) {\n case SendEmailVia.Mailgun:\n return SendEmailVia2.Mailgun;\n case SendEmailVia.OAuth:\n return SendEmailVia2.OAuth;\n case SendEmailVia.SMTP:\n return SendEmailVia2.SMTP;\n }\n };\n\n mapNylasAccountToUsableAccount = (\n nylasAccount: NylasAccount,\n isBadOverwrite: boolean\n ): UsableAccount => {\n return {\n id: nylasAccount.account_id,\n emailAddress: nylasAccount.email_address ?? nylasAccount.email,\n serviceName: this.mapNylasProviderToFullName(nylasAccount.provider),\n created: new Date(nylasAccount.linked_at * 1000),\n // The reason for isBadOverwrite is there is a super rare case that one Outlook account is used by multiple users to connect to PreCon.\n // And each of the connection have different token that might be expired/invalid.\n isBad: isBadOverwrite || this.isAccountBad(nylasAccount.sync_state)\n };\n };\n\n mapNylasProviderToFullName = (abbreviation: string) => {\n switch (abbreviation) {\n case \"eas\":\n return \"Exchange Account\";\n case \"outlook\":\n return \"Outlook Account\";\n default:\n return \"Unknown Provider Account\";\n }\n };\n\n isAccountBad = (syncState: string) => {\n switch (syncState) {\n case NylasSyncState.InvalidCredentials:\n return true;\n case NylasSyncState.SyncError:\n return true;\n case NylasSyncState.Stopped:\n return true;\n case NylasSyncState.Exception:\n return true;\n case NylasSyncState.Invalid:\n return true;\n default:\n return false;\n }\n };\n}\n","import appconfig from \"../config\";\nimport getDefaultInstance from \"./AxiosInstance\";\nimport { EstimateHistoryClient } from \"./GeneratedClients/EstimateHistoryClient\";\n\nconst baseUrl: string = appconfig.endpoints.HBINSIGHTS;\n\nexport class EstimateHistoryApi extends EstimateHistoryClient {\n constructor(accessToken: string) {\n super(baseUrl, getDefaultInstance(accessToken));\n }\n}\n","import { HBFields } from \"./components/preconhbmap/HBFields\";\nimport { useSelector } from \"react-redux\";\nimport { getEstimatesExtendedSchemaFieldLabels } from \"./selectors\";\nimport { determineHBFieldKeyForLabelKey } from \"modules/estimates/utils\";\nimport { useMemo } from \"react\";\n\nexport const useHBFields = () => {\n const fieldLabels = useSelector(getEstimatesExtendedSchemaFieldLabels);\n const hbFieldsWithLabels = useMemo(() => {\n return HBFields.map(section => {\n const currentSectionOptions = [...section.options];\n return {\n ...section,\n options: currentSectionOptions.map(option => {\n const mappedKey = determineHBFieldKeyForLabelKey(option.value);\n const label =\n fieldLabels?.[`values.filters.${mappedKey}`] ?? option.label;\n return {\n ...option,\n label\n };\n })\n };\n });\n }, [fieldLabels]);\n return hbFieldsWithLabels;\n};\n","import React from \"react\";\nimport { Tooltip } from \"hcss-components\";\nimport { strings } from \"localization\";\n\nexport const FullProjectTrackingOnlyTooltip = (\n \n {strings.schemas.setup.fullProjectTrackingOnly}\n \n);\n","import numeral from \"numeral\";\nimport moment from \"moment\";\nimport { Timestamp } from \"firebase/firestore\";\nimport { getFieldValueAsArray, sortValues } from \"core\";\nimport { CompanyFieldData } from \"modules/schemas/components/fields/CompanyInput\";\nimport { IContactFieldData as ContactFieldData } from \"modules/contacts/interfaces/IContactFieldData\";\nimport { isString } from \"lodash-es\";\nimport { isYearIn100Range } from \"modules/schemas/components/filters/dateTimeUtils\";\n\nexport const formatNumber = (num: number, decimals = 2): string => {\n return numeral(num).format(`0,0.${\"0\".repeat(decimals)}`);\n};\nexport const formatNumberFixed = (num: number, decimals = 2): string => {\n const re = new RegExp(\"^-?\\\\d+(?:.\\\\d{0,\" + (decimals || -1) + \"})?\");\n const match = re.exec(num.toString());\n const fixed = match ? match[0] : NaN;\n return formatNumber(Number(fixed), decimals);\n};\nexport const formatBoolean = (val: boolean): string => {\n return val ? \"✔️\" : \"❌\";\n};\n\nexport const formatPercent = (num: number | string, decimals = 2): string => {\n return numeral(num).format(`0,0.${\"0\".repeat(decimals)}%`);\n};\n\nexport const formatCurrency = (num: number, decimals = 2) => {\n return numeral(num).format(`$0,0.${\"0\".repeat(decimals)}`);\n};\n\nexport const formatCurrencyTruncate = (num: number, decimals = 2): string => {\n const re = new RegExp(\"^-?\\\\d+(?:.\\\\d{0,\" + (decimals || -1) + \"})?\");\n const match = re.exec(num.toString());\n const fixed = match ? match[0] : NaN;\n return formatCurrency(Number(fixed), decimals);\n};\n\nexport const formatDate = (\n date: string | Date | Timestamp | undefined | null,\n accountForTimezone?: boolean\n): string => {\n if (!date) {\n return \"\";\n }\n\n const d =\n typeof date === \"string\"\n ? new Date(date)\n : date.hasOwnProperty(\"nanoseconds\")\n ? (date as Timestamp).toDate()\n : date;\n\n if (accountForTimezone) {\n return moment(d).format(\"L\");\n }\n\n /* .utc() is included here because we only want the date, but the JS Date\n * representation automatically includes time and (by consequence) timezone\n * information. In the case where accountForTimezone is false/undefined, the\n * caller wants a timezone-agnostic date, such as for a bid's due date. */\n return moment(d).utc().format(\"L\");\n};\n\nexport const formatTime = (date: Date | Timestamp | undefined): string => {\n if (!date) {\n return \"\";\n }\n\n const d = date.hasOwnProperty(\"nanoseconds\")\n ? (date as Timestamp).toDate()\n : date;\n return moment(d).format(\"LT\");\n};\n\nexport const formatDateTime = (\n date: string | Date | Timestamp | undefined,\n split?: boolean\n): string => {\n if (!date) {\n return \"\";\n }\n\n const d =\n typeof date === \"string\"\n ? new Date(date)\n : date.hasOwnProperty(\"nanoseconds\")\n ? (date as Timestamp).toDate()\n : date;\n return split ? moment(d).format(\"L[\\n]LT\") : moment(d).format(\"L LT\");\n};\n\nexport const parseDate = (stringValue: string): Date | null => {\n if (isNaN(new Date(stringValue).valueOf())) return null;\n if (!isYearIn100Range(new Date(stringValue))) return new Date(stringValue);\n const dateValue = moment(stringValue, \"L LT\");\n if (dateValue.isValid()) {\n if (dateValue.hour() === 0 && !stringValue.toLowerCase().includes(\"a\")) {\n dateValue.set(\"hour\", 12);\n }\n\n return dateValue.toDate();\n }\n return null;\n};\n\n// Tries to parse common phone number format\n// If the attempt fails, return the original string\n// If more advanced parsing is needed see libphonenumber from google.\n// Format func was inconsisent in saving/display phone #s. Will decide how to handle in the future\nexport const formatPhoneNumber = (num: string) => {\n // const cleaned = (\"\" + num).replace(/\\D/g, \"\");\n // const match = cleaned.match(/^(1|)?(\\d{3})(\\d{3})(\\d{4})$/);\n\n // if (match) {\n // return [\"(\", match[2], \") \", match[3], \"-\", match[4]].join(\"\");\n // }\n\n return num;\n};\n\nexport const formatString = function (value: string, ...args: string[]) {\n return value.replace(/{(\\d+)}/g, (match, number) =>\n args[number] === undefined ? match : args[number]\n );\n};\n\nexport const formatFirstNameLastName = (\n firstName: string | undefined,\n lastName: string | undefined\n) => {\n return `${firstName || \"\"}${firstName && lastName ? \" \" : \"\"}${\n lastName || \"\"\n }`;\n};\n\nexport const sortLatLong = (\n a: { lat: number; long: number } | null,\n b: { lat: number; long: number } | null\n) => {\n if (!a) {\n if (!b) return 0;\n return -1;\n }\n if (!b) {\n return 1;\n }\n if (a.lat > b.lat) return 1;\n if (a.lat < b.lat) return -1;\n if (a.long > b.long) return 1;\n if (a.long < b.long) return -1;\n return 0;\n};\nexport const sortCompany = (\n a: CompanyFieldData | CompanyFieldData[],\n b: CompanyFieldData | CompanyFieldData[]\n) => {\n const aCompanyFieldDisplay = formatCompanyField(a);\n const bCompanyFieldDisplay = formatCompanyField(b);\n if (!aCompanyFieldDisplay) {\n if (!bCompanyFieldDisplay) return 0;\n return -1;\n }\n if (!bCompanyFieldDisplay) return 1;\n\n return aCompanyFieldDisplay.localeCompare(bCompanyFieldDisplay);\n};\nexport const sortContact = (\n a: ContactFieldData | ContactFieldData[],\n b: ContactFieldData | ContactFieldData[]\n) => {\n const aContactFieldDisplay = formatContactField(a);\n const bContactFieldDisplay = formatContactField(b);\n\n if (!aContactFieldDisplay) {\n if (!bContactFieldDisplay) return 0;\n return -1;\n }\n if (!bContactFieldDisplay) return 1;\n\n return aContactFieldDisplay.localeCompare(bContactFieldDisplay);\n};\n\nexport const formatLatLong = (\n coords: { lat: number; long: number } | string | null\n) => {\n if (isString(coords)) {\n return coords;\n }\n\n if (!coords?.lat && !coords?.long) return \"\";\n return `${coords.lat}, ${coords.long}`;\n};\n\nexport const formatCompanyField = (\n company: CompanyFieldData | CompanyFieldData[]\n): string => {\n if (!company) return \"\";\n return Array.isArray(company)\n ? company.map(c => c.code).join(\", \")\n : company.code;\n};\n\nexport const formatContactField = (\n contact: ContactFieldData | ContactFieldData[]\n): string => {\n if (!contact) return \"\";\n return Array.isArray(contact)\n ? contact\n .map(c => `${c.firstName} ${c.lastName} [${c.companyName}]`)\n .join(\", \")\n : `${contact.firstName} ${contact.lastName} [${contact.companyName}]`;\n};\n\nexport const formatHJJobField = (job: any): string => {\n if (!job) return \"\";\n return job;\n};\n\nexport const getSortMultiSelectFn = (config: any) => {\n return (a, b) => {\n if (!a) {\n if (!b) return 0;\n return -1;\n }\n if (!b) {\n return 1;\n }\n\n const sortedA = sortValues(\n getFieldValueAsArray(a),\n config.listValues,\n config.customSort\n );\n const sortedB = sortValues(\n getFieldValueAsArray(b),\n config.listValues,\n config.customSort\n );\n\n // if alphabetical sort\n if (!config.customSort) {\n const val1 = sortedA.join(\", \");\n const val2 = sortedB.join(\", \");\n return val1.toLowerCase() < val2.toLowerCase() ? -1 : 1;\n }\n\n // if custom sort we need to respect the custom sort order\n const newA = sortedA;\n const newB = sortedB;\n\n const maxItems = Math.max(newA.length, newB.length);\n for (let i = 0; i < maxItems; i++) {\n const aIndex = config.listValues.findIndex(c => c.value === newA[i]);\n const bIndex = config.listValues.findIndex(c => c.value === newB[i]);\n if (aIndex === -1) {\n if (bIndex === -1)\n return newA[i] &&\n newB[i] &&\n newA[i].toLowerCase() < newB[i].toLowerCase()\n ? -1\n : 1;\n return 1;\n }\n if (bIndex === -1) return -1;\n if (aIndex === bIndex) continue;\n\n return aIndex < bIndex ? -1 : 1;\n }\n\n return 0;\n };\n};\n\nexport const getFormatMultiSelect = (config: any) => {\n return (values: string[] | null) => {\n if (!values) return \"\";\n if (typeof values === \"string\") return values; // values may potentially be a string when converting from single selection -> multi selection\n return sortValues(\n getFieldValueAsArray(values),\n config.listValues,\n config.customSort\n ).join(\", \");\n };\n};\n\nexport const capitalizeWords = (str: string): string => {\n return str\n .split(\" \")\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n","import Tooltip, { TooltipProps } from \"@mui/material/Tooltip\";\nimport React from \"react\";\nimport { createGlobalStyle } from \"styled-components\";\n\nconst TooltipStyling = createGlobalStyle<{ $maxWidth?: string }>`\n.styled-material-tooltip__popper {\n max-width: ${props => props.$maxWidth || \"475px !important\"};\n min-width: 200px !important;\n}\n .styled-material-tooltip {\n max-width: none!important ;\n background: #FFF !important;\n box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);\n margin: 0!important;\n padding: 0 !important;\n border-radius: 0 !important;\n\n color: #000 !important;\n font-family: Inter !important;\n font-size: 12px !important;\n font-style: normal !important;\n font-weight: 400 !important;\n line-height: normal !important;\n\n &__arrow {\n background: #FFF !important;\n box-shadow: 0px 4px 4px 0px rgba(0, 0, 0, 0.25);\n \n }\n &__header {\n background: #ECECEC;\n padding: 5px 12px;\n width: 100%;\n color: #000;\n }\n\n &__body {\n padding: 5px 12px;\n }\n }\n\n .styled-material-tooltip-arrow {\n &::before {\n background: #FFF !important;\n box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.25);\n }\n }\n`;\n\nexport interface StyledMaterialTooltipProps extends TooltipProps {\n title: string;\n hideHeader?: boolean;\n body: React.ReactNode | React.ReactNode[] | string;\n bodyStyles?: React.CSSProperties;\n maxWidth?: string;\n}\nexport const StyledMaterialTooltip = (props: StyledMaterialTooltipProps) => {\n return (\n <>\n \n \n {!props.hideHeader && (\n
\n {props.title}\n
\n )}\n \n {props.body}\n \n \n }\n arrow\n classes={{\n popper: \"styled-material-tooltip__popper\",\n popperInteractive: \"styled-material-tooltip__popper-interactive\",\n popperArrow: \"styled-material-tooltip__popper__arrow\",\n popperClose: \"styled-material-tooltip__close\",\n tooltip: \"styled-material-tooltip\",\n tooltipArrow: \"styled-material-tooltip__arrow\",\n arrow: \"styled-material-tooltip-arrow\",\n touch: \"styled-material-tooltip-touch\"\n }}\n >\n {props.children}\n \n \n );\n};\n","export enum HeavyBidFieldType {\n string,\n date,\n number,\n integer,\n latitudeLongitude\n}\n\nexport interface HeavyBidFieldListGroup {\n label: string;\n options: HeavyBidFieldListItem[];\n}\n\nexport interface HeavyBidFieldListItem {\n value: string;\n label: string;\n group: string;\n type: HeavyBidFieldType;\n}\n\nexport const HBFields: HeavyBidFieldListGroup[] = [\n {\n label: \"Estimate Info\",\n options: [\n {\n value: \"estimateName\",\n label: \"Estimate Name\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"estimateDescription\",\n label: \"Estimate Description\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"projectName\",\n label: \"Project Name\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n // { value: \"estimateCode\", label: \"Estimate Code\", group: 'Estimate Info', type: HeavyBidFieldType.string } -- Business Decision to not allow this yet\n {\n value: \"projectCode\",\n label: \"Project #\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"status\",\n label: \"Status\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"state\",\n label: \"State\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"owner\",\n label: \"Owner\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"jobNotes\",\n label: \"Job Notes\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"reviewDate\",\n label: \"Review Date\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.date\n },\n {\n value: \"bidDate\",\n label: \"Bid Date\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.date\n },\n {\n value: \"startDate\",\n label: \"Start Date\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.date\n },\n {\n value: \"estimator\",\n label: \"Estimator\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"typeOfWork\",\n label: \"Type Of Work\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"engineer\",\n label: \"Engineer\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"addendumNumber\",\n label: \"Addendum Number\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.integer\n },\n {\n value: \"location\",\n label: \"Location\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"latitudeLongitude\",\n label: \"Latitude / Longitude\",\n group: \"Estimate Info\",\n type: HeavyBidFieldType.latitudeLongitude\n }\n ]\n },\n {\n label: \"Tags \",\n options: [\n {\n value: \"estimateFilter1\",\n label: \"Tag 1\",\n group: \"Tags\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"estimateFilter2\",\n label: \"Tag 2\",\n group: \"Tags\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"estimateFilter3\",\n label: \"Tag 3\",\n group: \"Tags\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"estimateFilter4\",\n label: \"Tag 4\",\n group: \"Tags\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"estimateFilter5\",\n label: \"Tag 5\",\n group: \"Tags\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"estimateFilter6\",\n label: \"Tag 6\",\n group: \"Tags\",\n type: HeavyBidFieldType.string\n }\n ]\n },\n {\n label: \"User Defined Dates\",\n options: [\n {\n value: \"userDate1\",\n label: \"User Defined Date 1\",\n group: \"User Defined Dates\",\n type: HeavyBidFieldType.date\n },\n {\n value: \"userDate2\",\n label: \"User Defined Date 2\",\n group: \"User Defined Dates\",\n type: HeavyBidFieldType.date\n },\n {\n value: \"userDate3\",\n label: \"User Defined Date 3\",\n group: \"User Defined Dates\",\n type: HeavyBidFieldType.date\n },\n {\n value: \"userDate4\",\n label: \"User Defined Date 4\",\n group: \"User Defined Dates\",\n type: HeavyBidFieldType.date\n },\n {\n value: \"userDate5\",\n label: \"User Defined Date 5\",\n group: \"User Defined Dates\",\n type: HeavyBidFieldType.date\n }\n ]\n },\n {\n label: \"User Defined Integers\",\n options: [\n {\n value: \"userInteger1\",\n label: \"User Defined Integer 1\",\n group: \"User Defined Integers\",\n type: HeavyBidFieldType.integer\n },\n {\n value: \"userInteger2\",\n label: \"User Defined Integer 2\",\n group: \"User Defined Integers\",\n type: HeavyBidFieldType.integer\n },\n {\n value: \"userInteger3\",\n label: \"User Defined Integer 3\",\n group: \"User Defined Integers\",\n type: HeavyBidFieldType.integer\n },\n {\n value: \"userInteger4\",\n label: \"User Defined Integer 4\",\n group: \"User Defined Integers\",\n type: HeavyBidFieldType.integer\n },\n {\n value: \"userInteger5\",\n label: \"User Defined Integer 5\",\n group: \"User Defined Integers\",\n type: HeavyBidFieldType.integer\n }\n ]\n },\n {\n label: \"User Defined Numbers\",\n options: [\n {\n value: \"userNumber1\",\n label: \"User Defined Number 1\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber2\",\n label: \"User Defined Number 2\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber3\",\n label: \"User Defined Number 3\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber4\",\n label: \"User Defined Number 4\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber5\",\n label: \"User Defined Number 5\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber6\",\n label: \"User Defined Number 6\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber7\",\n label: \"User Defined Number 7\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber8\",\n label: \"User Defined Number 8\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber9\",\n label: \"User Defined Number 9\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber10\",\n label: \"User Defined Number 10\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber11\",\n label: \"User Defined Number 11\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber12\",\n label: \"User Defined Number 12\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber13\",\n label: \"User Defined Number 13\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber14\",\n label: \"User Defined Number 14\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber15\",\n label: \"User Defined Number 15\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber16\",\n label: \"User Defined Number 16\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber17\",\n label: \"User Defined Number 17\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber18\",\n label: \"User Defined Number 18\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber19\",\n label: \"User Defined Number 19\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n },\n {\n value: \"userNumber20\",\n label: \"User Defined Number 20\",\n group: \"User Defined Numbers\",\n type: HeavyBidFieldType.number\n }\n ]\n },\n\n {\n label: \"User Defined Text\",\n options: [\n {\n value: \"userAscii1\",\n label: \"User Defined Text 1\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii2\",\n label: \"User Defined Text 2\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii3\",\n label: \"User Defined Text 3\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii4\",\n label: \"User Defined Text 4\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii5\",\n label: \"User Defined Text 5\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii6\",\n label: \"User Defined Text 6\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii7\",\n label: \"User Defined Text 7\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii8\",\n label: \"User Defined Text 8\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii9\",\n label: \"User Defined Text 9\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii10\",\n label: \"User Defined Text 10\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii11\",\n label: \"User Defined Text 11\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii12\",\n label: \"User Defined Text 12\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii13\",\n label: \"User Defined Text 13\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii14\",\n label: \"User Defined Text 14\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii15\",\n label: \"User Defined Text 15\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii16\",\n label: \"User Defined Text 16\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii17\",\n label: \"User Defined Text 17\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii18\",\n label: \"User Defined Text 18\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii19\",\n label: \"User Defined Text 19\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n },\n {\n value: \"userAscii20\",\n label: \"User Defined Text 20\",\n group: \"User Defined Text\",\n type: HeavyBidFieldType.string\n }\n ]\n }\n // Not available to users in HeavyBid\n // {\n // label: 'User Defined Percent', options: [\n // { value: \"userPerc1\", label: \"User Defined Percent 1\", group: 'User Defined Percent', type: HeavyBidFieldType.number },\n // { value: \"userPerc2\", label: \"User Defined Percent 2\", group: 'User Defined Percent' , type: HeavyBidFieldType.number}],\n // },\n // {\n // label: 'User Defined Flag', options: [\n // { value: \"userFlag1\", label: \"User Defined Flag 1\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag2\", label: \"User Defined Flag 2\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag3\", label: \"User Defined Flag 3\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag4\", label: \"User Defined Flag 4\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag5\", label: \"User Defined Flag 5\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag6\", label: \"User Defined Flag 6\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag7\", label: \"User Defined Flag 7\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag8\", label: \"User Defined Flag 8\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag9\", label: \"User Defined Flag 9\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag10\", label: \"User Defined Flag 10\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag11\", label: \"User Defined Flag 11\", group: 'User Defined Flag', type: HeavyBidFieldType.string },\n // { value: \"userFlag12\", label: \"User Defined Flag 12\", group: 'User Defined Flag' , type: HeavyBidFieldType.string}],\n // },\n // {\n // label: 'User Defined Vendor', options: [\n // { value: \"userVendor1\", label: \"User Defined Vendor 1\", group: 'User Defined Vendor', type: HeavyBidFieldType.string },\n // { value: \"userVendor2\", label: \"User Defined Vendor 2\", group: 'User Defined Vendor', type: HeavyBidFieldType.string },\n // { value: \"userVendor3\", label: \"User Defined Vendor 3\", group: 'User Defined Vendor', type: HeavyBidFieldType.string },\n // { value: \"userVendor4\", label: \"User Defined Vendor 4\", group: 'User Defined Vendor', type: HeavyBidFieldType.string },\n // { value: \"userVendor5\", label: \"User Defined Vendor 5\", group: 'User Defined Vendor', type: HeavyBidFieldType.string }]\n // }\n];\n","import React from \"react\";\nimport { OAuthConfigurationPanel as HOAuthConfigurationPanel } from \"hcss-outbox\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { notify } from \"hcss-components\";\nimport { OAuthInfoModel } from \"hcss-outbox/dist/types/models\";\nimport config from \"config\";\nimport { selectors, actions } from \"../state\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\nimport { useHcssUser } from \"modules/account\";\n\nexport const OAuthConfigurationPanel = () => {\n const dispatch = useDispatch();\n const isActive = useSelector(selectors.getEmailPanelActive);\n const onHide = () => dispatch(actions.toggleEmailPanel());\n const currentUser = useHcssUser();\n const handleUpdate = (settings: OAuthInfoModel) => {\n return;\n };\n\n const handleGetUserAuthInfoFailed = (error?: any) => {\n console.error(error);\n notify(\n \"danger\",\n strings.users.oAuthConfig.getUserError.title,\n strings.users.oAuthConfig.getUserError.message\n );\n };\n\n const handleSendTestMessageSuccess = () => {\n notify(\n \"success\",\n strings.users.oAuthConfig.testMessageSuccess.title,\n strings.formatString(\n strings.users.oAuthConfig.testMessageSuccess.message,\n currentUser.email\n ) as string\n );\n };\n\n const handleSendTestMessageFailure = (error?: any) => {\n console.error(error);\n notify(\n \"danger\",\n strings.users.oAuthConfig.testMessageError.title,\n strings.users.oAuthConfig.testMessageError.message\n );\n };\n\n if (!currentUser?.idsrvAccessToken) {\n return null;\n }\n\n return (\n \n currentUser.idsrvAccessToken!}\n />\n \n );\n};\n\nconst StyledOAuthConfigurationPanel = styled.div`\n & .modal-panel.email-settings-panel {\n z-index: 2002;\n }\n`;\n","// tslint:disable:max-classes-per-file\n\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport { debounce } from \"lodash-es\";\nimport { ExpandableContentStatus } from \"../../models/enums\";\n\nexport interface ModalPanelHeaderProps {\n onHide: (event: any) => void;\n panelTitle: React.ReactNode;\n}\nexport class ModalPanelHeader extends React.PureComponent<\n ModalPanelHeaderProps\n> {\n handleHidePanelRequested = (event: any) => {\n this.props.onHide(event);\n };\n\n render() {\n return (\n \n \n \n \n \n {this.props.panelTitle}\n \n \n );\n }\n}\n\nexport class ModalPanelBody extends React.PureComponent {\n render() {\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nexport class ModalPanelFooter extends React.PureComponent {\n render() {\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nexport interface ModalPanelProps {\n className?: string;\n isActive: boolean;\n onHide: () => void;\n}\nexport interface ModalPanelState {\n panelStatus: ExpandableContentStatus;\n}\nexport class ModalPanel extends React.PureComponent<\n ModalPanelProps,\n ModalPanelState\n> {\n static Header = ModalPanelHeader;\n static Body = ModalPanelBody;\n static Footer = ModalPanelFooter;\n\n readonly state = {\n panelStatus: ExpandableContentStatus.collapsed\n };\n\n componentDidUpdate(prevProps: ModalPanelProps, prevState: ModalPanelState) {\n if (prevProps.isActive !== this.props.isActive) {\n document.addEventListener(\"keydown\", this.handleKeyPressed, false);\n if (this.props.isActive) {\n this.setState(\n { panelStatus: ExpandableContentStatus.expanding },\n debounce(\n () =>\n this.setState({ panelStatus: ExpandableContentStatus.expanded }),\n 50\n )\n );\n } else {\n document.removeEventListener(\"keydown\", this.handleKeyPressed, false);\n this.setState(\n { panelStatus: ExpandableContentStatus.collapsing },\n debounce(\n () =>\n this.setState({ panelStatus: ExpandableContentStatus.collapsed }),\n 425\n )\n );\n }\n }\n }\n\n handleHidePanelRequested = () => {\n this.props.onHide();\n };\n\n handleKeyPressed = (event: any) => {\n if (event.key === \"Escape\") {\n this.handleHidePanelRequested();\n }\n };\n\n render() {\n return (\n this.state.panelStatus !== ExpandableContentStatus.collapsed && (\n \n \n \n {this.props.children}\n \n \n )\n );\n }\n}\n\nexport const StyledModalPanel = styled(\"div\")`\n position: absolute;\n margin: 0;\n padding: 0;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n\n &[data-panel-status=\"expanding\"] {\n & > .modal-panel-overlay-screen {\n opacity: 0;\n }\n & > .modal-panel-content {\n right: -500px;\n }\n }\n &[data-panel-status=\"expanded\"] {\n .modal-panel-overlay-screen {\n opacity: 1;\n }\n & > .modal-panel-content {\n right: 0;\n }\n }\n &[data-panel-status=\"collapsing\"] {\n .modal-panel-overlay-screen {\n opacity: 0;\n }\n & > .modal-panel-content {\n right: -500px;\n }\n }\n &[data-panel-status=\"collapsed\"] {\n .modal-panel-overlay-screen {\n opacity: 0;\n }\n & > .modal-panel-content {\n right: -500px;\n }\n }\n`;\n\nconst StyledModalPanelOverlayScreen = styled(\"div\")`\n position: absolute;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n z-index: 1090;\n transition: 0.3s;\n`;\n\nconst StyledModalPanelContent = styled(\"div\")`\n display: flex;\n flex-wrap: nowrap;\n flex-direction: column;\n position: absolute;\n width: 480px;\n top: 0;\n height: 100%;\n background: #ffffff;\n box-shadow: 0 0 20px -5px #000000;\n z-index: 1100;\n transition: 0.4s;\n`;\n\nconst StyledModalPanelHeader = styled(\"div\")`\n position: relative;\n padding: 36px 20px 16px 20px;\n background: #f6f6f6;\n`;\n\nconst StyledModalPanelCloseButton = styled(\"div\")`\n display: inline-block;\n position: absolute;\n top: 36px;\n right: 20px;\n font-size: 20px;\n color: #707070;\n line-height: 24px;\n vertical-align: middle;\n cursor: pointer;\n transition: 0.2s;\n\n &:hover {\n color: #1e1e1e;\n }\n`;\n\nconst StyledModalPanelTitle = styled(\"h3\")`\n display: inline-block;\n font-size: 20px;\n font-weight: 700;\n vertical-align: middle;\n margin: 0;\n`;\n\nconst StyledModalPanelBody = styled(\"div\")`\n height: 100px;\n flex-grow: 1;\n margin-bottom: 16px;\n padding: 0 20px;\n overflow: auto;\n`;\n\nconst StyledModalPanelFooter = styled(\"div\")`\n width: 100%;\n margin-bottom: 24px;\n padding: 0 20px 20px 20px;\n background: #ffffff;\n text-align: center;\n`;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\nexport interface CalendarSubscriptionCardProps {\n templateName: string;\n OptionsButton: ReactNode;\n CardContent?: ReactNode;\n}\n\nexport const CalendarSubscriptionCard: React.FC = ({\n templateName,\n OptionsButton,\n CardContent\n}) => {\n return (\n \n \n \n {OptionsButton}\n \n {CardContent}\n \n );\n};\n\nconst LinkContainer = styled.div`\n padding: 24px;\n margin: 20px 12px;\n background-color: #f6f6f6;\n border-radius: 12px;\n`;\n\nconst LinkHeader = styled.div`\n .template-wrap {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 270px;\n }\n\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\n\nimport { Button, MenuItem, DropdownButton } from \"hcss-components\";\nimport { useAuthorization } from \"../../account\";\n\nexport interface InactiveOptionsButtonProps {\n templateId: string;\n onCreateReadonlyLink: (viewId: string) => void;\n onCreateNylasLink: (viewId: string) => void;\n}\n\nexport const InactiveOptionsButton: React.FC = ({\n templateId,\n onCreateReadonlyLink,\n onCreateNylasLink\n}) => {\n const { canAccessHcssConnect } = useAuthorization();\n\n return (\n <>\n {canAccessHcssConnect && (\n \n {\n onCreateReadonlyLink(templateId);\n }}\n >\n {strings.calendars.card.createReadonlyLink}\n \n {\n onCreateNylasLink(templateId);\n }}\n >\n {strings.calendars.card.createNylasLinkk}\n \n \n )}\n \n );\n};\n\nconst CreateLinkButton = styled(DropdownButton)`\n font-size: 1.15rem;\n font-weight: 800;\n text-transform: uppercase;\n letter-spacing: 0.06rem;\n box-shadow: none;\n padding: 5px 20px;\n\n &:hover:not(:disabled) {\n box-shadow: none;\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport ConfirmDelete from \"core/components/modals/ConfirmDelete\";\nimport { Calendar } from \"api\";\nimport { WithId } from \"core\";\nimport { useState } from \"react\";\nimport { strings } from \"localization\";\n\nimport {\n Button,\n ConcreteColors,\n Icon,\n MenuItem,\n DropdownButton\n} from \"hcss-components\";\n\nconst { red400, blue400, gray600 } = ConcreteColors;\n\nexport interface ActiveOptionsButtonProps {\n templateId: string;\n readonlyCalendar?: WithId;\n nylasCalendar?: WithId;\n onDelete: (calendarId: string) => void;\n onCreateReadonlyCalendar: (viewId: string) => void;\n onCreateNylasLink: (viewId: string) => void;\n}\n\nexport const ActiveOptionsButton: React.FC = ({\n templateId,\n readonlyCalendar,\n nylasCalendar,\n onDelete,\n onCreateReadonlyCalendar,\n onCreateNylasLink\n}) => {\n const [showReadonlyDeleteModal, setShowReadonlyDeleteModal] = useState(false);\n const [showNylasDeleteModal, setShowNylasDeleteModal] = useState(false);\n const [showGenerateReadonlyModal, setShowGenerateReadonlyModal] = useState(\n false\n );\n const readonlyLinkExists = readonlyCalendar !== undefined;\n const nylaslinkExists = nylasCalendar !== undefined;\n // @ts-ignore\n return (\n <>\n \n {!nylaslinkExists && (\n onCreateNylasLink(templateId)}>\n {strings.calendars.card.createNylasLinkk}\n \n )}\n {nylaslinkExists && (\n setShowNylasDeleteModal(true)}>\n {strings.calendars.card.deleteNylasLink}\n \n )}\n {!readonlyLinkExists && (\n onCreateReadonlyCalendar(templateId)}>\n {strings.calendars.card.createReadonlyLink}\n \n )}\n {readonlyLinkExists && (\n setShowReadonlyDeleteModal(true)}>\n {strings.calendars.card.deleteReadonlyLink}\n \n )}\n \n {readonlyCalendar && (\n setShowReadonlyDeleteModal(false)}\n title={strings.calendars.card.deleteTitle}\n style={{ zIndex: 9999 }}\n footer={\n
\n {\n onDelete(readonlyCalendar.id);\n setShowReadonlyDeleteModal(false);\n }}\n hcssStyle=\"Theme\"\n >\n \n  {strings.calendars.card.continue}\n \n setShowReadonlyDeleteModal(false)}\n hcssStyle=\"ThemeInverted\"\n >\n \n  {strings.calendars.card.cancel}\n \n
\n }\n >\n

{strings.calendars.card.deleteReadonlyConfirmation}

\n \n )}\n {nylasCalendar && (\n setShowNylasDeleteModal(false)}\n title={strings.calendars.card.deleteTitle}\n style={{ zIndex: 9999 }}\n footer={\n
\n {\n onDelete(nylasCalendar.id);\n setShowNylasDeleteModal(false);\n }}\n hcssStyle=\"Theme\"\n >\n \n  {strings.calendars.card.continue}\n \n setShowNylasDeleteModal(false)}\n hcssStyle=\"ThemeInverted\"\n >\n \n  {strings.calendars.card.cancel}\n \n
\n }\n >\n

{strings.calendars.card.deleteHcssConnectConfirmation}

\n \n )}\n setShowGenerateReadonlyModal(false)}\n title={strings.calendars.card.createLink}\n style={{ zIndex: 9999 }}\n footer={\n
\n {\n onCreateReadonlyCalendar(templateId);\n setShowGenerateReadonlyModal(false);\n }}\n hcssStyle=\"Theme\"\n >\n \n  {strings.calendars.card.continue}\n \n setShowGenerateReadonlyModal(false)}\n hcssStyle=\"ThemeInverted\"\n >\n \n  {strings.calendars.card.cancel}\n \n
\n }\n >\n

{strings.calendars.card.deleteReadonlyWarning}

\n

{strings.calendars.card.deleteNewReadonlyLink}

\n \n \n );\n};\n\nconst OptionsButton = styled(DropdownButton)`\n font-size: 1.15rem;\n font-weight: 800;\n text-transform: uppercase;\n letter-spacing: 0.06rem;\n box-shadow: none;\n padding: 5px 20px;\n color: ${gray600};\n\n &:hover:not(:disabled) {\n box-shadow: none;\n }\n`;\n","import React from \"react\";\nimport Clipboard from \"react-clipboard.js\";\nimport styled from \"styled-components\";\nimport config from \"config\";\nimport moment from \"moment\";\nimport { Calendar } from \"api\";\nimport { WithId } from \"core\";\nimport { strings } from \"localization\";\n\nimport {\n FormControl,\n Icon,\n InputGroup,\n notify,\n OverlayTrigger,\n Tooltip\n} from \"hcss-components\";\n\nexport interface ReadOnlyCalendarContentProps {\n templateName: string;\n readonlyCalendar?: WithId;\n}\n\nexport const ReadOnlyCalendarContent: React.FC = ({\n templateName,\n readonlyCalendar\n}) => {\n const link = readonlyCalendar\n ? `${config.endpoints.PRECON}/api/cal/${readonlyCalendar.token}`\n : \"\";\n\n const handleCopy = () => {\n notify(\n \"info\",\n strings.calendars.card.copy.title,\n strings.formatString(\n strings.calendars.card.copy.message,\n templateName\n ) as string\n );\n };\n\n const handleFocus = (event: any) => event.target.select();\n\n return (\n <>\n \n
\n {strings.calendars.card.readlonlyLinkLabel}\n
\n \n \n\n \n \n \n \n
\n {readonlyCalendar && (\n \n {strings.calendars.card.syncWarning}\n \n }\n placement=\"left\"\n >\n \n \n {strings.formatString(\n strings.calendars.card.lastSync,\n readonlyCalendar.lastPing\n ? moment(readonlyCalendar.lastPing).format(\"l LT\")\n : strings.calendars.card.none\n )}\n \n \n )}\n \n );\n};\n\nconst ClipboardButton = styled(Clipboard)<{ disabled?: boolean }>`\n cursor: ${props => (props.disabled ? \"not-allowed\" : \"pointer\")};\n`;\n\nconst LinkFormControl = styled(FormControl)`\n background-color: #fff;\n`;\n\nconst LastSync = styled.div`\n margin-top: 0;\n margin-left: 5px;\n`;\n\nconst ContentWrapper = styled.div`\n margin: 15px 0 10px 5px;\n\n div.fieldTitle {\n margin: 5px 0 5px 0;\n font-weight: bold;\n font-size: 14px;\n }\n`;\n","import React, { useCallback, useState } from \"react\";\nimport AsyncSelect from \"react-select\";\nimport { Props as ReactSelectProps } from \"react-select\";\nimport { WithId } from \"../../../core/models\";\nimport { Calendar } from \"../../../api\";\nimport styled from \"styled-components\";\nimport { useDispatch } from \"react-redux\";\nimport { actions } from \"../state\";\nimport ConfirmDelete from \"../../../core/components/modals/ConfirmDelete\";\nimport { Icon, Button } from \"hcss-components\";\nimport { strings } from \"localization\";\nimport { useHcssConnectContext } from \"core/services/hcss-connect\";\nimport { debounce } from \"lodash-es\";\nimport { ListLoadingOverlay } from \"core\";\nimport { track } from \"logging\";\nimport { NylasCalendar } from \"core/services/hcss-connect/models/NylasCalendar\";\n\nexport interface HcssConnectSelectProps {\n viewId: string;\n calendars: NylasCalendar[];\n selectedCalendar?: WithId;\n}\n\n// @ts-ignore\nconst formatGroupLabel = data => (\n
\n {data.label}\n {data.options.length}\n
\n);\n\nexport const NylasSelect = ({\n viewId,\n calendars,\n selectedCalendar\n}: HcssConnectSelectProps) => {\n const {\n loadNylasCalendars,\n nylasAccounts,\n loading\n } = useHcssConnectContext();\n const [showReplaceModal, setShowReplaceModal] = useState(false);\n const [newCalId, setNewCalId] = useState();\n const options: GroupedOptions[] = [];\n const dispatch = useDispatch();\n\n calendars\n .filter(\n c =>\n c.name.toLowerCase() !== \"birthdays\" &&\n c.name.toLowerCase() !== \"united states holidays\" &&\n !c.read_only\n )\n .forEach(c => {\n const accountForCal = nylasAccounts.find(\n nylasAccount => nylasAccount.id === c.account_id\n );\n const groupLabel = `${accountForCal?.serviceName}: ${accountForCal?.emailAddress}`;\n let group = options.find(o => o.label === groupLabel);\n if (!group) {\n group = { label: groupLabel, options: [] };\n options.push(group);\n }\n group.options.push({ value: c.id, label: c.name ?? \"(no name)\" });\n });\n\n const selected = calendars.find(\n cal => cal.id === selectedCalendar?.calendarId\n );\n\n const selectedOption: ReactSelectProps[\"value\"] = selected\n ? { value: selected.id, label: selected.name }\n : undefined;\n\n const handleChange = (e: any) => {\n const calId = e?.value;\n if (selectedCalendar?.calendarId === calId) return;\n if (selectedCalendar?.calendarId) {\n setNewCalId(calId);\n setShowReplaceModal(true);\n } else {\n saveCalendar(calId);\n }\n };\n\n const saveCalendar = (id: string) => {\n const cal = calendars.find(c => c.id === id);\n if (cal) {\n dispatch(\n actions.saveCalendar.request({\n viewId,\n accountId: cal.account_id,\n calendarId: cal.id,\n isNylas: true\n })\n );\n track(\"CALENDAR CONNECTED\", {\n module: \"projects\",\n redux: false,\n type: \"Nylas\"\n });\n }\n };\n\n const refreshCalendars = useCallback(\n debounce(loadNylasCalendars, 5000, { leading: true }),\n []\n );\n\n return (\n <>\n \n setShowReplaceModal(false)}\n title={strings.calendars.card.createLink}\n style={{ zIndex: 9999 }}\n footer={\n
\n {\n if (newCalId) saveCalendar(newCalId);\n setShowReplaceModal(false);\n }}\n hcssStyle=\"Theme\"\n >\n \n  {strings.calendars.card.continue}\n \n setShowReplaceModal(false)}\n hcssStyle=\"ThemeInverted\"\n >\n \n  {strings.calendars.card.cancel}\n \n
\n }\n >\n

{strings.calendars.card.deleteHcssConnectWarning}

\n

{strings.calendars.card.deleteNewHcssConnectLink}

\n \n \n );\n};\n\nconst LoadingIndicator = () => {\n return ;\n};\n\ninterface GroupedOptions {\n label: string;\n options: SelectOption[];\n}\ninterface SelectOption {\n label: string;\n value: string;\n}\n\nconst groupStyles = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n marginLeft: 0,\n paddingLeft: 0\n};\nconst groupBadgeStyles = {\n backgroundColor: \"#EBECF0\",\n borderRadius: \"2em\",\n color: \"#172B4D\",\n display: \"inline-block\",\n fontSize: 12,\n lineHeight: \"1\",\n minWidth: 1,\n padding: \"0.16666666666667em 0.5em\"\n};\nconst StyledSelect = styled(AsyncSelect)`\n div.react-select__menu {\n z-index: 11;\n }\n`;\n","import React from \"react\";\nimport { Calendar } from \"api\";\nimport { Badge, WithId } from \"core\";\nimport { InputGroup } from \"hcss-components\";\nimport styled from \"styled-components\";\nimport { NylasSelect } from \"./NylasSelect\";\nimport { strings } from \"../../../localization\";\nimport { NylasCalendar } from \"core/services/hcss-connect/models/NylasCalendar\";\n\nexport interface NylasCalendarContentProps {\n viewId: string;\n nylasCalendar?: WithId;\n nylasCalendars: NylasCalendar[];\n}\n\nexport const NylasCalendarContent: React.FC = ({\n viewId,\n nylasCalendar,\n nylasCalendars\n}) => {\n return (\n <>\n \n
\n {strings.calendars.card.nylasLinkLabel}\n \n {strings.featureStatus.beta}\n \n
\n \n \n \n
\n \n );\n};\n\nconst ContentWrapper = styled.div`\n margin: 5px 0 10px 5px;\n\n div.fieldTitle {\n display: flex;\n justify-content: space-between;\n margin: 5px 0 5px 0;\n font-weight: bold;\n font-size: 14px;\n }\n`;\n","import React, { useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { View } from \"../../../api\";\nimport { selectors, actions } from \"../state\";\nimport { ModalPanel, ModalPanelProps } from \"core/components/modals/SideModal\";\nimport { ContentLoadingOverlay } from \"core/components/loaders\";\nimport { strings } from \"localization\";\nimport { CalendarSubscriptionCard } from \"./CalendarSubscriptionCard\";\nimport { InactiveOptionsButton } from \"./InactiveOptionsButton\";\nimport { ActiveOptionsButton } from \"./ActiveOptionsButton\";\nimport { ReadOnlyCalendarContent } from \"./ReadonlyCalendarContent\";\nimport { useHcssConnectContext } from \"core/services/hcss-connect\";\nimport { track } from \"logging\";\nimport { NylasCalendarContent } from \"./NylasCalendarContent\";\nimport { actions as settingsActions } from \"modules/settings\";\n\ninterface CalendarSubscribePanelProps extends ModalPanelProps {\n views?: View[];\n}\nexport const CalendarSubscribePanel = ({\n isActive,\n onHide,\n views\n}: CalendarSubscribePanelProps) => {\n const { nylasCalendars } = useHcssConnectContext();\n const dispatch = useDispatch();\n const handleDelete = (calendarId: string) => {\n dispatch(actions.deleteCalendar.request(calendarId));\n };\n\n const handleCreateReadonlyLink = (viewId: string) => {\n track(\"CALENDAR CONNECTED\", {\n module: \"projects\",\n redux: false,\n type: \"iCal\"\n });\n dispatch(\n actions.saveCalendar.request({\n viewId,\n isNylas: false\n })\n );\n };\n\n const handleCreateNylasLink = (viewId: string) => {\n dispatch(\n actions.saveCalendar.request({\n viewId,\n isNylas: true\n })\n );\n };\n\n const calendars = useSelector(selectors.getCalendarsByViewId);\n\n const loaded = useSelector(selectors.getLoaded);\n\n return (\n
\n \n \n \n {strings.calendars.subscribePanel.links}\n \n {strings.calendars.subscribePanel.visible}\n \n \n \n dispatch(settingsActions.toggleCalendarPanel())}\n >\n {strings.calendars.subscribePanel.openAccountSettingsButton}\n \n {strings.calendars.subscribePanel.openAccountSettingsAfter}\n \n \n {!loaded || !views ? (\n \n ) : (\n \n {views.map((view: View) => {\n const calendarsForView = calendars[view.id];\n const readOnlyCalendar = calendarsForView?.iCal;\n const nylasCalendar = calendarsForView?.nylas;\n return (\n \n ) : (\n \n )\n }\n CardContent={\n <>\n {nylasCalendar && (\n \n )}\n {readOnlyCalendar && (\n \n )}\n \n }\n />\n );\n })}\n \n )}\n \n \n
\n );\n};\n\nconst StyledPanel = styled(ModalPanel)`\n z-index: 2002;\n\n .modal-panel-content {\n .modal-panel-body {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: column;\n overflow: hidden;\n padding: 0;\n\n .panel-instructions {\n position: relative;\n margin: 10px 0;\n padding: 0 20px;\n margin-bottom: 20px;\n font-size: 14px;\n line-height: 22px;\n color: #1e1e1e;\n }\n }\n }\n`;\n\nconst TitleLabel = styled.div`\n padding-left: 30px;\n margin-top: 16px;\n`;\nconst OpenAccountSettingsButton = styled.button`\n background: none;\n border: none;\n padding: 0;\n color: #069;\n cursor: pointer;\n`;\n\nconst StyledDivWrapper = styled.div`\n padding-top: 20px;\n margin-left: 10px;\n margin-right: 10px;\n flex-grow: 1;\n overflow-y: auto;\n overflow-x: hidden;\n`;\n","import React, { useEffect } from \"react\";\nimport { CalendarSubscribePanel } from \"modules/calendars/components/CalendarSubscribePanel\";\nimport { selectors as viewSelectors } from \"modules/views\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport * as calendarModule from \"modules/calendars\";\n\nexport const ProjectsCalendarSubscribeModal = () => {\n const dispatch = useDispatch();\n const views = useSelector(viewSelectors.getProjectViewsSorted);\n const isActive = useSelector(calendarModule.selectors.getCalendarPanelActive);\n\n useEffect(() => {\n if (isActive) {\n dispatch(calendarModule.actions.loadCalendars.request());\n }\n }, [dispatch, isActive]);\n\n return (\n dispatch(calendarModule.actions.toggleSideModal(false))}\n views={views}\n />\n );\n};\n","import React, { useEffect, useState, ReactElement } from \"react\";\nimport styled from \"styled-components\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { actions, selectors } from \"../state\";\nimport {\n Button,\n ConcreteColors,\n Icon,\n Link,\n OverlayTrigger,\n Popover\n} from \"hcss-components\";\nimport { Box } from \"hcss-core\";\nimport moment from \"moment\";\nimport { strings } from \"../../../localization\";\nimport { ModalPanel } from \"../../../core/components/modals/SideModal\";\nimport {\n Badge,\n ContentLoadingOverlay,\n TextOverflow\n} from \"../../../core/components\";\nimport ConfirmDelete from \"../../../core/components/modals/ConfirmDelete\";\nimport {\n useHcssConnectContext,\n UsableAccount\n} from \"core/services/hcss-connect\";\nimport { selectors as calendarSelectors } from \"modules/calendars\";\n\nconst { gray600 } = ConcreteColors;\n\nexport const HcssConnectConfigurationPanel = () => {\n const {\n nylasAccounts,\n loading: calendarLoading,\n deleteNylasAccount,\n nylasCalendars,\n connectAccount\n } = useHcssConnectContext();\n const dispatch = useDispatch();\n const calendarsLoaded = useSelector(calendarSelectors.getLoaded);\n const loading = calendarLoading && !calendarsLoaded;\n const isActive = useSelector(selectors.getCalendarPanelActive);\n const redirectQueryArg = \"kloudlessRedirect=true\";\n const calendarsByAccountId = useSelector(\n calendarSelectors.getCalendarsByAccountId\n );\n\n const onHide = () => dispatch(actions.toggleCalendarPanel());\n\n useEffect(() => {\n if (window.location.href.includes(redirectQueryArg)) {\n dispatch(actions.toggleCalendarPanel(true));\n }\n }, [dispatch]);\n\n return (\n
\n \n } />\n \n \n \n {strings.hcssConnect.subscribePanel.connectAccountButton}\n \n
\n {nylasAccounts.length > 0 && (\n
\n {strings.hcssConnect.subscribePanel.linkedAccounts}\n
\n )}\n
\n {!loading && (\n \n {nylasAccounts\n .sort(account => (account.isBad ? 1 : -1))\n .map(account => {\n const accountCalendars = calendarsByAccountId[account.id];\n return (\n \n nylasCalendars?.find(nc => nc.id === c.calendarId)\n ).length > 0\n }\n isBad={account.isBad}\n />\n );\n })}\n \n )}\n {loading && }\n
\n \n
\n );\n};\n\nconst ModalHeader = () => {\n return (\n
\n
{strings.hcssConnect.subscribePanel.title}
\n \n {strings.featureStatus.beta}\n \n
\n );\n};\n\ninterface CalendarAccountCardProps {\n account: UsableAccount;\n onDelete: (accountId: string) => void;\n isBad?: boolean;\n hasExistingCalendars?: boolean;\n}\n\nexport interface CalendarAccountCardWrapperProps {\n hasExistingCalendars?: boolean;\n children: ReactElement;\n}\n\nconst CalendarAccountCardWrapper = ({\n hasExistingCalendars,\n children\n}: CalendarAccountCardWrapperProps) => {\n if (!hasExistingCalendars) return children;\n return (\n \n \n {strings.hcssConnect.card.deletePopover}\n \n \n }\n >\n {children}\n \n );\n};\n\nconst CalendarAccountCard = ({\n account,\n onDelete,\n isBad,\n hasExistingCalendars\n}: CalendarAccountCardProps) => {\n const [showDeleteModal, setShowDeleteModal] = useState(false);\n const CardContainer = isBad\n ? BadLinkContainer\n : moment().diff(account.created, \"minutes\") <= 1\n ? NewLinkContainer\n : LinkContainer;\n\n return (\n \n \n \n \n \n {\n setShowDeleteModal(true);\n }}\n >\n \n \n \n \n\n setShowDeleteModal(false)}\n title={strings.hcssConnect.card.deleteTitle}\n style={{ zIndex: 9999 }}\n footer={\n
\n {\n onDelete(account.id);\n setShowDeleteModal(false);\n }}\n hcssStyle=\"Delete\"\n >\n \n  {strings.hcssConnect.card.continue}\n \n setShowDeleteModal(false)}\n hcssStyle=\"ThemeInverted\"\n >\n \n  {strings.hcssConnect.card.cancel}\n \n
\n }\n >\n

{strings.hcssConnect.card.deleteConfirmation}

\n \n
\n {account.emailAddress}\n
\n );\n};\n\nconst HelpTrigger = ({ serviceName }: { serviceName: string }) => {\n return (\n \n \n {strings.formatString(\n strings.hcssConnect.card.helper.error,\n serviceName\n )}\n \n
\n {strings.hcssConnect.card.helper.recommendDelete}\n \n }\n >\n \n \n \n \n );\n};\n\nconst StyledPanel = styled(ModalPanel)`\n z-index: 2002;\n\n .modal-panel-content {\n .modal-panel-body {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: column;\n overflow: hidden;\n padding: 0;\n\n .panel-instructions {\n position: relative;\n margin: 10px 0;\n padding: 0 20px;\n margin-bottom: 20px;\n font-size: 14px;\n line-height: 22px;\n color: #1e1e1e;\n }\n }\n }\n`;\n\nconst TitleLabel = styled.label`\n padding-left: 30px;\n margin-top: 16px;\n\n .warning {\n padding-left: 0px;\n }\n`;\nconst StyledDivWrapper = styled.div`\n margin-left: 10px;\n margin-right: 10px;\n flex-grow: 1;\n overflow-y: auto;\n overflow-x: hidden;\n`;\nconst NewAccountButton = styled(Link)`\n background: none;\n border: none;\n padding: 0;\n color: #069;\n cursor: pointer;\n`;\nconst LinkContainer = styled.div`\n padding: 24px;\n margin: 20px 12px;\n background-color: #f6f6f6;\n border-radius: 12px;\n`;\n\nconst NewLinkContainer = styled.div`\n padding: 24px;\n margin: 20px 12px;\n background-color: #e0ffe0;\n border-radius: 12px;\n`;\n\nconst BadLinkContainer = styled.div`\n padding: 24px;\n margin: 20px 12px;\n background-color: #f8d7da;\n border-radius: 12px;\n`;\n\nconst LinkHeader = styled.div`\n .template-wrap {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n width: 270px;\n }\n\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n`;\n\nconst DeleteButton = styled(Button)`\n font-size: 1.15rem;\n font-weight: 800;\n text-transform: uppercase;\n letter-spacing: 0.06rem;\n box-shadow: none;\n padding: 5px 20px;\n color: ${gray600};\n\n &:hover:not(:disabled) {\n box-shadow: none;\n }\n`;\n","import { BusinessUnit } from \"api/GeneratedClients/precon\";\nimport { DataColumnType, TypedDataColumn } from \"hcss-tables\";\n\nexport interface BUSelect extends BusinessUnit {\n selected: boolean;\n home: boolean;\n}\ninterface CompareValue {\n home: boolean;\n code: string;\n}\n\nconst CodeColumn: TypedDataColumn = {\n name: \"code\",\n title: \"Code\",\n type: DataColumnType.Custom,\n getCellValue: (row: BUSelect) => {\n return { home: row.home, code: row.code };\n },\n config: {\n sortingFunction: (a: CompareValue, b: CompareValue) => {\n const priorityA = a.code.toLowerCase();\n const priorityB = b.code.toLowerCase();\n if (priorityA === priorityB) return 0;\n return priorityA < priorityB ? -1 : 1;\n },\n valueAsString: (value: CompareValue) => value.code\n }\n};\nconst DescriptionColumn: TypedDataColumn = {\n name: \"description\",\n title: \"Description\",\n type: DataColumnType.ShortText,\n getCellValue: (row: BUSelect) => row.description ?? \"\"\n};\n\nexport const businessUnitColumns: TypedDataColumn[] = [\n CodeColumn,\n DescriptionColumn\n];\n","import {\n DataTypeProvider,\n IntegratedSelection,\n TableColumnWidthInfo\n} from \"@devexpress/dx-react-grid\";\nimport {\n Grid,\n SearchPanel,\n Table,\n TableColumnResizing,\n TableHeaderRow,\n TableSelection,\n Toolbar\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { BusinessUnit } from \"api/GeneratedClients/precon\";\nimport { isNullOrWhitespace } from \"core\";\nimport { ConfirmSubmitModal } from \"core/components/modals/confirm-submit\";\nimport { useLocalStorage } from \"hcss-hooks\";\nimport {\n BooleanFormatProvider,\n getRowId,\n IntegratedFiltering,\n Root,\n SearchState,\n SelectionState,\n SortingState,\n TableContainer,\n TableWrapper,\n // TableHeaderRow,\n IntegratedSorting\n} from \"hcss-tables\";\nimport { selectors as accountSelectors } from \"modules/account\";\nimport { StyledSelectionRow } from \"modules/tables/selection-table\";\nimport React, { useMemo, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { ModalPanel } from \"../../../core/components/modals/SideModal\";\nimport { actions, selectors } from \"../state\";\nimport { businessUnitColumns } from \"./BusinessUnitColumns\";\n\nexport const BusinessUnitPanel = () => {\n const dispatch = useDispatch();\n const isActive = useSelector(selectors.getBUPanelActive);\n const BUs = useSelector(accountSelectors.getAccessibleBusinessUnits);\n const homeBU = useSelector(accountSelectors.getHomeBusinessUnit);\n const selectedBU = useSelector(accountSelectors.getSelectedBusinessUnit);\n const hcssUser = useSelector(accountSelectors.getHcssUser);\n\n const [showModal, setShowModal] = useState(false);\n const [chosenRowId, setChosenRowId] = useState(\"\");\n\n const [_, setLocalStorageBU] = useLocalStorage<{\n id: string | undefined;\n code: string | undefined;\n }>(`user.business.unit-${hcssUser?.hcssUserId}`, homeBU);\n\n const businessUnits = useMemo(() => {\n return (\n BUs?.map(bu => {\n if (isNullOrWhitespace(selectedBU.id) && bu.code === \"MANAGER\")\n return { ...bu, selected: true };\n\n if (bu.id === selectedBU.id) return { ...bu, selected: true };\n\n return { ...bu, selected: false };\n }).map(bu => {\n if (bu.id === homeBU.id) return { ...bu, home: true };\n return { ...bu, home: false };\n }) ?? []\n );\n }, [BUs, homeBU.id, selectedBU.id]);\n\n const onHide = () => {\n setShowModal(false);\n dispatch(actions.toggleBUPanel());\n };\n\n const handleSelection = (change: (string | number)[]) => {\n const selectedRowId = change[change.length - 1];\n if (change.length > 0) {\n setChosenRowId(selectedRowId);\n setShowModal(true);\n }\n };\n\n const handleConfirm = () => {\n const selectedBU = businessUnits.find(bu => bu.id === chosenRowId);\n const businessUnit = {\n id: selectedBU?.id ?? \"\",\n code: selectedBU?.code ?? \"\"\n };\n setLocalStorageBU(businessUnit);\n setShowModal(false);\n window.location.reload();\n };\n\n const handleClose = () => {\n setShowModal(false);\n };\n\n return (\n
\n \n } />\n \n \n \n \n \n The site will reload with your newly selected business unit. Any unsaved\n work will be lost.\n \n
\n );\n};\n\nconst ModalHeader = () => {\n return
Change Business Unit
;\n};\n\ninterface BUTableProps {\n businessUnits: BusinessUnit[] | undefined;\n selection: (string | number)[] | undefined;\n handleSelection: (change: (string | number)[]) => void;\n}\n\nconst BUTable = ({\n businessUnits,\n selection,\n handleSelection\n}: BUTableProps) => {\n const [columnWidths, setColumnWidths] = useState(\n defaultWidths\n );\n\n return (\n
\n \n \n \n \n \n \n\n \n \n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst HomeBUFormatter = ({ value }: { value: any }) => {\n return (\n
\n {value.code}\n
\n {value.home && }\n
\n
\n );\n};\n\nconst HomeBUProvider = (props: any) => (\n \n);\n\nconst defaultWidths = [\n { columnName: \"code\", width: 150 },\n { columnName: \"description\", width: 315 }\n];\n\nconst StyledPanel = styled(ModalPanel)`\n z-index: 2002;\n\n .modal-panel-content {\n .modal-panel-body {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: column;\n overflow: hidden;\n padding: 0;\n\n .panel-instructions {\n position: relative;\n margin: 10px 0;\n padding: 0 20px;\n margin-bottom: 20px;\n font-size: 14px;\n line-height: 22px;\n color: #1e1e1e;\n }\n }\n }\n`;\n","import React, { ReactNode } from \"react\";\nimport {\n HeaderSection,\n Item,\n MenuSection\n} from \"core/components/hcss-navigation\";\nimport { ConcreteColors, Icon, Link } from \"hcss-components\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\n\ninterface HeaderSectionWithBackButtonProps {\n backPath: string;\n children?: ReactNode;\n}\nexport const HeaderSectionWithBackButton = ({\n backPath,\n children\n}: HeaderSectionWithBackButtonProps) => {\n return (\n \n {headerStyle => {\n return (\n
\n \n \n {strings.core.buttons.back}\n \n {children}\n \n
\n );\n }}\n
\n );\n};\n\nconst HeaderContainer = styled.div`\n padding-bottom: 26px;\n padding-left: 12px;\n padding-top: 8px;\n font-size: 16px;\n font-weight: 700;\n color: ${ConcreteColors.gray600};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst BackLink = styled(Link)`\n font-size: 12px;\n font-weight: 400;\n color: ${ConcreteColors.gray600};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n","import { Badge } from \"@mui/material\";\nimport { FeatureFlag } from \"core\";\nimport { Item, MenuSection } from \"core/components/hcss-navigation\";\nimport { ConcreteColors, Icon, OverlayTrigger, Tooltip } from \"hcss-components\";\nimport { strings } from \"localization\";\nimport { usePermissions, useUserAndCompanyLicense } from \"modules/account\";\nimport { useFeatureFlags } from \"modules/configurationSettings/use-feature-flags\";\nimport { SubscriptionStatus, selectors } from \"modules/email-subscriptions\";\nimport { default as React, useMemo } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { useLocation } from \"react-router-dom\";\nimport styled, { createGlobalStyle } from \"styled-components\";\nimport { paths } from \"../../../../projects/views/paths\";\nimport { HeaderSectionWithBackButton } from \"../../common/header-section-with-back-button\";\n\nexport const FailedSubscriptionsBadge = () => {\n const subscriptions = useSelector(selectors.getSubscriptions);\n\n const stopedCount = useMemo(\n () =>\n subscriptions.reduce(\n (acc, curr) => acc + +(curr.status === SubscriptionStatus.STOPPED),\n 0\n ),\n [subscriptions]\n );\n\n return (\n \n \n {\n strings.layout.menu.projectTracking.subscriptions\n .stoppedSubscriptions\n }\n \n }\n >\n \n \n );\n};\n\nexport const CustomizeSetupContext = () => {\n const path = useLocation().pathname;\n const { companyLicense } = useUserAndCompanyLicense();\n const isLimitedCompany = companyLicense.isLimitedLicense;\n const permissions = usePermissions();\n const {\n isFeatureEnabled: isFrontEndEmailSubscriptionEnabled\n } = useFeatureFlags(FeatureFlag.FrontEndEmailSubscription);\n const { isFeatureEnabled: isQuickPricingPhase1Enabled } = useFeatureFlags(\n FeatureFlag.QuickPricingPhase1\n );\n\n return (\n \n \n
{strings.layout.menu.projectTracking.customize}
\n
\n \n {menuStyle => (\n \n \n \n }\n />\n {isFrontEndEmailSubscriptionEnabled && (\n }\n to={paths.subscriptionSetup}\n />\n )}\n {isQuickPricingPhase1Enabled && permissions.contactWrite && (\n \n )}\n \n )}\n \n \n );\n};\n\nconst ItemContainer = styled.div`\n font-size: 14px;\n margin-right: 14px;\n color: ${props => props.theme.colors.neutral[0]};\n`;\n\nconst TooltipStyling = createGlobalStyle`\n .tooltip {\n background-color: ${ConcreteColors.gray700};\n margin: 0;\n border-radius: 4px;\n pointer-events:none;\n .tooltip-arrow {\n display: none;\n }\n \n .tooltip-inner {\n background-color: transparent;\n font-weight: 500;\n font-size: 13px;\n }\n }\n`;\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Badge } from \"@mui/material\";\nimport { FeatureFlag } from \"core\";\nimport {\n HeaderSection,\n Item,\n MenuSection\n} from \"core/components/hcss-navigation/\";\nimport { ConcreteColors, OverlayTrigger, Tooltip } from \"hcss-components\";\nimport { strings } from \"localization\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\nimport { useFeatureFlags } from \"modules/configurationSettings/use-feature-flags\";\nimport { actions } from \"modules/email-subscriptions\";\nimport { selectors as estimateSelectors } from \"modules/estimates\";\nimport React, { useEffect } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { createGlobalStyle } from \"styled-components\";\nimport { FailedSubscriptionsBadge } from \"../context/customize-setup\";\nimport { HeaderContainer, ItemContainer, ModuleTitle } from \"./styles\";\n\nexport const ProjectTrackingModule = () => {\n const {\n isFeatureEnabled: isFrontEndEmailSubscriptionEnabled\n } = useFeatureFlags(FeatureFlag.FrontEndEmailSubscription);\n const dispatch = useDispatch();\n const path = useLocation().pathname;\n const history = useHistory();\n const permissions = usePermissions();\n const auth = useAuthorization();\n\n const unlinkedEstimateCount = useSelector(\n estimateSelectors.getUnlinkedAndUnhiddenEstimatesCount\n );\n\n const canImport =\n auth.canAccessLimitedPrecon && (permissions.admin || permissions.write);\n\n const isFreeCompany =\n auth.canAccessLimitedPrecon && !auth.canAccessFullPrecon;\n\n const canCustomize = isFreeCompany || permissions.admin;\n const headerText = strings.layout.menu.projectTracking.customize;\n\n useEffect(() => {\n if (!isFrontEndEmailSubscriptionEnabled) {\n return;\n }\n\n dispatch(actions.loadSubscriptions.request());\n }, [dispatch, isFrontEndEmailSubscriptionEnabled]);\n\n return (\n \n \n {headerStyle => {\n return (\n
\n \n \n {strings.layout.menu.projectTracking.title}\n \n \n
\n );\n }}\n
\n \n {menuStyle => (\n \n }\n text={strings.layout.menu.projectTracking.list}\n isSelected={path === \"/projects\"}\n onClick={() => history.push(\"/projects\")}\n data-testid=\"nav-projects-list\"\n />\n\n }\n text={strings.layout.menu.projectTracking.estimateMapping.title}\n isSelected={path === \"/projects/estimate-mapping\"}\n onClick={() => history.push(\"/projects/estimate-mapping\")}\n data-testid=\"nav-projects-estimate-mapping\"\n after={\n \n \n {\n strings.layout.menu.projectTracking.estimateMapping\n .hover\n }\n \n }\n >\n \n \n }\n />\n {canImport && (\n \n }\n text={strings.layout.menu.projectTracking.import}\n isSelected={path === \"/projects/import-projects\"}\n onClick={() => history.push(\"/projects/import-projects\")}\n data-testid=\"nav-projects-import\"\n />\n )}\n {canCustomize && (\n \n }\n text={headerText}\n isSelected={path === \"/projects/setup\"}\n onClick={() => history.push(\"/projects/setup\")}\n after={\n isFrontEndEmailSubscriptionEnabled && (\n \n )\n }\n data-testid=\"nav-projects-customize\"\n />\n )}\n \n )}\n \n \n );\n};\n\nconst TooltipStyling = createGlobalStyle`\n .tooltip {\n background-color: ${ConcreteColors.gray700};\n margin: 0;\n border-radius: 4px;\n pointer-events:none;\n .tooltip-arrow {\n display: none;\n }\n \n .tooltip-inner {\n background-color: transparent;\n font-weight: 500;\n font-size: 13px;\n }\n }\n`;\n","import * as React from \"react\";\nimport { useRecentEstimatesContext } from \"./use-recent-estimates\";\nimport { useMemo } from \"react\";\nimport { Link } from \"hcss-components\";\nimport styled from \"styled-components\";\nimport { Box } from \"hcss-core\";\nimport { getPathForEstimate } from \"modules/estimates/views/paths\";\nimport { track } from \"logging\";\nimport { SectionHeading } from \"core/components/hcss-navigation\";\nimport { TextOverflow } from \"core\";\nimport { strings } from \"localization\";\n\nexport const RecentEstimateList = () => {\n const { recentEstimates } = useRecentEstimatesContext();\n const options = useMemo(() => {\n return recentEstimates.slice(0, 5).map(e => {\n return {\n key: e.id ?? \"\",\n mainText: e.values.code ?? \"(no code)\",\n subText: e.values.name ?? \"(no name)\"\n };\n });\n }, [recentEstimates]);\n if (recentEstimates.length === 0) return null;\n return (\n
\n \n {strings.layout.menu.estimating.recentEstimates}\n \n
\n {options.map(option => (\n \n track(\"RECENT ESTIMATE CLICK\")}\n >\n {option.mainText}\n {option.subText}\n \n \n ))}\n
\n
\n );\n};\n\nconst EstimateLink = styled(Box)`\n color: ${props => props.theme.colors.neutral[1]};\n text-decoration: none;\n min-width: 100%;\n font-size: 12px;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n max-width: 300px;\n\n &:hover {\n color: #0370f5;\n text-decoration: none;\n }\n`;\n","import React from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { strings } from \"localization\";\nimport { HeaderContainer, ModuleTitle, ItemContainer } from \"./styles\";\nimport { faBooks } from \"@fortawesome/pro-light-svg-icons\";\nimport {\n HeaderSection,\n MenuSection,\n Item\n} from \"core/components/hcss-navigation/\";\nimport { RecentEstimateList } from \"modules/estimates/components/recent-estimates/recent-estimate-list\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\nimport { DisableInSandbox, HideInSandbox } from \"core/util/sandbox\";\nimport { useFeatureFlags } from \"modules/configurationSettings/use-feature-flags\";\n\nexport const EstimatingModule = () => {\n const path = useLocation().pathname;\n const history = useHistory();\n const permissions = usePermissions();\n const auth = useAuthorization();\n const enableCustomizeReporting =\n permissions.admin && auth.canAccessFullPrecon;\n const { isFeatureEnabled: isCodebooksFeatureEnabled } = useFeatureFlags(\n \"Codebooks\"\n );\n\n const iconStyle = { width: \"10px\" };\n return (\n
\n \n {headerStyle => {\n return (\n
\n \n \n {strings.layout.menu.estimating.title}\n \n \n
\n );\n }}\n
\n \n {menuStyle => (\n \n }\n text={strings.layout.menu.estimating.list}\n isSelected={path === \"/estimates\"}\n onClick={() => history.push(\"/estimates\")}\n data-testid=\"navitem-estimating-list\"\n beforeWrapperStyle={iconStyle}\n />\n {isCodebooksFeatureEnabled && (\n \n }\n text={strings.layout.menu.estimating.codebooks}\n isSelected={path === \"/estimates/codebooks\"}\n onClick={() => history.push(\"/estimates/codebooks\")}\n data-testid=\"navitem-estimating-codebooks\"\n beforeWrapperStyle={iconStyle}\n />\n \n )}\n \n \n }\n text={strings.layout.menu.estimating.edit}\n isSelected={path === \"/estimates/edit\"}\n onClick={() => history.push(\"/estimates/edit\")}\n data-testid=\"navitem-estimating-edit\"\n beforeWrapperStyle={iconStyle}\n />\n \n {enableCustomizeReporting && (\n \n }\n text={strings.layout.menu.estimating.customize}\n isSelected={path === \"/estimates/customize\"}\n onClick={() => history.push(\"/estimates/customize\")}\n data-testid=\"navitem-customize-reporting\"\n beforeWrapperStyle={iconStyle}\n />\n )}\n \n \n )}\n \n
\n );\n};\n","import { TextOverflow } from \"core\";\nimport { Flex } from \"hcss-core\";\nimport React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { actions } from \"modules/contacts\";\nimport { useDispatch } from \"react-redux\";\nimport { CompanyAvatar } from \"../../../../core/components/avatar\";\n\ninterface CompanyCardProps {\n companyId: string;\n companyName: string;\n companyCode: string;\n}\nexport const CompanyCard = ({\n companyId,\n companyName,\n companyCode\n}: CompanyCardProps) => {\n const dispatch = useDispatch();\n return (\n \n \n \n \n dispatch(actions.setShowSearchModal(false))}\n >\n {companyName}\n \n \n\n \n {companyCode}\n \n \n \n );\n};\n","import { Avatar, List, ListItem, Box } from \"@mui/material\";\nimport React, { ReactNode } from \"react\";\nimport { EmailField, PhoneField, NoDataPlaceholder, TextOverflow } from \"core\";\nimport { Flex } from \"hcss-core\";\nimport { LocalPhone, PhoneAndroid, Email } from \"@mui/icons-material\";\nimport { blue, green } from \"@mui/material/colors\";\nimport { CompanyCard } from \"./company-card\";\nimport { IGetContactSearchDto } from \"api/GeneratedClients/ContactsClient\";\nimport { strings } from \"localization\";\nexport interface ContactListProps {\n contacts: IGetContactSearchDto[];\n}\n\nexport const ContactList = ({ contacts }: ContactListProps) => {\n return (\n \n <>\n {contacts.length === 0 && (\n \n )}\n {contacts.length > 0 &&\n contacts.map(contact => (\n \n \n \n ))}\n \n \n );\n};\n\nexport interface ContactListItemProps {\n contact: IGetContactSearchDto;\n}\n\nconst ContactCard = ({ contact }: ContactListItemProps) => {\n return (\n \n \n \n \n \n {contact.firstName || \"--\"} {contact.lastName || \"--\"}\n \n \n\n \n \n \n \n ) : (\n \"--\"\n )\n }\n icon={}\n iconColor={green[400]}\n />\n \n ) : (\n \"--\"\n )\n }\n icon={}\n iconColor={green[600]}\n />\n \n ) : (\n \"--\"\n )\n }\n icon={}\n iconColor={blue[400]}\n />\n \n \n \n );\n};\n\ninterface ContactInfoFieldProps {\n fieldInfo: ReactNode;\n icon: ReactNode;\n iconColor: string;\n}\n\nconst ContactInfoField = ({\n fieldInfo,\n icon,\n iconColor\n}: ContactInfoFieldProps) => {\n return (\n \n \n {fieldInfo}\n \n \n {icon}\n \n \n );\n};\n","import { List, ListItem, Box } from \"@mui/material\";\nimport React from \"react\";\nimport { NoDataPlaceholder } from \"core\";\nimport { Flex } from \"hcss-core\";\nimport { CompanyData } from \"./modal\";\nimport { CompanyCard } from \"./company-card\";\nimport { strings } from \"localization\";\nexport interface TempContactDto {\n id?: string;\n companyId?: string;\n companyCode?: string;\n companyName?: string;\n firstName?: string | undefined;\n lastName?: string | undefined;\n title?: string | undefined;\n phoneNumber?: string | undefined;\n cellPhoneNumber?: string | undefined;\n emailAddress?: string | undefined;\n}\n\nexport interface CompanyListProps {\n companies: CompanyData[];\n}\n\nexport const CompanyList = ({ companies }: CompanyListProps) => {\n return (\n \n <>\n {companies.length === 0 && (\n \n )}\n {companies.map(company => (\n \n \n \n ))}\n \n \n );\n};\n\nexport interface ContactListItemProps {\n company: CompanyData;\n}\n\nconst CompanyItem = ({ company }: ContactListItemProps) => {\n return (\n \n \n \n \n \n );\n};\n","const NUM_ITEMS_PER_PAGE = 4;\n\nexport const calculateNumPages = (\n results: any[],\n numItemsPerPage = NUM_ITEMS_PER_PAGE\n) => {\n return Math.ceil(results.length / numItemsPerPage);\n};\n\nexport const getCurrentPage = (\n currentPage: number,\n results: any[],\n numItemsPerPage = NUM_ITEMS_PER_PAGE\n) => {\n if (results.length === 0) return [];\n if (results.length <= numItemsPerPage) return results;\n const firstItemInCurrentPageIndex =\n numItemsPerPage * currentPage - results.length;\n if (firstItemInCurrentPageIndex > 0) {\n return results.slice(-(numItemsPerPage - firstItemInCurrentPageIndex));\n }\n return results.slice(\n (currentPage - 1) * numItemsPerPage,\n numItemsPerPage * currentPage\n );\n};\n","import { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport React, {\n forwardRef,\n ReactElement,\n Ref,\n useEffect,\n useMemo,\n useState\n} from \"react\";\nimport {\n Badge,\n Box,\n DialogContent,\n DialogTitle,\n InputBase,\n Slide,\n Tab,\n Tabs,\n Dialog,\n BadgeProps,\n Pagination,\n DialogActions,\n CircularProgress\n} from \"@mui/material\";\nimport { TransitionProps } from \"@mui/material/transitions\";\nimport { ContactList } from \"./contact-list\";\nimport { AccountCircle, Business } from \"@mui/icons-material\";\nimport { styled } from \"@mui/material/styles\";\nimport { useDebounce } from \"core\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { selectors, actions } from \"modules/contacts\";\nimport { CompanyList } from \"./company-list\";\nimport { Flex } from \"hcss-core\";\nimport { IGetContactSearchDto } from \"api/GeneratedClients/ContactsClient\";\nimport { strings } from \"localization\";\nimport { ThemeProvider } from \"@hcss/theme\";\nimport { calculateNumPages, getCurrentPage } from \"core/util/pagination\";\nimport { isSandboxEnabled } from \"core/util/sandbox\";\n\nexport const SearchContactsModal = () => {\n const dispatch = useDispatch();\n const showSearchModal = useSelector(selectors.getShowSearchModal);\n const isSearching = useSelector(selectors.getIsSearching);\n const [currentTab, setCurrentTab] = useState(0);\n const [currentPage, setCurrentPage] = useState(0);\n\n const [searchValue, setSearchValue] = useState(\"\");\n const debouncedSearch = useDebounce(searchValue, 1000).toLocaleLowerCase();\n\n const results = useSelector(selectors.getSearchResultsSorted);\n\n const uniqueCompanies = useMemo(() => {\n const companyDict: Record = {};\n results.forEach(contact => {\n if (contact?.companyId && !companyDict[contact.companyId])\n companyDict[contact?.companyId] = {\n id: contact.companyId,\n companyName: contact?.companyName ?? \"\",\n companyCode: contact?.companyCode ?? \"\"\n };\n });\n return Object.values(companyDict);\n }, [results]);\n\n const numPagesContacts = calculateNumPages(results);\n const numPagesCompanies = calculateNumPages(uniqueCompanies, 6);\n const numPages = currentTab === 1 ? numPagesCompanies : numPagesContacts;\n\n const pagedResults: IGetContactSearchDto[] = useMemo(() => {\n return getCurrentPage(currentPage, results);\n }, [currentPage, results]);\n\n const pagedUniqueCompanies: CompanyData[] = useMemo(() => {\n return getCurrentPage(currentPage, uniqueCompanies, 6);\n }, [currentPage, uniqueCompanies]);\n\n useEffect(() => {\n dispatch(actions.searchContacts.request(debouncedSearch));\n }, [debouncedSearch, dispatch]);\n\n useEffect(() => {\n setCurrentPage(1);\n }, [currentTab]);\n\n const toggleModal = () =>\n dispatch(actions.setShowSearchModal(!showSearchModal));\n\n return (\n \n toggleModal()}\n TransitionComponent={Transition}\n maxWidth=\"sm\"\n >\n \n \n {\n setSearchValue(e.currentTarget.value);\n }}\n />\n {isSearching && }\n \n {isSandboxEnabled() && (\n \n \n \n \n \n \n Search functionality will not work as expected in Sandbox mode\n \n \n \n )}\n \n \n setCurrentTab(newValue)}\n variant=\"fullWidth\"\n >\n \n \n \n }\n label={strings.contactManagement.contactSearchModal.tabs.contacts}\n />\n \n \n \n }\n label={\n strings.contactManagement.contactSearchModal.tabs.companies\n }\n />\n \n {currentTab === 0 && }\n {currentTab === 1 && }\n \n {numPages >= 1 && (\n \n setCurrentPage(page)}\n />\n \n )}\n \n \n );\n};\n\nconst Transition = forwardRef(function Transition(\n props: TransitionProps & {\n children: ReactElement;\n },\n ref: Ref\n) {\n return ;\n});\n\nconst StyledBadge = styled(Badge)(({ theme }) => ({\n \"& .MuiBadge-badge\": {\n right: -3,\n top: 13,\n border: `2px solid ${theme.palette.background.paper}`,\n padding: \"0 4px\"\n }\n}));\n\nconst warningIconStyle: object = {\n \"--fa-primary-color\": \"#2c4369\"\n};\n\nconst Banner = styled(\"div\")({\n backgroundColor: \"#ffc400\",\n borderRadius: \"3px\",\n boxSizing: \"border-box\",\n boxShadow:\n \"0 0 1px rgba(9, 30, 66, 0.31), 0 20px 32px -8px rgba(9, 30, 66, 0.25)\",\n color: \"#2c4369\",\n padding: \"5px\",\n transition: \"background-color 200ms\",\n width: \"100%\",\n zIndex: \"600\",\n marginTop: \"10px\"\n});\n\nconst MainInfo = styled(\"div\")({\n display: \"flex\",\n alignItems: \"center\",\n height: \"32px\",\n marginLeft: \"10px\"\n});\n\nconst WarningIconContainer = styled(\"div\")({\n flex: \"0 0 auto\",\n width: \"40px\",\n height: \"24px\"\n});\n\nconst Title = styled(\"span\")({\n fontWeight: \"600\",\n fontSize: \"14px\",\n flex: \"1\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\"\n});\n\nexport interface CompanyData {\n id: string;\n companyName: string;\n companyCode: string;\n}\n","import React from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { strings } from \"localization\";\nimport { HeaderContainer, ModuleTitle, ItemContainer } from \"./styles\";\n\nimport {\n HeaderSection,\n MenuSection,\n Item\n} from \"core/components/hcss-navigation/\";\nimport { Badge } from \"core\";\nimport { selectors, actions } from \"modules/contacts\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { SearchContactsModal } from \"modules/contacts/components/search-contacts-modal\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\n\nexport const ContactsModule = () => {\n const path = useLocation().pathname;\n const history = useHistory();\n const showSearchModal = useSelector(selectors.getShowSearchModal);\n const dispatch = useDispatch();\n const permissions = usePermissions();\n const authorization = useAuthorization();\n\n return (\n
\n \n {headerStyle => {\n return (\n
\n \n {strings.common.modules.contacts}\n \n
\n );\n }}\n
\n \n {menuStyle => (\n \n }\n text={strings.layout.menu.contacts.list}\n isSelected={path === \"/contacts\"}\n onClick={() => history.push(\"/contacts\")}\n data-testid=\"navitem-company-list\"\n />\n \n {authorization.canAccessLimitedPrecon &&\n permissions.contactWrite && (\n \n }\n text={strings.layout.menu.contacts.import}\n isSelected={path === \"/contacts/import\"}\n onClick={() => history.push(\"/contacts/import\")}\n data-testid=\"navitem-contacts-import\"\n />\n )}\n {authorization.canAccessLimitedPrecon &&\n permissions.contactWrite && (\n \n }\n text={strings.layout.menu.contacts.setup}\n isSelected={path === \"/contacts/setup\"}\n onClick={() => history.push(\"/contacts/setup\")}\n data-testid=\"navitem-contacts-setup\"\n />\n )}\n \n )}\n \n
\n );\n};\n","import React, { useState, ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { MenuItem } from \"react-bootstrap\";\nimport { Box } from \"hcss-core\";\nimport { Icon, Link } from \"hcss-components\";\nimport { GLOBAL_SIDE_NAV_WIDTH } from \"core/components/hcss-navigation/common/constants\";\n\ninterface Option {\n key: string;\n mainText: string;\n subText: string;\n}\n\ninterface Dropdown {\n options: Option[];\n optionHeader: string;\n singlePath: (param: string) => string;\n allPath: string;\n}\n\ninterface QuickSelectProps {\n children: ReactNode;\n dropDown?: Dropdown;\n}\n\nexport const QuickSelect = ({ children, dropDown }: QuickSelectProps) => {\n const [show, setShow] = useState(false);\n\n return (\n \n setShow(prev => !prev)}>\n {children}\n {dropDown && (\n \n \n \n )}\n \n\n {show && dropDown && (\n setShow(false)}>\n \n {dropDown.optionHeader}\n {dropDown.options.map(option => (\n \n \n \n {option.mainText}\n \n \n {option.subText}\n \n \n \n ))}\n \n \n View All\n \n \n \n )}\n \n );\n};\n\nconst EstimateLink = styled(Box)`\n color: ${props => props.theme.colors.neutral[0]};\n text-decoration: none;\n padding: 4px 20px;\n\n &:hover {\n color: ${props => props.theme.colors.neutral[0]};\n text-decoration: none;\n background-color: ${props => props.theme.colors.neutral[6]};\n }\n`;\n\nconst HoverContainer = styled(Box)`\n margin-right: 14px;\n background-color: ${props => props.theme.colors.neutral[6]};\n cursor: pointer;\n border-radius: 4px;\n display: flex;\n height: inherit;\n flex-direction: column;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst Cover = styled(Box)`\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n position: fixed;\n z-index: 100;\n`;\n","import React, { Fragment, useMemo } from \"react\";\nimport styled from \"styled-components\";\nimport { Link, useLocation, useRouteMatch } from \"react-router-dom\";\nimport { strings } from \"localization\";\nimport { QuickSelect } from \"core/components/sidenavigation/quick-select\";\nimport { useCurrentEstimateContext } from \"modules/estimates/context/CurrentEstimateContext\";\nimport { useSolicitationContext } from \"modules/quote-management/context/solicitation-context\";\nimport { useAuthorization } from \"modules/account\";\nimport { Badge, ConcreteColors } from \"hcss-components\";\nimport { Dropdown } from \"react-bootstrap\";\n\nimport {\n SectionHeading,\n Item,\n MenuSection,\n PlaceholderDynamicMenu\n} from \"core/components/hcss-navigation\";\nimport { useRecentEstimatesContext } from \"modules/estimates/components/recent-estimates/use-recent-estimates\";\nimport { useSelector } from \"react-redux\";\nimport { selectors } from \"modules/estimates\";\nimport { getPathForEstimate, paths } from \"modules/estimates/views/paths\";\nimport { HeaderSectionWithBackButton } from \"../../common/header-section-with-back-button\";\nimport { SolicitationMoreOptions } from \"../create-solicitation-menu-item\";\nimport { FeatureFlag } from \"core\";\nimport { useFeatureFlags } from \"modules/configurationSettings/use-feature-flags\";\n\nexport const EstimateDetailsContext = () => {\n const path = useLocation().pathname;\n const auth = useAuthorization();\n const { currentEstimate } = useCurrentEstimateContext();\n const { recentEstimateIds } = useRecentEstimatesContext();\n const { outboundNewSolicitationCount } = useSolicitationContext();\n const workingCopy = useSelector(selectors.getWorkingCopy);\n const { currentEstimateId } = useCurrentEstimateContext();\n const { isFeatureEnabled: newQuoteManagementEnabled } = useFeatureFlags(\n FeatureFlag.NewQuoteManagement\n );\n const materialReportEnabled = useFeatureFlags(\"MaterialReport\")\n .isFeatureEnabled;\n\n const estimateDetailsMatch = useRouteMatch<{ estimateId: string }>({\n path: \"/estimates/:estimateId\"\n })!;\n\n const options = useMemo(() => {\n const rawRecentEstimates = recentEstimateIds\n .map(estimateId => workingCopy[estimateId])\n .filter(estimate => estimate)\n .slice(1, 6);\n return rawRecentEstimates.map(e => {\n return {\n key: e.id ?? \"\",\n mainText: e.values.code ?? \"(no code)\",\n subText: e.values.name ?? \"(no name)\"\n };\n });\n }, [recentEstimateIds, workingCopy]);\n\n const estimateId = estimateDetailsMatch.params.estimateId;\n const estimateDetailsPath = `/estimates/${estimateId}`;\n const keyIndicatorsPath = `/estimates/${estimateId}/indicators`;\n const quotesSummaryPath = `/estimates/${estimateId}/quotes/summary`;\n const estimateDashboard = `/estimates/${estimateId}/dashboard`;\n const quotesInboxPath = `/estimates/${estimateId}/quotes/inbox`;\n const newSolicitationPath = `/estimates/${estimateId}/solicitation/details/`;\n const reportsPath = `/estimates/${estimateId}/reports`;\n const materialsPath = `/estimates/${estimateId}/materials`;\n const vendorCommunicationsPath = `/estimates/${estimateId}/communication`;\n const estimateCode = currentEstimate?.code ?? \"\";\n const estimateName = currentEstimate?.name ?? \"\";\n const drafts = `/estimates/${currentEstimateId!}/solicitation/drafts`;\n const sent = `/estimates/${currentEstimateId!}/solicitation/sent`;\n\n const dropDown = {\n options: [...options],\n singlePath: getPathForEstimate,\n allPath: paths.base,\n key: estimateId,\n optionHeader: strings.layout.menu.estimating.recentEstimates\n };\n\n if (!currentEstimate) {\n return ;\n }\n\n return (\n
\n \n
\n \n {estimateCode}\n {estimateName}\n \n
\n
\n \n {menuStyle => (\n \n \n {strings.estimates.estimateAnalysis}\n \n \n \n \n {materialReportEnabled && (\n \n )}\n {newQuoteManagementEnabled && currentEstimate.isActiveEstimate && (\n \n \n {strings.estimates.quoteManagement}\n \n \n \n )}\n \n )}\n \n
\n );\n};\n\nconst HeaderContainer = styled.div`\n height: 75px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .quick-select-container {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n\nconst ItemContainer = styled.div`\n font-size: 14px;\n margin-right: 14px;\n color: ${props => props.theme.colors.neutral[0]};\n`;\n\nconst ContextTitle = styled.span`\n font-size: 14px;\n font-weight: 700;\n text-transform: uppercase;\n color: #1e1e1e;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst ContextSubtitle = styled.span`\n font-size: 12px;\n display: inline-block;\n position: relative;\n width: 220px;\n color: ${props => props.theme.colors.neutral[1]};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst InboxBadge = styled(Badge)`\n color: white;\n background-color: ${ConcreteColors.blue200};\n`;\n\ninterface ContextDropdownProps {\n isSelected: boolean;\n isHovering: boolean;\n}\nexport const ContextDropdown = styled(Dropdown)`\n margin-right: -8px;\n\n &&&& > button {\n border: 0;\n border-radius: 8px;\n box-shadow: none;\n background-color: transparent;\n color: ${p =>\n p.isSelected ? ConcreteColors.blue200 : ConcreteColors.gray600};\n\n & > span.caret {\n display: none;\n visibility: hidden;\n }\n }\n\n &&&& > ul.dropdown-menu {\n left: -155px;\n min-width: 195px;\n padding-top: 8px;\n padding-bottom: 8px;\n\n > li {\n padding-top: 5px;\n }\n }\n`;\n\nconst BackLink = styled(Link)`\n font-size: 12px;\n font-weight: 400;\n color: ${ConcreteColors.gray600};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { QuickSelect } from \"core/components/sidenavigation/quick-select\";\nimport { strings } from \"localization\";\nimport {\n HeaderSection,\n Item,\n MenuSection,\n SectionHeading\n} from \"core/components/hcss-navigation\";\nimport { useLocation } from \"react-router-dom\";\nimport { useGetSelectedVendor } from \"modules/contacts/hooks/use-get-selected-vendor\";\n\nexport const VendorDetailsContext = (vendorId: string) => {\n const path = useLocation().pathname;\n const currentSelectedVendor = useGetSelectedVendor();\n\n return (\n
\n \n {headerStyle => {\n return (\n
\n \n \n {currentSelectedVendor && (\n <>\n {currentSelectedVendor.code}\n \n {currentSelectedVendor.name}\n \n \n )}\n \n \n
\n );\n }}\n
\n \n {menuStyle => (\n \n \n {strings.layout.menu.contacts.title}\n \n \n \n )}\n \n
\n );\n};\n\nconst HeaderContainer = styled.div`\n height: 55px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n\n .quick-select-container {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n\nconst ItemContainer = styled.div`\n font-size: 14px;\n margin-right: 14px;\n color: ${props => props.theme.colors.neutral[0]};\n`;\n\nconst ContextTitle = styled.span`\n font-size: 14px;\n font-weight: 700;\n text-transform: uppercase;\n color: #1e1e1e;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst ContextSubtitle = styled.span`\n font-size: 12px;\n display: inline-block;\n position: relative;\n width: 220px;\n color: ${props => props.theme.colors.neutral[1]};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {\n HeaderSection,\n Item,\n MenuSection\n} from \"core/components/hcss-navigation\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { useLocation } from \"react-router-dom\";\nimport { strings } from \"localization\";\n\nexport const ProfileDetailsContext = () => {\n const path = useLocation().pathname;\n\n return (\n <>\n \n {headerStyle => {\n return (\n
\n Company Profile\n
\n );\n }}\n
\n \n {menuStyle => (\n \n }\n key=\"main-details\"\n text={strings.layout.menu.contacts.mainDetails}\n isSelected={path === `/settings/profile`}\n to={`/settings/profile`}\n />\n \n )}\n \n \n );\n};\n\nconst HeaderContainer = styled.div`\n padding-bottom: 26px;\n padding-left: 12px;\n padding-top: 8px;\n font-size: 16px;\n font-weight: 700;\n color: ${ConcreteColors.gray600};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst ItemContainer = styled.div`\n font-size: 14px;\n margin-right: 14px;\n color: ${ConcreteColors.gray600};\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {\n HeaderSection,\n Item,\n MenuSection\n} from \"core/components/hcss-navigation\";\nimport { ConcreteColors, Icon } from \"hcss-components\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useAccount } from \"modules/account\";\nimport * as schemas from \"modules/schemas\";\nimport { useSelector } from \"react-redux\";\nimport { HeaderSectionWithBackButton } from \"../../common/header-section-with-back-button\";\nimport { DisableInSandbox } from \"core/util/sandbox\";\nimport { strings } from \"localization\";\n\nexport const Imports = () => {\n const path = useLocation().pathname;\n const account = useAccount();\n const isBidResultsAdminOnly = useSelector(\n schemas.selectors.getAllProjectSchemaFields\n )?.find(x => x.id === \"bidResults\")?.adminOnly;\n\n const canImportBidResults = () => {\n if (\n isBidResultsAdminOnly &&\n account.permissions &&\n !account.permissions.admin\n ) {\n return false;\n }\n\n return true;\n };\n\n return (\n <>\n \n
{strings.layout.menu.projects.import.label}
\n
\n \n {menuStyle => (\n \n \n {canImportBidResults() && (\n \n \n \n )}\n \n )}\n \n \n );\n};\n\nconst HeaderContainer = styled.div`\n padding-bottom: 26px;\n padding-left: 12px;\n padding-top: 8px;\n font-size: 16px;\n font-weight: 700;\n color: ${ConcreteColors.gray600};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst BackToProjectsLink = styled(Link)`\n font-size: 12px;\n font-weight: 400;\n color: ${ConcreteColors.gray600};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n`;\n\nconst ItemContainer = styled.div`\n font-size: 14px;\n margin-right: 14px;\n color: ${ConcreteColors.gray600};\n`;\n","import { Badge } from \"core\";\nimport { Item, MenuSection } from \"core/components/hcss-navigation\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport { paths } from \"../../../../estimates/views/paths\";\nimport { HeaderSectionWithBackButton } from \"../../common/header-section-with-back-button\";\nimport { strings } from \"localization\";\n\nexport const CustomizeReportingContext = () => {\n const path = useLocation().pathname;\n\n return (\n \n \n
{strings.layout.menu.estimating.customize}
\n
\n \n {menuStyle => (\n \n \n {strings.featureStatus.beta}\n \n }\n />\n \n )}\n \n \n );\n};\n\nconst ItemContainer = styled.div`\n font-size: 14px;\n margin-right: 14px;\n color: ${props => props.theme.colors.neutral[0]};\n`;\n","import { useRouteMatch, useLocation } from \"react-router-dom\";\nimport { EstimateDetailsContext } from \"./estimate-details\";\nimport { VendorDetailsContext } from \"./vendor-details\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\nimport { ProfileDetailsContext } from \"./profile-details\";\nimport { Imports } from \"./imports\";\nimport { CustomizeSetupContext } from \"./customize-setup\";\nimport { CustomizeReportingContext } from \"./customize-reporting\";\nimport { paths } from \"modules/estimates/views/paths\";\n\nexport const useContextNavigation = () => {\n const path = useLocation().pathname;\n const auth = useAuthorization();\n const permissions = usePermissions();\n\n const enableCustomizeReporting =\n auth.canAccessFullPrecon && permissions.admin;\n\n const estimateDetailsMatch = useRouteMatch({\n path: \"/estimates/:estimateId\"\n });\n const estimateCodebooksMatch = useRouteMatch({\n path: \"/estimates/codebooks\"\n });\n\n const customizeReportingMatch = useRouteMatch({\n path: \"/estimates/customize\"\n });\n\n const vendorDetailsMatch = useRouteMatch({\n path: \"/contacts/:vendorId\"\n });\n\n const profileDetailsMatch = useRouteMatch({\n path: \"/settings/profile\"\n });\n\n const importProjectsMatch = useRouteMatch({\n path: \"/projects/import-projects\"\n });\n\n const importBidResultsMatch = useRouteMatch({\n path: \"/projects/import-bid-results\"\n });\n\n const customizeSetupMatch = useRouteMatch({\n path: \"/projects/setup\"\n });\n\n if (customizeReportingMatch && enableCustomizeReporting) {\n return { context: CustomizeReportingContext };\n }\n\n if (\n estimateDetailsMatch &&\n path !== paths.base &&\n path !== paths.edit &&\n !estimateCodebooksMatch\n ) {\n return { context: EstimateDetailsContext };\n }\n\n if (\n vendorDetailsMatch &&\n path !== \"/contacts/import\" &&\n path !== \"/contacts/setup\"\n ) {\n return {\n context: () => VendorDetailsContext(vendorDetailsMatch.params?.vendorId)\n };\n }\n\n if (profileDetailsMatch) {\n return { context: ProfileDetailsContext };\n }\n\n if (importProjectsMatch || importBidResultsMatch) {\n return { context: Imports };\n }\n\n if (customizeSetupMatch) {\n return { context: CustomizeSetupContext };\n }\n\n return { context: undefined };\n};\n\ninterface VendorDetailsMatchParams {\n vendorId: string;\n}\n","import React, { Fragment } from \"react\";\nimport styled from \"styled-components\";\nimport { OAuthConfigurationPanel } from \"modules/settings/components/OAuthConfigurationPanel\";\nimport { ProjectsCalendarSubscribeModal } from \"modules/projects/components/ProjectsCalendarSubscribeModal\";\nimport { HcssConnectConfigurationPanel } from \"../../settings/components/HcssConnectConfigurationPanel\";\nimport { BusinessUnitPanel } from \"../../settings/components/BusinessUnitPanel\";\nimport { HcssNavigation } from \"core/components/hcss-navigation\";\nimport { TopNavigation } from \"./navigation/top-navigation\";\nimport { SideNavigation } from \"./navigation/side-navigation\";\nimport { useModuleNavigation } from \"./navigation/module\";\nimport { useContextNavigation } from \"./navigation/context\";\nimport { useHcssUser } from \"modules/account\";\nimport { UserType } from \"core\";\n\ninterface SiteLayoutProps {\n children?: React.ReactNode;\n}\nexport const SiteLayout = ({ children }: SiteLayoutProps) => {\n const user = useHcssUser();\n const { module: ModuleNavigation } = useModuleNavigation();\n const { context: ContextNavigation } = useContextNavigation();\n\n const hasModule = ModuleNavigation ? true : false;\n const hasContext = ContextNavigation ? true : false;\n const hasDynamicNavigation = hasModule || hasContext;\n const isGuestUser = user.type === UserType.Guest;\n const globalSideNavigation = isGuestUser ? undefined : SideNavigation;\n const useDynamicNavigation = isGuestUser ? false : hasDynamicNavigation;\n\n return (\n \n \n \n {children}\n \n \n \n \n \n \n \n );\n};\n\nconst NoModule = () => null;\n\nconst FullHeightContainer = styled.div`\n height: 100vh;\n margin-top: 0;\n`;\n\nconst ContentWrapper = styled.div`\n width: 100%;\n height: 100%;\n`;\n\nexport default SiteLayout;\n","import { useRouteMatch } from \"react-router-dom\";\nimport { ProjectTrackingModule } from \"./project-tracking\";\nimport { EstimatingModule } from \"./estimating\";\nimport { ContactsModule } from \"./contacts\";\nimport { useAuthorization } from \"modules/account\";\n\nexport const useModuleNavigation = () => {\n const auth = useAuthorization();\n const projectsModuleMatch = useRouteMatch({ path: \"/projects\" });\n const estimatesModuleMatch = useRouteMatch({ path: \"/estimates\" });\n const contactsModuleMatch = useRouteMatch({ path: \"/contacts\" });\n\n if (projectsModuleMatch) {\n return { module: ProjectTrackingModule };\n }\n\n if (estimatesModuleMatch) {\n return { module: EstimatingModule };\n }\n\n if (contactsModuleMatch) {\n return { module: ContactsModule };\n }\n\n return { module: undefined };\n};\n","import * as React from \"react\";\nimport { ResponsiveBar } from \"@nivo/bar\";\n\nexport const CheckListChart: React.FunctionComponent<{ data: any }> = ({\n data /* see data tab */\n}) => (\n \n ((d.value as number) / (data[0].checked + data[0].notChecked)).toString()\n }\n labelFormat={\".0%\"}\n animate={true}\n motionStiffness={90}\n motionDamping={15}\n isInteractive={false}\n />\n);\n","import {\n ChangeSet,\n DataTypeProvider,\n EditingState\n} from \"@devexpress/dx-react-grid\";\nimport {\n TableEditColumn,\n TableEditRow,\n TableHeaderRow\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport { notify } from \"hcss-components\";\nimport {\n BooleanFormatProvider,\n CommandComponent,\n DataColumnType,\n Grid,\n IntegratedSorting,\n SortingState,\n TableContainer,\n TypedDataColumn,\n useTableContext\n} from \"hcss-tables\";\nimport produce from \"immer\";\nimport { cloneDeep } from \"lodash-es\";\nimport * as React from \"react\";\nimport { NoDataPlaceholder } from \"../../../../core/components/containers/no-data-placeholder\";\n\nimport { Flex } from \"hcss-core\";\nimport {\n selectors as accountSelectors,\n StateSlice as AccountStateSlice\n} from \"modules/account\";\nimport {\n CustomEditCellComponent,\n CustomEditCellHeaderComponent\n} from \"modules/tables/cells/custom-cells-components\";\nimport { connect } from \"react-redux\";\nimport * as configuratingSettings from \"../../../configurationSettings\";\nimport { selectors as configSelectors } from \"../../../configurationSettings/state\";\nimport { TableProps } from \"../SchemaFormArrayField\";\nimport { CheckListChart } from \"./CheckListChart\";\nimport LegacyVirtualTable from \"core/components/bundle-fixes/LegacyVirtualTable\";\n\nexport interface TableState {\n editingRowIds: any[];\n addedRows: any[];\n rowChanges: any;\n}\n\nexport interface ChecklistTableProps extends TableProps {\n maxDescriptionLength?: number;\n}\n\nexport class CheckList extends React.PureComponent<\n ChecklistTableProps,\n TableState\n> {\n state = {\n editingRowIds: [] as any[],\n addedRows: [] as any[],\n rowChanges: {}\n };\n\n getColumns() {\n const { field } = this.props;\n const adminFailure =\n !this.props.permissions?.admin && this.props.field?.adminOnly;\n const checkCol = {\n id: \"checked\",\n name: \"checked\",\n title: \"Checked\",\n type: DataColumnType.Boolean,\n config: field.config,\n readOnly: field.readOnly || adminFailure,\n required: field.required\n };\n const desCol = {\n id: \"description\",\n name: \"description\",\n title: \"Description\",\n type: DataColumnType.LongText,\n config: field.config,\n readOnly: field.readOnly || adminFailure,\n required: field.required\n };\n // TODO: add customized TypeDataColumn\n const columns: TypedDataColumn[] = [\n checkCol as TypedDataColumn,\n desCol as TypedDataColumn\n ];\n return columns;\n }\n\n commitChanges = ({ added, changed, deleted }: ChangeSet) => {\n if (added && this.props.onChange) {\n const newObject = added[0];\n\n if (newObject.checked === undefined) {\n newObject.checked = false;\n }\n\n const { rows = [] } = this.props;\n const newRows = produce(rows, draft => {\n if (!draft) {\n draft = [];\n }\n draft.push(newObject);\n });\n this.props.onChange(newRows);\n }\n if (changed && this.props.onChange) {\n const changedIndex = parseInt(Object.keys(changed)[0], 10);\n const mergedObject = {\n ...this.props.rows[changedIndex],\n ...changed[changedIndex]\n };\n\n const newRows = produce(this.props.rows, draft => {\n draft[changedIndex] = mergedObject;\n });\n\n this.props.onChange(newRows);\n }\n if (deleted && this.props.onDelete) {\n this.props.onDelete(deleted[0]);\n }\n };\n\n changeAddedRows = (addedRows: any[]) => {\n this.setState({ addedRows });\n };\n\n changeEditingRowIds = (editingRowIds: any[]) => {\n this.setState({ editingRowIds });\n };\n\n changeRowChanges = (rowChanges: any) => {\n this.setState({ rowChanges });\n };\n\n validateEditedRow = (tableRow: any) => {\n const tempTableRow = cloneDeep(tableRow);\n const editedRowId = tableRow.rowId;\n const rowChanges: any = this.state.rowChanges;\n if (rowChanges[editedRowId]) {\n // when edited an existing row\n tempTableRow.row.checked =\n rowChanges[editedRowId].checked !== undefined\n ? rowChanges[editedRowId].checked\n : tempTableRow.row.checked;\n tempTableRow.row.description =\n rowChanges[editedRowId].description !== undefined\n ? rowChanges[editedRowId].description\n : tempTableRow.row.description;\n }\n\n if (\n tempTableRow.row.description === undefined ||\n tempTableRow.row.description === \"\"\n ) {\n notify(\"danger\", `Error Saving Row`, \"Description cannot be blank\");\n return false;\n }\n\n if (\n this.props.maxDescriptionLength &&\n tempTableRow.row.description.length > this.props.maxDescriptionLength\n ) {\n notify(\n \"danger\",\n `Error Saving Row`,\n `Description exceeded ${this.props.maxDescriptionLength} character length limit`\n );\n return false;\n }\n\n return true;\n };\n\n render() {\n const { rows = [] } = this.props;\n const adminFailure =\n !this.props.permissions?.admin && this.props.field?.adminOnly;\n const isAddEditDisplay = this.props.permissions?.write;\n const columns = this.getColumns();\n const { editingRowIds, rowChanges, addedRows } = this.state;\n const isDisabled = !isAddEditDisplay || adminFailure || this.props.isLocked;\n return (\n
\n \n \n {rows.length <= 0 && this.state.addedRows.length <= 0 && (\n \n )}\n {(rows.length > 0 || this.state.addedRows.length > 0) && (\n \n \n ({\n columnName: column.name,\n editingEnabled: !column.readOnly\n }))}\n />\n \n \n \n \n \n {(rows.length > 0 || this.state.addedRows.length > 0) && (\n \n TableCommandComponent({\n tableEditColumnProps: props,\n validationFunction: this.validateEditedRow,\n isDisabled\n })\n }\n cellComponent={CustomEditCellComponent}\n headerCellComponent={CustomEditCellHeaderComponent}\n />\n )}\n \n )}\n \n \n
\n );\n }\n\n EmptyCell = () => {\n const adminFailure =\n !this.props.permissions?.admin && this.props.field?.adminOnly;\n const isAddEditDisplay = this.props.permissions?.write;\n return this.state.addedRows.length === 0 ? (\n this.changeAddedRows([{}])}\n isAddEditDisplay={\n !this.props.isLocked && isAddEditDisplay && !adminFailure\n }\n />\n ) : null;\n };\n}\n\ninterface TableCommandComponentProps {\n tableEditColumnProps: TableEditColumn.CommandProps;\n validationFunction: (tableRow: any) => boolean;\n isDisabled: boolean | undefined;\n}\nconst TableCommandComponent = ({\n tableEditColumnProps,\n validationFunction,\n isDisabled\n}: TableCommandComponentProps) => {\n return (\n \n );\n};\n\nconst CheckListFormatter = ({\n row,\n value,\n column\n}: DataTypeProvider.ValueFormatterProps) => {\n if (!row || !value || value.length <= 0) {\n return
;\n }\n const data = checklistReducer(value);\n return (\n
\n \n
\n );\n};\n\nexport const CheckListProvider = () => {\n const { columns } = useTableContext();\n return React.useMemo(\n () => (\n column.type === DataColumnType.CheckList)\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nexport const checklistReducer = (\n value: any[]\n): { checked: number; notChecked: number } => {\n const defaultValue = { checked: 0, notChecked: 0 };\n if (!value) {\n return defaultValue;\n }\n return value.reduce(\n (acc: any, curr: any) => ({\n checked: acc.checked + (curr.checked ? 1 : 0),\n notChecked: acc.notChecked + (curr.checked ? 0 : 1)\n }),\n defaultValue\n );\n};\n\nconst mapStateToProps = (\n state: configuratingSettings.StateSlice & AccountStateSlice,\n props: TableProps\n) => ({\n permissions: accountSelectors.getPermissions(state),\n configuratingSettings: configSelectors.getConfigurationSettings(state),\n ...props\n});\n\nexport default connect(mapStateToProps, {})(CheckList);\n","import React from \"react\";\nimport { ConcreteColors } from \"hcss-components\";\nimport styled from \"styled-components\";\n\nexport interface RoadblockProps {\n as?: React.ElementType;\n}\n\nexport const Roadblock = (props: RoadblockProps) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nconst StyledRoadblockImage = styled.svg`\n & #bg,\n & #l_sh {\n fill: ${ConcreteColors.blue200};\n opacity: 0.2;\n }\n & #l_m,\n & #sh-1,\n & #sh-2 {\n fill: ${ConcreteColors.blue200};\n opacity: 0.3;\n }\n & #bg-highlight {\n fill: #ffffff;\n opacity: 0.5;\n }\n & #c-1,\n & #c-2 {\n fill: #ffffff;\n }\n & #stripes-1,\n & #stripes-2 {\n fill: #ff7861;\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { ExpandableContentStatus } from \"../../models/enums\";\n\ninterface HeaderProps {\n title: string;\n subtitle?: string;\n onPanelToggleRequested: (event: any) => void;\n alignRight?: boolean;\n activeWrapper?: React.ComponentType;\n panelStatus?: ExpandableContentStatus;\n}\n\nexport class SideNavigationHeader extends React.PureComponent {\n renderCollapsedPanelTitle = (): JSX.Element => {\n return (\n \n {this.props.title}\n {this.props.subtitle && (\n <>\n    •   \n {this.props.subtitle}\n \n )}\n \n );\n };\n\n isExpanded = () => {\n if (this.props.panelStatus) {\n return (\n this.props.panelStatus === ExpandableContentStatus.expanding ||\n this.props.panelStatus === ExpandableContentStatus.expanded\n );\n }\n return true;\n };\n\n render() {\n const TitleWrapper = this.props.activeWrapper || DefaultTitleWrapper;\n\n return (\n \n {this.isExpanded() && (\n \n {this.props.title}\n {this.props.children}\n \n )}\n\n {this.renderCollapsedPanelTitle()}\n \n \n
\n \n );\n }\n}\n\nconst DefaultTitleWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n`;\n\nexport const BaseHeader = styled.header`\n width: 100%;\n height: auto;\n overflow: visible;\n padding-left: 14px;\n padding-right: 14px\n min-height: 43px;\n\n .panel-title,\n .panel-desc,\n .panel-collapsed-title {\n transition: 0.2s;\n }\n\n & .panel-title {\n position: relative;\n }\n\n & .panel-collapsed-title {\n position: absolute;\n }\n\n & .panel-title,\n & .panel-collapsed-title {\n float: left;\n /* display: inline-block; */\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n color: #1e1e1e;\n white-space: nowrap;\n display: flex;\n justify-content: flex-end;\n align-items: center;\n }\n\n & .panel-display-toggle-button {\n display: inline-block;\n position: absolute;\n bottom: 10px;\n right: 10px;\n cursor: pointer;\n z-index: 5;\n color: #1e1e1e;\n transition: 0.7s;\n\n & > i {\n font-size: 14px;\n transition: 0.2s;\n height: 14px;\n }\n }\n\n & .panel-display-toggle-button:hover,\n & .panel-display-toggle-button:active {\n color: #404040;\n & > i {\n color: #0370f5;\n }\n }\n`;\n\nconst StyledHeader = styled(BaseHeader)`\n margin-bottom: 6px;\n\n & .panel-title {\n font-size: 14px;\n position: relative;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n & .panel-desc {\n font-size: 12px;\n display: inline-block;\n position: relative;\n width: 200px;\n color: ${props => props.theme.colors.neutral[1]};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n & .panel-collapsed-title {\n width: 248px;\n left: -107px;\n top: 126px;\n text-align: right;\n transform: rotate(-90deg);\n overflow: hidden;\n text-overflow: ellipsis;\n text-transform: none;\n }\n`;\n","import { useState, useEffect, useCallback } from \"react\";\nimport { ExpandableContentStatus } from \"../../models/enums\";\n\nexport interface UseSideNavigationOptions {\n onExpanded?: () => void;\n onExpanding?: () => void;\n onCollapsed?: () => void;\n onCollapsing?: () => void;\n}\n\nexport function useSideNavigation(\n startExpanded: boolean,\n options: UseSideNavigationOptions = {}\n) {\n const [panelStatus, setPanelStatus] = useState(\n startExpanded\n ? ExpandableContentStatus.expanded\n : ExpandableContentStatus.collapsed\n );\n\n useEffect(() => {\n if (panelStatus === ExpandableContentStatus.collapsing) {\n setTimeout(() => {\n setPanelStatus(ExpandableContentStatus.collapsed);\n if (options.onCollapsed) {\n options.onCollapsed();\n }\n }, 425);\n } else if (panelStatus === ExpandableContentStatus.expanding) {\n setTimeout(() => {\n setPanelStatus(ExpandableContentStatus.expanded);\n if (options.onExpanded) {\n options.onExpanded();\n }\n }, 425);\n }\n }, [panelStatus, options]);\n\n const toggle = useCallback(() => {\n let status: ExpandableContentStatus;\n\n if (panelStatus === ExpandableContentStatus.expanded) {\n status = ExpandableContentStatus.collapsing;\n if (options.onCollapsing) {\n options.onCollapsing();\n }\n } else {\n status = ExpandableContentStatus.expanding;\n if (options.onExpanding) {\n options.onExpanding();\n }\n }\n\n setPanelStatus(status);\n }, [panelStatus, options]);\n\n return { status: panelStatus, toggle };\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { SideNavigationHeader } from \"./Header\";\nimport { ExpandableContentStatus } from \"../../models/enums\";\n\nexport * from \"./use-side-navigation\";\n\ninterface Props {\n panelStatus: ExpandableContentStatus;\n panelActive: boolean;\n className?: string;\n onClick?: (event: any) => void;\n alignRight?: boolean;\n fullWidth?: boolean;\n style?: React.CSSProperties;\n}\nexport class SideNavigation extends React.PureComponent {\n static Header = SideNavigationHeader;\n // static Toolbar = SideNavigationToolbar;\n // static ToolbarMenu = SideNavigationToolbarMenu;\n // static Content = SideNavigationContent;\n\n render() {\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nconst BaseContainer = styled.div<{ alignRight?: boolean }>`\n position: relative;\n box-sizing: border-box;\n height: 100%;\n padding: 12px 14px 16px 0px;\n background: #ffffff;\n border-right: 2px solid #ececec;\n transition: 0.5s;\n\n &[data-panel-status=\"expanded\"] {\n overflow: visible;\n &:after {\n z-index: -2;\n }\n }\n &[data-panel-status=\"expanding\"] {\n overflow: hidden;\n }\n &[data-panel-status=\"collapsed\"] {\n overflow: hidden;\n }\n &[data-panel-status=\"collapsing\"] {\n overflow: hidden;\n }\n\n &[data-panel-status=\"expanded\"],\n &[data-panel-status=\"expanding\"],\n &[data-panel-status=\"collapsing\"] {\n & > header {\n .panel-collapsed-title {\n color: transparent;\n z-index: -2;\n }\n }\n\n &:after {\n opacity: 0;\n }\n }\n\n &[data-panel-status=\"expanding\"],\n &[data-panel-status=\"expanded\"] {\n .panel-display-toggle-button {\n transform: rotate(180deg);\n bottom: 9px;\n }\n }\n\n &[data-panel-status=\"collapsing\"],\n &[data-panel-status=\"collapsed\"] {\n padding: 12px 0 16px 0;\n\n & > header {\n .panel-title {\n color: transparent;\n }\n .panel-desc {\n color: transparent;\n }\n .panel-collapsed-title {\n cursor: pointer;\n transition: 0.4s;\n z-index: 5;\n }\n .panel-display-toggle-button {\n }\n }\n\n &:after {\n opacity: 1;\n }\n }\n\n &:after {\n content: \"\";\n position: absolute;\n background: #ffffff;\n top: 0;\n ${props => (props.alignRight ? `right` : `left`)}: 0;\n left: 0;\n width: 100%;\n height: 100%;\n transition: 0.5s;\n z-index: 4;\n }\n`;\n\nconst Container = styled(BaseContainer)<{ fullWidth?: boolean }>`\n display: flex;\n flex-direction: column;\n flex-wrap: nowrap;\n ${props => props.fullWidth && \"width: 100%;\"}\n\n &[data-panel-active=\"false\"] {\n width: 0px;\n margin-left: -40px;\n opacity: 0.5;\n }\n\n &[data-panel-status=\"collapsed\"],\n &[data-panel-status=\"collapsing\"] {\n max-width: 34px;\n }\n &[data-panel-status=\"expanded\"],\n &[data-panel-status=\"expanding\"] {\n ${props => !props.fullWidth && \"max-width: 272px;\"};\n }\n\n /* Compatibility fixes for IE 11 */\n body.ie-compatibility-mode &[data-panel-status=\"expanded\"],\n body.ie-compatibility-mode &[data-panel-status=\"expanding\"] {\n ${props => !props.fullWidth && \"max-width: 272px;\"};\n }\n\n body.ie-compatibility-mode &[data-panel-status=\"collapsed\"],\n body.ie-compatibility-mode &[data-panel-status=\"collapsing\"] {\n max-width: 34px;\n }\n`;\n\nexport const SideNavigationWrapper = styled.div`\n display: flex;\n position: relative;\n flex-direction: row;\n flex-wrap: nowrap;\n width: auto;\n background: #ffffff;\n height: calc(100vh - 45px);\n\n @media print {\n display: none;\n }\n\n /* Compatibility fixes for IE 11 */\n body.ie-compatibility-mode & {\n flex-shrink: 0;\n }\n`;\n","import { Button, Icon } from \"hcss-components\";\nimport * as React from \"react\";\nimport { strings } from \"localization\";\n\nexport default function BackButton({ buttonLabel, ...props }: any) {\n return (\n \n );\n}\n","import {\n Table,\n TableCell,\n TableHead,\n TableRow,\n Tooltip,\n Typography\n} from \"@mui/material\";\nimport { ConcreteColors } from \"hcss-components\";\nimport React, { useEffect, useRef, useState } from \"react\";\nimport styled from \"styled-components\";\n\nexport const StyledTableCell = styled(TableCell)`\n padding: 0 16px;\n color: #555;\n font-family: Inter;\n font-size: 16px;\n font-style: normal;\n font-weight: 400;\n line-height: normal;\n border-bottom: 1px solid rgba(217, 217, 217, 0.6);\n box-sizing: border-box;\n\n &.sticky-left {\n position: sticky;\n left: 0;\n border-right: 1px solid rgba(217, 217, 217, 0.6);\n zindex: 9999 !important;\n }\n\n &.sticky-right {\n position: sticky;\n right: 0;\n border-left: 1px solid rgba(217, 217, 217, 0.6);\n zindex: 9999 !important;\n }\n`;\nexport const TableHeaderLabel = ({\n children,\n fontSize\n}: {\n children: string;\n fontSize?: number;\n}) => (\n \n {children}\n \n);\n\nexport const StyledTableRow = styled(TableRow)`\n background: #fff;\n height: 48px;\n border: none;\n`;\n\nexport const StyledTableHead = styled(TableHead)`\n height: 48px;\n`;\n\nexport const StyledFixedTable = styled(Table)`\n table-layout: fixed;\n overflow: auto;\n height: 1px;\n`;\n\nexport const CellContainer = ({\n children,\n tootlip,\n style\n}: {\n children: React.ReactNode | React.ReactNode[];\n tootlip?: React.ReactNode | React.ReactNode[];\n style?: React.CSSProperties;\n}) => {\n const [isOverflow, setIsOverflow] = useState(false);\n const textElementRef = useRef(null);\n\n useEffect(() => {\n if (!textElementRef.current) {\n return;\n }\n\n setIsOverflow(\n textElementRef.current.scrollWidth > textElementRef.current.clientWidth\n );\n }, []);\n\n return (\n \n \n {children}\n \n \n );\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { SchemaFormFieldInputProps } from \"./common\";\nimport { preconIdToString, parsePreConId, PreConId } from \"modules/projects\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\n\nexport interface PreConIdInputBaseProps\n extends Omit<\n React.DetailedHTMLProps<\n React.InputHTMLAttributes,\n HTMLInputElement\n >,\n \"value\" | \"onChange\" | \"disabled\"\n > {\n value: PreConId | null;\n onChange: (value: PreConId | null) => void;\n disabled?: boolean;\n}\n\nexport const PreConIdInputBase = ({\n value,\n onChange,\n disabled,\n ...other\n}: PreConIdInputBaseProps) => {\n const [cursor, setCursor] = useState(null);\n const ref = useRef(null);\n\n //const handleChange = (stringValue: string, uppercase: boolean) => {\n // const normalizedValue = uppercase ? stringValue.toUpperCase() : stringValue;\n // const parsedId = parsePreConId(normalizedValue);\n // onChange(parsedId);\n //};\n\n useEffect(() => {\n const input = ref.current;\n if (input) input.setSelectionRange(cursor, cursor);\n }, [ref, cursor, value]);\n\n const handleChange = (e: any) => {\n setCursor(e.target.selectionStart);\n const parsedId = parsePreConId(e.target.value);\n onChange(parsedId);\n };\n\n return (\n \n );\n};\n\nexport const PreConIdInput = (props: SchemaFormFieldInputProps) => {\n const {\n form: { setFieldValue },\n field,\n schemaField: { adminOnly },\n isLocked\n } = props;\n\n const permissions = usePermissions();\n const authorization = useAuthorization();\n const adminFailure = !permissions.admin && adminOnly;\n const fieldIsEditable =\n !isLocked &&\n permissions.write &&\n authorization.canAccessLimitedPrecon &&\n !adminFailure;\n\n return (\n \n setFieldValue(\"preconId\", preconId)\n }\n />\n );\n};\n","import {\n collection,\n deleteDoc,\n doc,\n getDoc,\n getDocs,\n getFirestore,\n query,\n setDoc,\n where\n} from \"firebase/firestore\";\nimport axios from \"axios\";\nimport config from \"../../../config\";\nimport { firebaseApp } from \"../../../firebase-app\";\nimport { isUndefined, omitBy, omit } from \"lodash-es\";\nimport { MasterSolicitation, MasterSolicitationEntity } from \"core\";\n\nconst db = getFirestore(firebaseApp);\nconst collectionId = \"masterSolicitations\";\n\nexport const MasterSolicitationRepo = {\n generateId: () => {\n return doc(collection(db, collectionId)).id;\n },\n\n getById: async (id: string) => {\n const ref = doc(collection(db, collectionId), id);\n\n try {\n const snap = await getDoc(ref);\n const data = snap.data() as MasterSolicitation;\n const entity: MasterSolicitationEntity = { ...data, id: ref.id };\n return entity;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n },\n\n getAll: async (\n companyId: string,\n estimateId?: string,\n projectId?: string\n ) => {\n const solicitations: MasterSolicitationEntity[] = [];\n\n const whereClauses = [];\n whereClauses.push(where(\"companyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n if (projectId) {\n whereClauses.push(where(\"projectId\", \"==\", projectId));\n }\n\n try {\n const q = query(collection(db, collectionId), ...whereClauses);\n const snap = await getDocs(q);\n for (const doc of snap.docs) {\n const data = doc.data() as MasterSolicitation;\n solicitations.push({ ...data, id: doc.id });\n }\n } catch (error) {\n console.error(error);\n }\n\n return solicitations;\n },\n\n subscribe: (companyId: string, estimateId?: string, projectId?: string) => {\n const whereClauses = [];\n whereClauses.push(where(\"companyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n if (projectId) {\n whereClauses.push(where(\"projectId\", \"==\", projectId));\n }\n\n const q = query(collection(db, collectionId), ...whereClauses);\n return q;\n },\n\n save: async (solicitation: MasterSolicitationEntity) => {\n const id = solicitation.id;\n const ref = doc(collection(db, collectionId), id);\n\n try {\n let doc = omitBy(solicitation, isUndefined);\n doc = omit(doc, [\"id\"]);\n await setDoc(ref, doc);\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n },\n\n delete: async (solicitation: MasterSolicitationEntity, token: string) => {\n const deleteFile = async (fileId: string) => {\n await axios.delete(config.endpoints.SMARTDRIVE + \"Files\", {\n headers: {\n Authorization: \"Bearer \" + token\n },\n params: {\n appId: config.keys.SMARTDRIVEAPPID,\n Id: fileId\n }\n });\n };\n\n const ref = doc(collection(db, collectionId), solicitation.id);\n\n try {\n const promises = solicitation.attachments.map(a => deleteFile(a.id));\n promises.push(deleteDoc(ref));\n await Promise.all(promises);\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n }\n};\n","import React, { useState, useEffect } from \"react\";\nimport numeral from \"numeral\";\nimport MaskedInput from \"react-text-mask\";\nimport createNumberMask from \"text-mask-addons/dist/createNumberMask\";\nimport { formatCurrency, formatNumber } from \"core\";\n\ninterface NumericInputProps {\n decimal: number;\n value: number;\n isCurrency: boolean;\n onChange: (value: number) => any;\n isReadOnly?: boolean;\n className?: string;\n}\n\nexport const NumericInput = ({\n decimal,\n isCurrency,\n value,\n onChange,\n isReadOnly,\n className\n}: NumericInputProps) => {\n const format = isCurrency ? formatCurrency : formatNumber;\n const formattedValue = format(value, decimal);\n\n const [fieldValue, setFieldValue] = useState(formattedValue);\n\n useEffect(() => {\n setFieldValue(formattedValue);\n }, [formattedValue]);\n\n const handleChange = (e: React.ChangeEvent) => {\n e.persist();\n const value: string = e.target.value;\n const numberValue = numeral(value).value();\n if (!isNaN(numberValue)) {\n setFieldValue(value);\n }\n };\n\n const handleBlur = () => {\n const updateVal = fieldValue === \"\" ? 0 : numeral(fieldValue).value();\n setFieldValue(format(updateVal, decimal));\n onChange(updateVal);\n };\n\n const handleFocus = () => {\n if (numeral(fieldValue).value() === 0) {\n setFieldValue(\"\");\n }\n };\n\n const numberMask = createNumberMask({\n allowDecimal: true,\n allowNegative: true,\n prefix: isCurrency ? \"$\" : \"\",\n decimalLimit: isCurrency ? 4 : 2,\n integerLimit: 10,\n allowLeadingZeroes: true\n });\n\n return (\n \n );\n};\n\nexport default NumericInput;\n","import { isEqual } from \"lodash-es\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useParams } from \"react-router-dom\";\nimport { PreConId, ProjectsApi, actions, selectors } from \"modules/projects\";\nimport { selectors as schemaSelectors } from \"modules/schemas\";\nimport {\n selectors as accountSelectors,\n useSelectedBusinessUnitId\n} from \"modules/account\";\nimport { FieldMetadata } from \"api\";\nimport { useCallback, useMemo, useState } from \"react\";\n\nexport function useGetCurrentProject() {\n const { id: projectId } = useParams<{ id: string }>();\n const projectLookup = useSelector(selectors.getProjectHash);\n\n return projectLookup[projectId];\n}\n\nexport const useProjectFieldsMetadata = (projectId: string) => {\n const dispatch = useDispatch();\n const projectsLookup = useSelector(selectors.getProjectHash);\n const projectsLookupPristine = useSelector(selectors.getProjectHashPristine);\n const projectSchemaLookup = useSelector(schemaSelectors.getProjectSchema)\n ?.fields;\n\n const projectFieldsMetadata = useMemo(\n () => projectsLookup[projectId]?.fieldsMetadata ?? {},\n [projectId, projectsLookup]\n );\n const projectFieldsMetadataPristine = useMemo(\n () => projectsLookupPristine[projectId]?.fieldsMetadata ?? {},\n [projectId, projectsLookupPristine]\n );\n\n const hasChanged = (() => {\n if (!projectId) return false;\n const oldFieldMetadata = Object.keys(projectFieldsMetadata)\n .filter(key => Object.keys(projectFieldsMetadataPristine).includes(key))\n .reduce((filteredObj, key) => {\n filteredObj[key] = projectFieldsMetadata[key];\n return filteredObj;\n }, {} as { [key: string]: any });\n const hasChangedInOldMetadata = !isEqual(\n oldFieldMetadata,\n projectFieldsMetadataPristine\n );\n\n const newFieldMetadataKeys = Object.keys(projectFieldsMetadata).filter(\n key => !Object.keys(projectFieldsMetadataPristine).includes(key)\n );\n const hasChangedInNewMetadata = newFieldMetadataKeys.some(\n key => projectFieldsMetadata[key]?.isLocked === true\n );\n return hasChangedInNewMetadata || hasChangedInOldMetadata;\n })();\n\n const checkIfFieldIsLocked = useMemo(\n () => (fieldId: string) => {\n if (!projectSchemaLookup || !projectFieldsMetadata[fieldId] || !projectId)\n return false;\n const fieldSchema = projectSchemaLookup[fieldId];\n return (\n fieldSchema.isLockable &&\n projectFieldsMetadata[fieldId].isLocked === true\n );\n },\n [projectSchemaLookup, projectFieldsMetadata, projectId]\n );\n\n const updateProjectFieldMetadata = useCallback(\n (fieldId: string, projectFieldMetadata: FieldMetadata) => {\n if (!projectId) return;\n dispatch(\n actions.updateProjectFieldMetadata(projectId, fieldId, {\n ...projectFieldMetadata\n })\n );\n },\n [projectId, dispatch]\n );\n\n const updateProjectMetadata = useCallback(\n (projectMetadata: { [key: string]: FieldMetadata }) => {\n if (!projectId) return;\n dispatch(actions.updateProjectMetadata(projectId, projectMetadata));\n },\n [projectId, dispatch]\n );\n\n return {\n projectFieldsMetadata,\n projectFieldsMetadataPristine,\n hasChanged,\n updateProjectMetadata,\n updateProjectFieldMetadata,\n checkIfFieldIsLocked\n };\n};\n\nexport const usePreConId = () => {\n const [preConId, setPreConId] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const dispatch = useDispatch();\n const token = useSelector(accountSelectors.getHcssToken);\n const businessUnitId = useSelectedBusinessUnitId();\n\n const projectSchema = useSelector(schemaSelectors.getProjectSchema);\n const isPreConIdDisabled =\n projectSchema?.fields?.[\"preconId\"]?.hiddenInForm &&\n projectSchema?.fields?.[\"preconId\"]?.hiddenInTable;\n\n const getAndReservePreConId = useCallback(async () => {\n if (isPreConIdDisabled) return;\n if (token) {\n try {\n const api = new ProjectsApi(token, businessUnitId);\n setIsLoading(true);\n const result = await api.getLastPreConIdAndReserveNext();\n if (Object.keys(result.data).length === 0) setPreConId(null);\n setPreConId(result.data);\n setIsLoading(false);\n return result.data;\n } catch (error) {\n setIsLoading(false);\n console.error(\"Failed to get and reserve PreCon Id.\");\n dispatch(actions.loadPreConID.failure(error as Error));\n }\n }\n }, [token, dispatch, isPreConIdDisabled, businessUnitId]);\n\n const discardReservedPreConId = useCallback(\n async (preConId: string) => {\n if (isPreConIdDisabled) return;\n if (token && preConId) {\n try {\n setIsLoading(true);\n const api = new ProjectsApi(token, businessUnitId);\n await api.discardReservedPreConId(preConId);\n setIsLoading(false);\n } catch (error) {\n setIsLoading(false);\n console.error(\"Failed to discard the reserved PreCon Id.\");\n dispatch(actions.loadPreConID.failure(error as Error));\n }\n }\n },\n [dispatch, token, isPreConIdDisabled, businessUnitId]\n );\n\n return {\n isLoading,\n preConId,\n getAndReservePreConId,\n discardReservedPreConId\n };\n};\n","import appconfig from \"../config\";\nimport getDefaultInstance from \"./AxiosInstance\";\nimport { ContactsClient } from \"./GeneratedClients/ContactsClient\";\n\nconst baseUrl: string = appconfig.endpoints.CONTACTS;\n\nexport default class ContactsApi extends ContactsClient {\n constructor(token: string, selectedBusinessUnitId: string) {\n const instance = getDefaultInstance(token);\n instance.interceptors.request.use(config => {\n config.headers[\"X-Requested-Business-Unit-Id\"] = selectedBusinessUnitId;\n return config;\n });\n\n super(baseUrl, instance);\n }\n}\n","/* tslint:disable */\n/* eslint-disable */\n//----------------------\n// \n// Generated using the NSwag toolchain v13.1.3.0 (NJsonSchema v10.0.27.0 (Newtonsoft.Json v11.0.0.0)) (http://NSwag.org)\n// \n//----------------------\n// ReSharper disable InconsistentNaming\n\nimport axios, { AxiosInstance, AxiosRequestConfig, AxiosResponse } from \"axios\";\n\nexport class EstimateHistoryClient {\n private instance: AxiosInstance;\n private baseUrl: string;\n protected jsonParseReviver:\n | ((key: string, value: any) => any)\n | undefined = undefined;\n\n constructor(baseUrl?: string, instance?: AxiosInstance) {\n this.instance = instance ? instance : axios.create();\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n estimates_GetEstimates(\n opts: ODataQueryOptionsOfEstimate | null,\n dto: string | null | undefined,\n activeEstimates: boolean | undefined,\n hideExcludedEstimates: boolean | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/estimates?\";\n if (dto !== undefined) url_ += \"dto=\" + encodeURIComponent(\"\" + dto) + \"&\";\n if (activeEstimates === null)\n throw new Error(\"The parameter 'activeEstimates' cannot be null.\");\n else if (activeEstimates !== undefined)\n url_ +=\n \"activeEstimates=\" + encodeURIComponent(\"\" + activeEstimates) + \"&\";\n if (hideExcludedEstimates === null)\n throw new Error(\"The parameter 'hideExcludedEstimates' cannot be null.\");\n else if (hideExcludedEstimates !== undefined)\n url_ +=\n \"hideExcludedEstimates=\" +\n encodeURIComponent(\"\" + hideExcludedEstimates) +\n \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(opts);\n\n let options_ = {\n data: content_,\n method: \"GET\",\n url: url_,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_GetEstimates(_response);\n });\n }\n\n protected processEstimates_GetEstimates(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(EstimateSummary.fromJS(item));\n }\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_GetEstimate(\n id: string,\n dto: string | null | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/estimates/{id}?\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n if (dto !== undefined) url_ += \"dto=\" + encodeURIComponent(\"\" + dto) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_GetEstimate(_response);\n });\n }\n\n protected processEstimates_GetEstimate(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = EstimateSummaryExtended.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_GetEstimateBlob(id: string): Promise {\n let url_ = this.baseUrl + \"/api/estimates/download/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n responseType: \"blob\",\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_GetEstimateBlob(_response);\n });\n }\n\n protected processEstimates_GetEstimateBlob(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers\n ? response.headers[\"content-disposition\"]\n : undefined;\n const fileNameMatch = contentDisposition\n ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition)\n : undefined;\n const fileName =\n fileNameMatch && fileNameMatch.length > 1\n ? fileNameMatch[1]\n : undefined;\n return Promise.resolve({\n fileName: fileName,\n status: status,\n data: response.data as Blob,\n headers: _headers\n });\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_PutEstimate(id: string, estimate: Estimate): Promise {\n let url_ = this.baseUrl + \"/api/estimates/{id}/{estimate}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n if (estimate === undefined || estimate === null)\n throw new Error(\"The parameter 'estimate' must be defined.\");\n url_ = url_.replace(\"{estimate}\", encodeURIComponent(\"\" + estimate));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"PUT\",\n url: url_,\n headers: {}\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_PutEstimate(_response);\n });\n }\n\n protected processEstimates_PutEstimate(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_PostExcluded(\n estimateToSet: EstimateExcluded | null\n ): Promise {\n let url_ = this.baseUrl + \"/api/estimates/excluded\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(estimateToSet);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_PostExcluded(_response);\n });\n }\n\n protected processEstimates_PostExcluded(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = Estimate.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_DeleteEstimateById(id: string): Promise {\n let url_ = this.baseUrl + \"/api/estimates/delete/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_DeleteEstimateById(_response);\n });\n }\n\n protected processEstimates_DeleteEstimateById(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = DeleteEstimateViewModel.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_DeleteEstimateByCode(\n code: string | null\n ): Promise {\n let url_ = this.baseUrl + \"/api/estimates/delete?\";\n if (code === undefined)\n throw new Error(\"The parameter 'code' must be defined.\");\n else url_ += \"code=\" + encodeURIComponent(\"\" + code) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_DeleteEstimateByCode(_response);\n });\n }\n\n protected processEstimates_DeleteEstimateByCode(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = DeleteEstimateViewModel.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_DoesEstimateCodesExist(\n codes: string[] | null | undefined,\n searchActiveEstimates: boolean | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/estimates/exist?\";\n if (codes !== undefined)\n codes &&\n codes.forEach(item => {\n url_ += \"codes=\" + encodeURIComponent(\"\" + item) + \"&\";\n });\n if (searchActiveEstimates === null)\n throw new Error(\"The parameter 'searchActiveEstimates' cannot be null.\");\n else if (searchActiveEstimates !== undefined)\n url_ +=\n \"searchActiveEstimates=\" +\n encodeURIComponent(\"\" + searchActiveEstimates) +\n \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_DoesEstimateCodesExist(_response);\n });\n }\n\n protected processEstimates_DoesEstimateCodesExist(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(EstimateExistViewModel.fromJS(item));\n }\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_GetEstimateIndex(\n opts: ODataQueryOptionsOfEstimate | null,\n code: string | null\n ): Promise {\n let url_ = this.baseUrl + \"/api/estimates/estimateindex?\";\n if (code === undefined)\n throw new Error(\"The parameter 'code' must be defined.\");\n else url_ += \"code=\" + encodeURIComponent(\"\" + code) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(opts);\n\n let options_ = {\n data: content_,\n method: \"GET\",\n url: url_,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_GetEstimateIndex(_response);\n });\n }\n\n protected processEstimates_GetEstimateIndex(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = EstimateIndex.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n estimates_GetEstimateBackupHash(estimateId: string): Promise {\n let url_ = this.baseUrl + \"/api/estimates/hash?\";\n if (estimateId === undefined || estimateId === null)\n throw new Error(\n \"The parameter 'estimateId' must be defined and cannot be null.\"\n );\n else url_ += \"estimateId=\" + encodeURIComponent(\"\" + estimateId) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processEstimates_GetEstimateBackupHash(_response);\n });\n }\n\n protected processEstimates_GetEstimateBackupHash(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = resultData200 !== undefined ? resultData200 : null;\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n insightsEstimates_GetEstimate(\n opts: ODataQueryOptionsOfEstimateFlattened | null,\n liveEstimates: boolean | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/insights/estimates?\";\n if (liveEstimates === null)\n throw new Error(\"The parameter 'liveEstimates' cannot be null.\");\n else if (liveEstimates !== undefined)\n url_ += \"liveEstimates=\" + encodeURIComponent(\"\" + liveEstimates) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(opts);\n\n let options_ = {\n data: content_,\n method: \"GET\",\n url: url_,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processInsightsEstimates_GetEstimate(_response);\n });\n }\n\n protected processInsightsEstimates_GetEstimate(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(EstimateFlattened.fromJS(item));\n }\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n insightsEstimates_GetReportsForEstimate(\n estimateId: string\n ): Promise {\n let url_ = this.baseUrl + \"/api/insights/estimates/reports?\";\n if (estimateId === undefined || estimateId === null)\n throw new Error(\n \"The parameter 'estimateId' must be defined and cannot be null.\"\n );\n else url_ += \"estimateId=\" + encodeURIComponent(\"\" + estimateId) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processInsightsEstimates_GetReportsForEstimate(_response);\n });\n }\n\n protected processInsightsEstimates_GetReportsForEstimate(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = ReportsDto.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n insightsEstimates_GetUniqueEstimateFilters(): Promise {\n let url_ = this.baseUrl + \"/api/insights/estimates/filters\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processInsightsEstimates_GetUniqueEstimateFilters(_response);\n });\n }\n\n protected processInsightsEstimates_GetUniqueEstimateFilters(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = UniqueEstimateFilters.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n insightsEstimates_PostExcluded(\n estimateToSet: EstimateExcluded | null\n ): Promise {\n let url_ = this.baseUrl + \"/api/insights/estimates/excluded\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(estimateToSet);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processInsightsEstimates_PostExcluded(_response);\n });\n }\n\n protected processInsightsEstimates_PostExcluded(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = Estimate.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteFolders_GetQuoteFolders(\n estimateId: string | null | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteFolders?\";\n if (estimateId !== undefined)\n url_ += \"estimateId=\" + encodeURIComponent(\"\" + estimateId) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteFolders_GetQuoteFolders(_response);\n });\n }\n\n protected processQuoteFolders_GetQuoteFolders(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(QuoteFolderSummaryDto.fromJS(item));\n }\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteFolders_CreateQuoteFolder(): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteFolders\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n responseType: \"blob\",\n method: \"POST\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteFolders_CreateQuoteFolder(_response);\n });\n }\n\n protected processQuoteFolders_CreateQuoteFolder(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers\n ? response.headers[\"content-disposition\"]\n : undefined;\n const fileNameMatch = contentDisposition\n ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition)\n : undefined;\n const fileName =\n fileNameMatch && fileNameMatch.length > 1\n ? fileNameMatch[1]\n : undefined;\n return Promise.resolve({\n fileName: fileName,\n status: status,\n data: response.data as Blob,\n headers: _headers\n });\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteFolders_GetQuoteFolder(id: string): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteFolders/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteFolders_GetQuoteFolder(_response);\n });\n }\n\n protected processQuoteFolders_GetQuoteFolder(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = QuoteFolderDto.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteFolders_UpdateQuoteFolder(id: string): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteFolders/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n responseType: \"blob\",\n method: \"PUT\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteFolders_UpdateQuoteFolder(_response);\n });\n }\n\n protected processQuoteFolders_UpdateQuoteFolder(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers\n ? response.headers[\"content-disposition\"]\n : undefined;\n const fileNameMatch = contentDisposition\n ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition)\n : undefined;\n const fileName =\n fileNameMatch && fileNameMatch.length > 1\n ? fileNameMatch[1]\n : undefined;\n return Promise.resolve({\n fileName: fileName,\n status: status,\n data: response.data as Blob,\n headers: _headers\n });\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteFolders_DeleteQuoteFolder(id: string): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteFolders/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n responseType: \"blob\",\n method: \"DELETE\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteFolders_DeleteQuoteFolder(_response);\n });\n }\n\n protected processQuoteFolders_DeleteQuoteFolder(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers\n ? response.headers[\"content-disposition\"]\n : undefined;\n const fileNameMatch = contentDisposition\n ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition)\n : undefined;\n const fileName =\n fileNameMatch && fileNameMatch.length > 1\n ? fileNameMatch[1]\n : undefined;\n return Promise.resolve({\n fileName: fileName,\n status: status,\n data: response.data as Blob,\n headers: _headers\n });\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteFolders_GetQuoteFoldersDetails(\n estimateId: string | null | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteFolders/details?\";\n if (estimateId !== undefined)\n url_ += \"estimateId=\" + encodeURIComponent(\"\" + estimateId) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteFolders_GetQuoteFoldersDetails(_response);\n });\n }\n\n protected processQuoteFolders_GetQuoteFoldersDetails(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(QuoteFolderDto.fromJS(item));\n }\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteMasters_GetQuoteMasterByEstimateCode(\n estimateCode: string\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteMasters/{estimateCode}\";\n if (estimateCode === undefined || estimateCode === null)\n throw new Error(\"The parameter 'estimateCode' must be defined.\");\n url_ = url_.replace(\n \"{estimateCode}\",\n encodeURIComponent(\"\" + estimateCode)\n );\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteMasters_GetQuoteMasterByEstimateCode(_response);\n });\n }\n\n protected processQuoteMasters_GetQuoteMasterByEstimateCode(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = QuoteMasterDto.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteMasters_SyncQuotesMaster(\n model: QuoteMasterDto | null\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteMasters\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(model);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteMasters_SyncQuotesMaster(_response);\n });\n }\n\n protected processQuoteMasters_SyncQuotesMaster(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = GenericResponse.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quotes_GetQuotes(): Promise {\n let url_ = this.baseUrl + \"/api/v1/quotes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n responseType: \"blob\",\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuotes_GetQuotes(_response);\n });\n }\n\n protected processQuotes_GetQuotes(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers\n ? response.headers[\"content-disposition\"]\n : undefined;\n const fileNameMatch = contentDisposition\n ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition)\n : undefined;\n const fileName =\n fileNameMatch && fileNameMatch.length > 1\n ? fileNameMatch[1]\n : undefined;\n return Promise.resolve({\n fileName: fileName,\n status: status,\n data: response.data as Blob,\n headers: _headers\n });\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quotes_CreateQuote(): Promise {\n let url_ = this.baseUrl + \"/api/v1/quotes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n url: url_,\n headers: {}\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuotes_CreateQuote(_response);\n });\n }\n\n protected processQuotes_CreateQuote(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quotes_GetQuote(id: string): Promise {\n let url_ = this.baseUrl + \"/api/v1/quotes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n responseType: \"blob\",\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuotes_GetQuote(_response);\n });\n }\n\n protected processQuotes_GetQuote(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers\n ? response.headers[\"content-disposition\"]\n : undefined;\n const fileNameMatch = contentDisposition\n ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition)\n : undefined;\n const fileName =\n fileNameMatch && fileNameMatch.length > 1\n ? fileNameMatch[1]\n : undefined;\n return Promise.resolve({\n fileName: fileName,\n status: status,\n data: response.data as Blob,\n headers: _headers\n });\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quotes_UpdateQuote(id: string): Promise {\n let url_ = this.baseUrl + \"/api/v1/quotes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"PUT\",\n url: url_,\n headers: {}\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuotes_UpdateQuote(_response);\n });\n }\n\n protected processQuotes_UpdateQuote(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quotes_DeleteQuote(id: string): Promise {\n let url_ = this.baseUrl + \"/api/v1/quotes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {}\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuotes_DeleteQuote(_response);\n });\n }\n\n protected processQuotes_DeleteQuote(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quotes_AcceptQuote(dto: AcceptQuoteDto | null): Promise {\n let url_ = this.baseUrl + \"/api/v1/quotes/accept\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(dto);\n\n let options_ = {\n data: content_,\n responseType: \"blob\",\n method: \"POST\",\n url: url_,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuotes_AcceptQuote(_response);\n });\n }\n\n protected processQuotes_AcceptQuote(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers\n ? response.headers[\"content-disposition\"]\n : undefined;\n const fileNameMatch = contentDisposition\n ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition)\n : undefined;\n const fileName =\n fileNameMatch && fileNameMatch.length > 1\n ? fileNameMatch[1]\n : undefined;\n return Promise.resolve({\n fileName: fileName,\n status: status,\n data: response.data as Blob,\n headers: _headers\n });\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteVendors_GetVendors(\n code: string | null | undefined,\n estimateId: string | null | undefined,\n folderId: string | null | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteVendors?\";\n if (code !== undefined)\n url_ += \"code=\" + encodeURIComponent(\"\" + code) + \"&\";\n if (estimateId !== undefined)\n url_ += \"estimateId=\" + encodeURIComponent(\"\" + estimateId) + \"&\";\n if (folderId !== undefined)\n url_ += \"folderId=\" + encodeURIComponent(\"\" + folderId) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteVendors_GetVendors(_response);\n });\n }\n\n protected processQuoteVendors_GetVendors(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(QuoteVendorSummaryDto.fromJS(item));\n }\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteVendors_CreateVendor(): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteVendors\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"POST\",\n url: url_,\n headers: {}\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteVendors_CreateVendor(_response);\n });\n }\n\n protected processQuoteVendors_CreateVendor(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteVendors_UpdateVendor(): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteVendors\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"PUT\",\n url: url_,\n headers: {}\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteVendors_UpdateVendor(_response);\n });\n }\n\n protected processQuoteVendors_UpdateVendor(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteVendors_DeleteVendor(): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteVendors\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {}\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteVendors_DeleteVendor(_response);\n });\n }\n\n protected processQuoteVendors_DeleteVendor(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteVendors_GetVendor(id: string): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteVendors/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteVendors_GetVendor(_response);\n });\n }\n\n protected processQuoteVendors_GetVendor(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = QuoteVendorDto.fromJS(resultData200);\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n quoteMasters_GetEstimatesPriceSyncStatus(): Promise {\n let url_ = this.baseUrl + \"/api/v1/quoteMasters/lastsyncedprices\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processQuoteMasters_GetEstimatesPriceSyncStatus(_response);\n });\n }\n\n protected processQuoteMasters_GetEstimatesPriceSyncStatus(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(EstimateSyncStatusDto.fromJS(item));\n }\n return result200;\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n storageReports_GetReport(\n estimateId: string,\n reportType: string | null\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/storage/reports?\";\n if (estimateId === undefined || estimateId === null)\n throw new Error(\n \"The parameter 'estimateId' must be defined and cannot be null.\"\n );\n else url_ += \"estimateId=\" + encodeURIComponent(\"\" + estimateId) + \"&\";\n if (reportType === undefined)\n throw new Error(\"The parameter 'reportType' must be defined.\");\n else url_ += \"reportType=\" + encodeURIComponent(\"\" + reportType) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n responseType: \"blob\",\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n }\n };\n\n return this.instance.request(options_).then((_response: AxiosResponse) => {\n return this.processStorageReports_GetReport(_response);\n });\n }\n\n protected processStorageReports_GetReport(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200 || status === 206) {\n const contentDisposition = response.headers\n ? response.headers[\"content-disposition\"]\n : undefined;\n const fileNameMatch = contentDisposition\n ? /filename=\"?([^\"]*?)\"?(;|$)/g.exec(contentDisposition)\n : undefined;\n const fileName =\n fileNameMatch && fileNameMatch.length > 1\n ? fileNameMatch[1]\n : undefined;\n return Promise.resolve({\n fileName: fileName,\n status: status,\n data: response.data as Blob,\n headers: _headers\n });\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n}\n\nexport class EstimateSummary implements IEstimateSummary {\n id!: string;\n code!: string;\n name!: string;\n processedStatus!: StatusCode;\n processedStatusFailureCode!: ProcessedEstimateFailureCode;\n estimateVersion?: string | undefined;\n bid_Date?: Date | undefined;\n start_Date?: Date | undefined;\n review_Date?: Date | undefined;\n created_Date?: Date | undefined;\n modified_Date?: Date | undefined;\n uploaded_Datetime?: Date | undefined;\n isExcludedEstimate!: boolean;\n\n constructor(data?: IEstimateSummary) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.processedStatus = _data[\"processedStatus\"];\n this.processedStatusFailureCode = _data[\"processedStatusFailureCode\"];\n this.estimateVersion = _data[\"estimateVersion\"];\n this.bid_Date = _data[\"bid_Date\"]\n ? new Date(_data[\"bid_Date\"].toString())\n : undefined;\n this.start_Date = _data[\"start_Date\"]\n ? new Date(_data[\"start_Date\"].toString())\n : undefined;\n this.review_Date = _data[\"review_Date\"]\n ? new Date(_data[\"review_Date\"].toString())\n : undefined;\n this.created_Date = _data[\"created_Date\"]\n ? new Date(_data[\"created_Date\"].toString())\n : undefined;\n this.modified_Date = _data[\"modified_Date\"]\n ? new Date(_data[\"modified_Date\"].toString())\n : undefined;\n this.uploaded_Datetime = _data[\"uploaded_Datetime\"]\n ? new Date(_data[\"uploaded_Datetime\"].toString())\n : undefined;\n this.isExcludedEstimate = _data[\"isExcludedEstimate\"];\n }\n }\n\n static fromJS(data: any): EstimateSummary {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateSummary();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"processedStatus\"] = this.processedStatus;\n data[\"processedStatusFailureCode\"] = this.processedStatusFailureCode;\n data[\"estimateVersion\"] = this.estimateVersion;\n data[\"bid_Date\"] = this.bid_Date\n ? this.bid_Date.toISOString()\n : undefined;\n data[\"start_Date\"] = this.start_Date\n ? this.start_Date.toISOString()\n : undefined;\n data[\"review_Date\"] = this.review_Date\n ? this.review_Date.toISOString()\n : undefined;\n data[\"created_Date\"] = this.created_Date\n ? this.created_Date.toISOString()\n : undefined;\n data[\"modified_Date\"] = this.modified_Date\n ? this.modified_Date.toISOString()\n : undefined;\n data[\"uploaded_Datetime\"] = this.uploaded_Datetime\n ? this.uploaded_Datetime.toISOString()\n : undefined;\n data[\"isExcludedEstimate\"] = this.isExcludedEstimate;\n return data;\n }\n}\n\nexport interface IEstimateSummary {\n id: string;\n code: string;\n name: string;\n processedStatus: StatusCode;\n processedStatusFailureCode: ProcessedEstimateFailureCode;\n estimateVersion?: string | undefined;\n bid_Date?: Date | undefined;\n start_Date?: Date | undefined;\n review_Date?: Date | undefined;\n created_Date?: Date | undefined;\n modified_Date?: Date | undefined;\n uploaded_Datetime?: Date | undefined;\n isExcludedEstimate: boolean;\n}\n\nexport enum StatusCode {\n Queued = 0,\n Processing = 1,\n Success = 2,\n Failure = 3,\n QueuedLarge = 4,\n TooLarge = 5\n}\n\nexport enum ProcessedEstimateFailureCode {\n None = 0,\n Unknown = 1,\n BlobStorage = 2,\n ExtractEstimateData = 3,\n SaveEstimateData = 4,\n Attachments = 5,\n ConcurrencyCheck = 6,\n EstimateNotFound = 7,\n UpdateEstimateData = 8,\n Reports = 9,\n EstimateUpload = 10\n}\n\n/** This defines a composite OData query options that can be used to perform query composition. Currently this only supports $filter, $orderby, $top, $skip, and $count. */\nexport class ODataQueryOptions implements IODataQueryOptions {\n /** Gets the given ODataQueryContext */\n context?: ODataQueryContext | undefined;\n /** Gets the request message associated with this instance. */\n request?: HttpRequestMessage | undefined;\n /** Gets the raw string of all the OData query options */\n rawValues?: ODataRawQueryOptions | undefined;\n /** Gets the SelectExpandQueryOption. */\n selectExpand?: SelectExpandQueryOption | undefined;\n apply?: ApplyQueryOption | undefined;\n /** Gets the FilterQueryOption. */\n filter?: FilterQueryOption | undefined;\n /** Gets the OrderByQueryOption. */\n orderBy?: OrderByQueryOption | undefined;\n /** Gets the SkipQueryOption. */\n skip?: SkipQueryOption | undefined;\n /** Gets the TopQueryOption. */\n top?: TopQueryOption | undefined;\n /** Gets the CountQueryOption. */\n count?: CountQueryOption | undefined;\n /** Gets or sets the query validator. */\n validator?: ODataQueryValidator | undefined;\n /** Gets the ETag from IfMatch header. */\n ifMatch?: ETag | undefined;\n /** Gets the ETag from IfNoneMatch header. */\n ifNoneMatch?: ETag | undefined;\n\n constructor(data?: IODataQueryOptions) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.context = _data[\"context\"]\n ? ODataQueryContext.fromJS(_data[\"context\"])\n : undefined;\n this.request = _data[\"request\"]\n ? HttpRequestMessage.fromJS(_data[\"request\"])\n : undefined;\n this.rawValues = _data[\"rawValues\"]\n ? ODataRawQueryOptions.fromJS(_data[\"rawValues\"])\n : undefined;\n this.selectExpand = _data[\"selectExpand\"]\n ? SelectExpandQueryOption.fromJS(_data[\"selectExpand\"])\n : undefined;\n this.apply = _data[\"apply\"]\n ? ApplyQueryOption.fromJS(_data[\"apply\"])\n : undefined;\n this.filter = _data[\"filter\"]\n ? FilterQueryOption.fromJS(_data[\"filter\"])\n : undefined;\n this.orderBy = _data[\"orderBy\"]\n ? OrderByQueryOption.fromJS(_data[\"orderBy\"])\n : undefined;\n this.skip = _data[\"skip\"]\n ? SkipQueryOption.fromJS(_data[\"skip\"])\n : undefined;\n this.top = _data[\"top\"]\n ? TopQueryOption.fromJS(_data[\"top\"])\n : undefined;\n this.count = _data[\"count\"]\n ? CountQueryOption.fromJS(_data[\"count\"])\n : undefined;\n this.validator = _data[\"validator\"]\n ? ODataQueryValidator.fromJS(_data[\"validator\"])\n : undefined;\n this.ifMatch = _data[\"ifMatch\"]\n ? ETag.fromJS(_data[\"ifMatch\"])\n : undefined;\n this.ifNoneMatch = _data[\"ifNoneMatch\"]\n ? ETag.fromJS(_data[\"ifNoneMatch\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): ODataQueryOptions {\n data = typeof data === \"object\" ? data : {};\n let result = new ODataQueryOptions();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"context\"] = this.context ? this.context.toJSON() : undefined;\n data[\"request\"] = this.request ? this.request.toJSON() : undefined;\n data[\"rawValues\"] = this.rawValues\n ? this.rawValues.toJSON()\n : undefined;\n data[\"selectExpand\"] = this.selectExpand\n ? this.selectExpand.toJSON()\n : undefined;\n data[\"apply\"] = this.apply ? this.apply.toJSON() : undefined;\n data[\"filter\"] = this.filter ? this.filter.toJSON() : undefined;\n data[\"orderBy\"] = this.orderBy ? this.orderBy.toJSON() : undefined;\n data[\"skip\"] = this.skip ? this.skip.toJSON() : undefined;\n data[\"top\"] = this.top ? this.top.toJSON() : undefined;\n data[\"count\"] = this.count ? this.count.toJSON() : undefined;\n data[\"validator\"] = this.validator\n ? this.validator.toJSON()\n : undefined;\n data[\"ifMatch\"] = this.ifMatch ? this.ifMatch.toJSON() : undefined;\n data[\"ifNoneMatch\"] = this.ifNoneMatch\n ? this.ifNoneMatch.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** This defines a composite OData query options that can be used to perform query composition. Currently this only supports $filter, $orderby, $top, $skip, and $count. */\nexport interface IODataQueryOptions {\n /** Gets the given ODataQueryContext */\n context?: ODataQueryContext | undefined;\n /** Gets the request message associated with this instance. */\n request?: HttpRequestMessage | undefined;\n /** Gets the raw string of all the OData query options */\n rawValues?: ODataRawQueryOptions | undefined;\n /** Gets the SelectExpandQueryOption. */\n selectExpand?: SelectExpandQueryOption | undefined;\n apply?: ApplyQueryOption | undefined;\n /** Gets the FilterQueryOption. */\n filter?: FilterQueryOption | undefined;\n /** Gets the OrderByQueryOption. */\n orderBy?: OrderByQueryOption | undefined;\n /** Gets the SkipQueryOption. */\n skip?: SkipQueryOption | undefined;\n /** Gets the TopQueryOption. */\n top?: TopQueryOption | undefined;\n /** Gets the CountQueryOption. */\n count?: CountQueryOption | undefined;\n /** Gets or sets the query validator. */\n validator?: ODataQueryValidator | undefined;\n /** Gets the ETag from IfMatch header. */\n ifMatch?: ETag | undefined;\n /** Gets the ETag from IfNoneMatch header. */\n ifNoneMatch?: ETag | undefined;\n}\n\nexport class ODataQueryOptionsOfEstimate extends ODataQueryOptions\n implements IODataQueryOptionsOfEstimate {\n ifMatch?: ETagOfEstimate | undefined;\n ifNoneMatch?: ETagOfEstimate | undefined;\n\n constructor(data?: IODataQueryOptionsOfEstimate) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.ifMatch = _data[\"ifMatch\"]\n ? ETagOfEstimate.fromJS(_data[\"ifMatch\"])\n : undefined;\n this.ifNoneMatch = _data[\"ifNoneMatch\"]\n ? ETagOfEstimate.fromJS(_data[\"ifNoneMatch\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): ODataQueryOptionsOfEstimate {\n data = typeof data === \"object\" ? data : {};\n let result = new ODataQueryOptionsOfEstimate();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"ifMatch\"] = this.ifMatch ? this.ifMatch.toJSON() : undefined;\n data[\"ifNoneMatch\"] = this.ifNoneMatch\n ? this.ifNoneMatch.toJSON()\n : undefined;\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IODataQueryOptionsOfEstimate extends IODataQueryOptions {\n ifMatch?: ETagOfEstimate | undefined;\n ifNoneMatch?: ETagOfEstimate | undefined;\n}\n\nexport class DynamicObject implements IDynamicObject {\n constructor(data?: IDynamicObject) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): DynamicObject {\n data = typeof data === \"object\" ? data : {};\n let result = new DynamicObject();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\nexport interface IDynamicObject {}\n\n/** The ETag parsed from request. */\nexport class ETag extends DynamicObject implements IETag {\n item?: any | undefined;\n /** Gets or sets whether the ETag is well-formed. */\n isWellFormed!: boolean;\n /** Gets or sets an entity type of the ETag. */\n entityType?: string | undefined;\n /** Gets or sets whether the ETag is corresponding to \"*\". */\n isAny!: boolean;\n isIfNoneMatch!: boolean;\n concurrencyProperties?: { [key: string]: any } | undefined;\n\n constructor(data?: IETag) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.item = _data[\"item\"];\n this.isWellFormed = _data[\"isWellFormed\"];\n this.entityType = _data[\"entityType\"];\n this.isAny = _data[\"isAny\"];\n this.isIfNoneMatch = _data[\"isIfNoneMatch\"];\n if (_data[\"concurrencyProperties\"]) {\n this.concurrencyProperties = {} as any;\n for (let key in _data[\"concurrencyProperties\"]) {\n if (_data[\"concurrencyProperties\"].hasOwnProperty(key))\n this.concurrencyProperties![key] =\n _data[\"concurrencyProperties\"][key];\n }\n }\n }\n }\n\n static fromJS(data: any): ETag {\n data = typeof data === \"object\" ? data : {};\n let result = new ETag();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"item\"] = this.item;\n data[\"isWellFormed\"] = this.isWellFormed;\n data[\"entityType\"] = this.entityType;\n data[\"isAny\"] = this.isAny;\n data[\"isIfNoneMatch\"] = this.isIfNoneMatch;\n if (this.concurrencyProperties) {\n data[\"concurrencyProperties\"] = {};\n for (let key in this.concurrencyProperties) {\n if (this.concurrencyProperties.hasOwnProperty(key))\n data[\"concurrencyProperties\"][key] = this.concurrencyProperties[key];\n }\n }\n super.toJSON(data);\n return data;\n }\n}\n\n/** The ETag parsed from request. */\nexport interface IETag extends IDynamicObject {\n item?: any | undefined;\n /** Gets or sets whether the ETag is well-formed. */\n isWellFormed: boolean;\n /** Gets or sets an entity type of the ETag. */\n entityType?: string | undefined;\n /** Gets or sets whether the ETag is corresponding to \"*\". */\n isAny: boolean;\n isIfNoneMatch: boolean;\n concurrencyProperties?: { [key: string]: any } | undefined;\n}\n\nexport class ETagOfEstimate extends ETag implements IETagOfEstimate {\n constructor(data?: IETagOfEstimate) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): ETagOfEstimate {\n data = typeof data === \"object\" ? data : {};\n let result = new ETagOfEstimate();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IETagOfEstimate extends IETag {}\n\n/** This defines some context information used to perform query composition. */\nexport class ODataQueryContext implements IODataQueryContext {\n defaultQuerySettings?: DefaultQuerySettings | undefined;\n /** Gets the given IEdmModel that contains the EntitySet. */\n model?: IEdmModel | undefined;\n /** Gets the IEdmType of the element. */\n elementType?: IEdmType | undefined;\n /** Gets the IEdmNavigationSource that contains the element. */\n navigationSource?: IEdmNavigationSource | undefined;\n /** Gets the CLR type of the element. */\n elementClrType?: string | undefined;\n /** Gets the ODataPath. */\n path?: ODataPath | undefined;\n requestContainer?: IServiceProvider | undefined;\n\n constructor(data?: IODataQueryContext) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.defaultQuerySettings = _data[\"defaultQuerySettings\"]\n ? DefaultQuerySettings.fromJS(_data[\"defaultQuerySettings\"])\n : undefined;\n this.model = _data[\"model\"]\n ? IEdmModel.fromJS(_data[\"model\"])\n : undefined;\n this.elementType = _data[\"elementType\"]\n ? IEdmType.fromJS(_data[\"elementType\"])\n : undefined;\n this.navigationSource = _data[\"navigationSource\"]\n ? IEdmNavigationSource.fromJS(_data[\"navigationSource\"])\n : undefined;\n this.elementClrType = _data[\"elementClrType\"];\n this.path = _data[\"path\"]\n ? ODataPath.fromJS(_data[\"path\"])\n : undefined;\n this.requestContainer = _data[\"requestContainer\"]\n ? IServiceProvider.fromJS(_data[\"requestContainer\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): ODataQueryContext {\n data = typeof data === \"object\" ? data : {};\n let result = new ODataQueryContext();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"defaultQuerySettings\"] = this.defaultQuerySettings\n ? this.defaultQuerySettings.toJSON()\n : undefined;\n data[\"model\"] = this.model ? this.model.toJSON() : undefined;\n data[\"elementType\"] = this.elementType\n ? this.elementType.toJSON()\n : undefined;\n data[\"navigationSource\"] = this.navigationSource\n ? this.navigationSource.toJSON()\n : undefined;\n data[\"elementClrType\"] = this.elementClrType;\n data[\"path\"] = this.path ? this.path.toJSON() : undefined;\n data[\"requestContainer\"] = this.requestContainer\n ? this.requestContainer.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** This defines some context information used to perform query composition. */\nexport interface IODataQueryContext {\n defaultQuerySettings?: DefaultQuerySettings | undefined;\n /** Gets the given IEdmModel that contains the EntitySet. */\n model?: IEdmModel | undefined;\n /** Gets the IEdmType of the element. */\n elementType?: IEdmType | undefined;\n /** Gets the IEdmNavigationSource that contains the element. */\n navigationSource?: IEdmNavigationSource | undefined;\n /** Gets the CLR type of the element. */\n elementClrType?: string | undefined;\n /** Gets the ODataPath. */\n path?: ODataPath | undefined;\n requestContainer?: IServiceProvider | undefined;\n}\n\nexport class DefaultQuerySettings implements IDefaultQuerySettings {\n enableExpand!: boolean;\n enableSelect!: boolean;\n enableCount!: boolean;\n enableOrderBy!: boolean;\n enableFilter!: boolean;\n maxTop?: number | undefined;\n\n constructor(data?: IDefaultQuerySettings) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.enableExpand = _data[\"enableExpand\"];\n this.enableSelect = _data[\"enableSelect\"];\n this.enableCount = _data[\"enableCount\"];\n this.enableOrderBy = _data[\"enableOrderBy\"];\n this.enableFilter = _data[\"enableFilter\"];\n this.maxTop = _data[\"maxTop\"];\n }\n }\n\n static fromJS(data: any): DefaultQuerySettings {\n data = typeof data === \"object\" ? data : {};\n let result = new DefaultQuerySettings();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"enableExpand\"] = this.enableExpand;\n data[\"enableSelect\"] = this.enableSelect;\n data[\"enableCount\"] = this.enableCount;\n data[\"enableOrderBy\"] = this.enableOrderBy;\n data[\"enableFilter\"] = this.enableFilter;\n data[\"maxTop\"] = this.maxTop;\n return data;\n }\n}\n\nexport interface IDefaultQuerySettings {\n enableExpand: boolean;\n enableSelect: boolean;\n enableCount: boolean;\n enableOrderBy: boolean;\n enableFilter: boolean;\n maxTop?: number | undefined;\n}\n\n/** Semantic representation of an EDM model. */\nexport abstract class IEdmModel implements IIEdmModel {\n /** Gets the collection of schema elements that are contained in this model. */\n schemaElements?: IEdmSchemaElement[] | undefined;\n /** Gets the collection of vocabulary annotations that are contained in this model. */\n vocabularyAnnotations?: IEdmVocabularyAnnotation[] | undefined;\n /** Gets the collection of models referred to by this model (mainly by the this.References). */\n referencedModels?: IEdmModel[] | undefined;\n /** Gets the collection of namespaces that schema elements use contained in this model. */\n declaredNamespaces?: string[] | undefined;\n /** Gets the model's annotations manager. */\n directValueAnnotationsManager?: IEdmDirectValueAnnotationsManager | undefined;\n /** Gets the only one entity container of the model. */\n entityContainer?: IEdmEntityContainer | undefined;\n\n constructor(data?: IIEdmModel) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"schemaElements\"])) {\n this.schemaElements = [] as any;\n for (let item of _data[\"schemaElements\"])\n this.schemaElements!.push(IEdmSchemaElement.fromJS(item));\n }\n if (Array.isArray(_data[\"vocabularyAnnotations\"])) {\n this.vocabularyAnnotations = [] as any;\n for (let item of _data[\"vocabularyAnnotations\"])\n this.vocabularyAnnotations!.push(\n IEdmVocabularyAnnotation.fromJS(item)\n );\n }\n if (Array.isArray(_data[\"referencedModels\"])) {\n this.referencedModels = [] as any;\n for (let item of _data[\"referencedModels\"])\n this.referencedModels!.push(IEdmModel.fromJS(item));\n }\n if (Array.isArray(_data[\"declaredNamespaces\"])) {\n this.declaredNamespaces = [] as any;\n for (let item of _data[\"declaredNamespaces\"])\n this.declaredNamespaces!.push(item);\n }\n this.directValueAnnotationsManager = _data[\n \"directValueAnnotationsManager\"\n ]\n ? IEdmDirectValueAnnotationsManager.fromJS(\n _data[\"directValueAnnotationsManager\"]\n )\n : undefined;\n this.entityContainer = _data[\"entityContainer\"]\n ? IEdmEntityContainer.fromJS(_data[\"entityContainer\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): IEdmModel {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\"The abstract class 'IEdmModel' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.schemaElements)) {\n data[\"schemaElements\"] = [];\n for (let item of this.schemaElements)\n data[\"schemaElements\"].push(item.toJSON());\n }\n if (Array.isArray(this.vocabularyAnnotations)) {\n data[\"vocabularyAnnotations\"] = [];\n for (let item of this.vocabularyAnnotations)\n data[\"vocabularyAnnotations\"].push(item.toJSON());\n }\n if (Array.isArray(this.referencedModels)) {\n data[\"referencedModels\"] = [];\n for (let item of this.referencedModels)\n data[\"referencedModels\"].push(item.toJSON());\n }\n if (Array.isArray(this.declaredNamespaces)) {\n data[\"declaredNamespaces\"] = [];\n for (let item of this.declaredNamespaces)\n data[\"declaredNamespaces\"].push(item);\n }\n data[\"directValueAnnotationsManager\"] = this.directValueAnnotationsManager\n ? this.directValueAnnotationsManager.toJSON()\n : undefined;\n data[\"entityContainer\"] = this.entityContainer\n ? this.entityContainer.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** Semantic representation of an EDM model. */\nexport interface IIEdmModel {\n /** Gets the collection of schema elements that are contained in this model. */\n schemaElements?: IEdmSchemaElement[] | undefined;\n /** Gets the collection of vocabulary annotations that are contained in this model. */\n vocabularyAnnotations?: IEdmVocabularyAnnotation[] | undefined;\n /** Gets the collection of models referred to by this model (mainly by the this.References). */\n referencedModels?: IEdmModel[] | undefined;\n /** Gets the collection of namespaces that schema elements use contained in this model. */\n declaredNamespaces?: string[] | undefined;\n /** Gets the model's annotations manager. */\n directValueAnnotationsManager?: IEdmDirectValueAnnotationsManager | undefined;\n /** Gets the only one entity container of the model. */\n entityContainer?: IEdmEntityContainer | undefined;\n}\n\n/** Common base interface for all named children of EDM schema. */\nexport abstract class IEdmSchemaElement implements IIEdmSchemaElement {\n /** Gets the kind of this schema element. */\n schemaElementKind!: EdmSchemaElementKind;\n /** Gets the namespace this schema element belongs to. */\n namespace?: string | undefined;\n\n constructor(data?: IIEdmSchemaElement) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.schemaElementKind = _data[\"schemaElementKind\"];\n this.namespace = _data[\"namespace\"];\n }\n }\n\n static fromJS(data: any): IEdmSchemaElement {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmSchemaElement' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"schemaElementKind\"] = this.schemaElementKind;\n data[\"namespace\"] = this.namespace;\n return data;\n }\n}\n\n/** Common base interface for all named children of EDM schema. */\nexport interface IIEdmSchemaElement {\n /** Gets the kind of this schema element. */\n schemaElementKind: EdmSchemaElementKind;\n /** Gets the namespace this schema element belongs to. */\n namespace?: string | undefined;\n}\n\n/** Defines EDM schema element types. */\nexport enum EdmSchemaElementKind {\n None = 0,\n TypeDefinition = 1,\n Term = 2,\n Action = 3,\n EntityContainer = 4,\n Function = 5\n}\n\n/** Represents an EDM vocabulary annotation. */\nexport abstract class IEdmVocabularyAnnotation\n implements IIEdmVocabularyAnnotation {\n /** Gets the qualifier used to discriminate between multiple bindings of the same property or type. */\n qualifier?: string | undefined;\n /** Gets the term bound by the annotation. */\n term?: IEdmTerm | undefined;\n /** Gets the element the annotation applies to. */\n target?: IEdmVocabularyAnnotatable | undefined;\n /** Gets the expression producing the value of the annotation. */\n value?: IEdmExpression | undefined;\n\n constructor(data?: IIEdmVocabularyAnnotation) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.qualifier = _data[\"qualifier\"];\n this.term = _data[\"term\"]\n ? IEdmTerm.fromJS(_data[\"term\"])\n : undefined;\n this.target = _data[\"target\"]\n ? IEdmVocabularyAnnotatable.fromJS(_data[\"target\"])\n : undefined;\n this.value = _data[\"value\"]\n ? IEdmExpression.fromJS(_data[\"value\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): IEdmVocabularyAnnotation {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmVocabularyAnnotation' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"qualifier\"] = this.qualifier;\n data[\"term\"] = this.term ? this.term.toJSON() : undefined;\n data[\"target\"] = this.target ? this.target.toJSON() : undefined;\n data[\"value\"] = this.value ? this.value.toJSON() : undefined;\n return data;\n }\n}\n\n/** Represents an EDM vocabulary annotation. */\nexport interface IIEdmVocabularyAnnotation {\n /** Gets the qualifier used to discriminate between multiple bindings of the same property or type. */\n qualifier?: string | undefined;\n /** Gets the term bound by the annotation. */\n term?: IEdmTerm | undefined;\n /** Gets the element the annotation applies to. */\n target?: IEdmVocabularyAnnotatable | undefined;\n /** Gets the expression producing the value of the annotation. */\n value?: IEdmExpression | undefined;\n}\n\n/** Represents an EDM term. */\nexport abstract class IEdmTerm implements IIEdmTerm {\n /** Gets the type of this term. */\n type?: IEdmTypeReference | undefined;\n /** Gets the AppliesTo of this term. */\n appliesTo?: string | undefined;\n /** Gets the DefaultValue of this term. */\n defaultValue?: string | undefined;\n\n constructor(data?: IIEdmTerm) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.type = _data[\"type\"]\n ? IEdmTypeReference.fromJS(_data[\"type\"])\n : undefined;\n this.appliesTo = _data[\"appliesTo\"];\n this.defaultValue = _data[\"defaultValue\"];\n }\n }\n\n static fromJS(data: any): IEdmTerm {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\"The abstract class 'IEdmTerm' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"type\"] = this.type ? this.type.toJSON() : undefined;\n data[\"appliesTo\"] = this.appliesTo;\n data[\"defaultValue\"] = this.defaultValue;\n return data;\n }\n}\n\n/** Represents an EDM term. */\nexport interface IIEdmTerm {\n /** Gets the type of this term. */\n type?: IEdmTypeReference | undefined;\n /** Gets the AppliesTo of this term. */\n appliesTo?: string | undefined;\n /** Gets the DefaultValue of this term. */\n defaultValue?: string | undefined;\n}\n\n/** Represents a references to a type. */\nexport abstract class IEdmTypeReference implements IIEdmTypeReference {\n /** Gets a value indicating whether this type is nullable. */\n isNullable!: boolean;\n /** Gets the definition to which this type refers. */\n definition?: IEdmType | undefined;\n\n constructor(data?: IIEdmTypeReference) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.isNullable = _data[\"isNullable\"];\n this.definition = _data[\"definition\"]\n ? IEdmType.fromJS(_data[\"definition\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): IEdmTypeReference {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmTypeReference' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"isNullable\"] = this.isNullable;\n data[\"definition\"] = this.definition\n ? this.definition.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** Represents a references to a type. */\nexport interface IIEdmTypeReference {\n /** Gets a value indicating whether this type is nullable. */\n isNullable: boolean;\n /** Gets the definition to which this type refers. */\n definition?: IEdmType | undefined;\n}\n\n/** Represents the definition of an EDM type. */\nexport abstract class IEdmType implements IIEdmType {\n /** Gets the kind of this type. */\n typeKind!: EdmTypeKind;\n\n constructor(data?: IIEdmType) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.typeKind = _data[\"typeKind\"];\n }\n }\n\n static fromJS(data: any): IEdmType {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\"The abstract class 'IEdmType' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"typeKind\"] = this.typeKind;\n return data;\n }\n}\n\n/** Represents the definition of an EDM type. */\nexport interface IIEdmType {\n /** Gets the kind of this type. */\n typeKind: EdmTypeKind;\n}\n\n/** Defines EDM metatypes. */\nexport enum EdmTypeKind {\n None = 0,\n Primitive = 1,\n Entity = 2,\n Complex = 3,\n Collection = 4,\n EntityReference = 5,\n Enum = 6,\n TypeDefinition = 7,\n Untyped = 8\n}\n\n/** Represents an element that can be targeted by Vocabulary Annotations */\nexport abstract class IEdmVocabularyAnnotatable\n implements IIEdmVocabularyAnnotatable {\n constructor(data?: IIEdmVocabularyAnnotatable) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): IEdmVocabularyAnnotatable {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmVocabularyAnnotatable' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Represents an element that can be targeted by Vocabulary Annotations */\nexport interface IIEdmVocabularyAnnotatable {}\n\n/** Represents an EDM expression. */\nexport abstract class IEdmExpression implements IIEdmExpression {\n /** Gets the kind of this expression. */\n expressionKind!: EdmExpressionKind;\n\n constructor(data?: IIEdmExpression) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.expressionKind = _data[\"expressionKind\"];\n }\n }\n\n static fromJS(data: any): IEdmExpression {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmExpression' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"expressionKind\"] = this.expressionKind;\n return data;\n }\n}\n\n/** Represents an EDM expression. */\nexport interface IIEdmExpression {\n /** Gets the kind of this expression. */\n expressionKind: EdmExpressionKind;\n}\n\n/** Defines EDM expression kinds. */\nexport enum EdmExpressionKind {\n None = 0,\n BinaryConstant = 1,\n BooleanConstant = 2,\n DateTimeOffsetConstant = 3,\n DecimalConstant = 4,\n FloatingConstant = 5,\n GuidConstant = 6,\n IntegerConstant = 7,\n StringConstant = 8,\n DurationConstant = 9,\n Null = 10,\n Record = 11,\n Collection = 12,\n Path = 13,\n If = 14,\n Cast = 15,\n IsType = 16,\n FunctionApplication = 17,\n LabeledExpressionReference = 18,\n Labeled = 19,\n PropertyPath = 20,\n NavigationPropertyPath = 21,\n DateConstant = 22,\n TimeOfDayConstant = 23,\n EnumMember = 24\n}\n\n/** Manages getting and setting direct annotations on EDM elements. */\nexport abstract class IEdmDirectValueAnnotationsManager\n implements IIEdmDirectValueAnnotationsManager {\n constructor(data?: IIEdmDirectValueAnnotationsManager) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): IEdmDirectValueAnnotationsManager {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmDirectValueAnnotationsManager' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Manages getting and setting direct annotations on EDM elements. */\nexport interface IIEdmDirectValueAnnotationsManager {}\n\n/** Represents an EDM entity container. */\nexport abstract class IEdmEntityContainer implements IIEdmEntityContainer {\n /** Gets a collection of the elements of this entity container. */\n elements?: IEdmEntityContainerElement[] | undefined;\n\n constructor(data?: IIEdmEntityContainer) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"elements\"])) {\n this.elements = [] as any;\n for (let item of _data[\"elements\"])\n this.elements!.push(IEdmEntityContainerElement.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): IEdmEntityContainer {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmEntityContainer' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.elements)) {\n data[\"elements\"] = [];\n for (let item of this.elements) data[\"elements\"].push(item.toJSON());\n }\n return data;\n }\n}\n\n/** Represents an EDM entity container. */\nexport interface IIEdmEntityContainer {\n /** Gets a collection of the elements of this entity container. */\n elements?: IEdmEntityContainerElement[] | undefined;\n}\n\n/** Represents the common elements of all EDM entity container elements. */\nexport abstract class IEdmEntityContainerElement\n implements IIEdmEntityContainerElement {\n /** Gets the kind of element of this container element. */\n containerElementKind!: EdmContainerElementKind;\n /** Gets the container that contains this element. */\n container?: IEdmEntityContainer | undefined;\n\n constructor(data?: IIEdmEntityContainerElement) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.containerElementKind = _data[\"containerElementKind\"];\n this.container = _data[\"container\"]\n ? IEdmEntityContainer.fromJS(_data[\"container\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): IEdmEntityContainerElement {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmEntityContainerElement' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"containerElementKind\"] = this.containerElementKind;\n data[\"container\"] = this.container\n ? this.container.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** Represents the common elements of all EDM entity container elements. */\nexport interface IIEdmEntityContainerElement {\n /** Gets the kind of element of this container element. */\n containerElementKind: EdmContainerElementKind;\n /** Gets the container that contains this element. */\n container?: IEdmEntityContainer | undefined;\n}\n\n/** Defines EDM container element types. */\nexport enum EdmContainerElementKind {\n None = 0,\n EntitySet = 1,\n ActionImport = 2,\n FunctionImport = 3,\n Singleton = 4\n}\n\n/** Represents an EDM navigation source. */\nexport abstract class IEdmNavigationSource implements IIEdmNavigationSource {\n /** Gets the navigation property bindings of this navigation source. */\n navigationPropertyBindings?: IEdmNavigationPropertyBinding[] | undefined;\n /** Gets the path of this navigation source. */\n path?: IEdmPathExpression | undefined;\n /** Gets the type of this navigation source. */\n type?: IEdmType | undefined;\n\n constructor(data?: IIEdmNavigationSource) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"navigationPropertyBindings\"])) {\n this.navigationPropertyBindings = [] as any;\n for (let item of _data[\"navigationPropertyBindings\"])\n this.navigationPropertyBindings!.push(\n IEdmNavigationPropertyBinding.fromJS(item)\n );\n }\n this.path = _data[\"path\"]\n ? IEdmPathExpression.fromJS(_data[\"path\"])\n : undefined;\n this.type = _data[\"type\"]\n ? IEdmType.fromJS(_data[\"type\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): IEdmNavigationSource {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmNavigationSource' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.navigationPropertyBindings)) {\n data[\"navigationPropertyBindings\"] = [];\n for (let item of this.navigationPropertyBindings)\n data[\"navigationPropertyBindings\"].push(item.toJSON());\n }\n data[\"path\"] = this.path ? this.path.toJSON() : undefined;\n data[\"type\"] = this.type ? this.type.toJSON() : undefined;\n return data;\n }\n}\n\n/** Represents an EDM navigation source. */\nexport interface IIEdmNavigationSource {\n /** Gets the navigation property bindings of this navigation source. */\n navigationPropertyBindings?: IEdmNavigationPropertyBinding[] | undefined;\n /** Gets the path of this navigation source. */\n path?: IEdmPathExpression | undefined;\n /** Gets the type of this navigation source. */\n type?: IEdmType | undefined;\n}\n\n/** Represents a binding from an EDM navigation property to a navigation source. */\nexport abstract class IEdmNavigationPropertyBinding\n implements IIEdmNavigationPropertyBinding {\n /** Gets the navigation property. */\n navigationProperty?: IEdmNavigationProperty | undefined;\n /** Gets the target navigation source. */\n target?: IEdmNavigationSource | undefined;\n /** Get the path that a navigation property targets. */\n path?: IEdmPathExpression | undefined;\n\n constructor(data?: IIEdmNavigationPropertyBinding) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.navigationProperty = _data[\"navigationProperty\"]\n ? IEdmNavigationProperty.fromJS(_data[\"navigationProperty\"])\n : undefined;\n this.target = _data[\"target\"]\n ? IEdmNavigationSource.fromJS(_data[\"target\"])\n : undefined;\n this.path = _data[\"path\"]\n ? IEdmPathExpression.fromJS(_data[\"path\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): IEdmNavigationPropertyBinding {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmNavigationPropertyBinding' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"navigationProperty\"] = this.navigationProperty\n ? this.navigationProperty.toJSON()\n : undefined;\n data[\"target\"] = this.target ? this.target.toJSON() : undefined;\n data[\"path\"] = this.path ? this.path.toJSON() : undefined;\n return data;\n }\n}\n\n/** Represents a binding from an EDM navigation property to a navigation source. */\nexport interface IIEdmNavigationPropertyBinding {\n /** Gets the navigation property. */\n navigationProperty?: IEdmNavigationProperty | undefined;\n /** Gets the target navigation source. */\n target?: IEdmNavigationSource | undefined;\n /** Get the path that a navigation property targets. */\n path?: IEdmPathExpression | undefined;\n}\n\n/** Represents an EDM navigation property. */\nexport abstract class IEdmNavigationProperty\n implements IIEdmNavigationProperty {\n /** Gets the partner of this navigation property. */\n partner?: IEdmNavigationProperty | undefined;\n /** Gets the action to execute on the deletion of this end of a bidirectional association. */\n onDelete!: EdmOnDeleteAction;\n /** Gets a value indicating whether the navigation target is contained inside the navigation source. */\n containsTarget!: boolean;\n /** Gets the referential constraint for this navigation, returning null if this is the principal end or if there is no referential constraint. */\n referentialConstraint?: IEdmReferentialConstraint | undefined;\n\n constructor(data?: IIEdmNavigationProperty) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.partner = _data[\"partner\"]\n ? IEdmNavigationProperty.fromJS(_data[\"partner\"])\n : undefined;\n this.onDelete = _data[\"onDelete\"];\n this.containsTarget = _data[\"containsTarget\"];\n this.referentialConstraint = _data[\"referentialConstraint\"]\n ? IEdmReferentialConstraint.fromJS(_data[\"referentialConstraint\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): IEdmNavigationProperty {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmNavigationProperty' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"partner\"] = this.partner ? this.partner.toJSON() : undefined;\n data[\"onDelete\"] = this.onDelete;\n data[\"containsTarget\"] = this.containsTarget;\n data[\"referentialConstraint\"] = this.referentialConstraint\n ? this.referentialConstraint.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** Represents an EDM navigation property. */\nexport interface IIEdmNavigationProperty {\n /** Gets the partner of this navigation property. */\n partner?: IEdmNavigationProperty | undefined;\n /** Gets the action to execute on the deletion of this end of a bidirectional association. */\n onDelete: EdmOnDeleteAction;\n /** Gets a value indicating whether the navigation target is contained inside the navigation source. */\n containsTarget: boolean;\n /** Gets the referential constraint for this navigation, returning null if this is the principal end or if there is no referential constraint. */\n referentialConstraint?: IEdmReferentialConstraint | undefined;\n}\n\n/** Enumerates the actions EDM can apply on deletes. */\nexport enum EdmOnDeleteAction {\n None = 0,\n Cascade = 1\n}\n\n/** Represents an EDM referential constraint on a navigation property. */\nexport abstract class IEdmReferentialConstraint\n implements IIEdmReferentialConstraint {\n /** Gets the set of property pairs from the referential constraint. No particular ordering should be assumed. */\n propertyPairs?: EdmReferentialConstraintPropertyPair[] | undefined;\n\n constructor(data?: IIEdmReferentialConstraint) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"propertyPairs\"])) {\n this.propertyPairs = [] as any;\n for (let item of _data[\"propertyPairs\"])\n this.propertyPairs!.push(\n EdmReferentialConstraintPropertyPair.fromJS(item)\n );\n }\n }\n }\n\n static fromJS(data: any): IEdmReferentialConstraint {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmReferentialConstraint' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.propertyPairs)) {\n data[\"propertyPairs\"] = [];\n for (let item of this.propertyPairs)\n data[\"propertyPairs\"].push(item.toJSON());\n }\n return data;\n }\n}\n\n/** Represents an EDM referential constraint on a navigation property. */\nexport interface IIEdmReferentialConstraint {\n /** Gets the set of property pairs from the referential constraint. No particular ordering should be assumed. */\n propertyPairs?: EdmReferentialConstraintPropertyPair[] | undefined;\n}\n\n/** Represents a pair of properties as part of a referential constraint. */\nexport class EdmReferentialConstraintPropertyPair\n implements IEdmReferentialConstraintPropertyPair {\n /** The local or dependent property in the referential constraint property pair. Will never be null. */\n dependentProperty?: IEdmStructuralProperty | undefined;\n /** The foreign or principal property in the referential constraint property pair. Will never be null. */\n principalProperty?: IEdmStructuralProperty | undefined;\n\n constructor(data?: IEdmReferentialConstraintPropertyPair) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.dependentProperty = _data[\"dependentProperty\"]\n ? IEdmStructuralProperty.fromJS(_data[\"dependentProperty\"])\n : undefined;\n this.principalProperty = _data[\"principalProperty\"]\n ? IEdmStructuralProperty.fromJS(_data[\"principalProperty\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): EdmReferentialConstraintPropertyPair {\n data = typeof data === \"object\" ? data : {};\n let result = new EdmReferentialConstraintPropertyPair();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"dependentProperty\"] = this.dependentProperty\n ? this.dependentProperty.toJSON()\n : undefined;\n data[\"principalProperty\"] = this.principalProperty\n ? this.principalProperty.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** Represents a pair of properties as part of a referential constraint. */\nexport interface IEdmReferentialConstraintPropertyPair {\n /** The local or dependent property in the referential constraint property pair. Will never be null. */\n dependentProperty?: IEdmStructuralProperty | undefined;\n /** The foreign or principal property in the referential constraint property pair. Will never be null. */\n principalProperty?: IEdmStructuralProperty | undefined;\n}\n\n/** Represents an EDM structural (i.e. non-navigation) property. */\nexport abstract class IEdmStructuralProperty\n implements IIEdmStructuralProperty {\n /** Gets the default value of this property. */\n defaultValueString?: string | undefined;\n\n constructor(data?: IIEdmStructuralProperty) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.defaultValueString = _data[\"defaultValueString\"];\n }\n }\n\n static fromJS(data: any): IEdmStructuralProperty {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmStructuralProperty' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"defaultValueString\"] = this.defaultValueString;\n return data;\n }\n}\n\n/** Represents an EDM structural (i.e. non-navigation) property. */\nexport interface IIEdmStructuralProperty {\n /** Gets the default value of this property. */\n defaultValueString?: string | undefined;\n}\n\n/** Represents an EDM path expression. */\nexport abstract class IEdmPathExpression implements IIEdmPathExpression {\n /** Gets the path segments as a decomposed qualified name. \"A.B/C/D.E\" is { \"A.B\", \"C\", \"D.E\" }. */\n pathSegments?: string[] | undefined;\n /** Gets the path string, like \"A.B/C/D.E\". */\n path?: string | undefined;\n\n constructor(data?: IIEdmPathExpression) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"pathSegments\"])) {\n this.pathSegments = [] as any;\n for (let item of _data[\"pathSegments\"]) this.pathSegments!.push(item);\n }\n this.path = _data[\"path\"];\n }\n }\n\n static fromJS(data: any): IEdmPathExpression {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IEdmPathExpression' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.pathSegments)) {\n data[\"pathSegments\"] = [];\n for (let item of this.pathSegments) data[\"pathSegments\"].push(item);\n }\n data[\"path\"] = this.path;\n return data;\n }\n}\n\n/** Represents an EDM path expression. */\nexport interface IIEdmPathExpression {\n /** Gets the path segments as a decomposed qualified name. \"A.B/C/D.E\" is { \"A.B\", \"C\", \"D.E\" }. */\n pathSegments?: string[] | undefined;\n /** Gets the path string, like \"A.B/C/D.E\". */\n path?: string | undefined;\n}\n\n/** Provides an object representation for an OData path with additional information about the EDM type and entity set for the path. */\nexport class ODataPath implements IODataPath {\n /** Gets or sets the EDM type of the path. */\n edmType?: IEdmType | undefined;\n /** Gets or sets the navigation source of the path. */\n navigationSource?: IEdmNavigationSource | undefined;\n /** Gets the path segments for the OData path. */\n segments?: ODataPathSegment[] | undefined;\n /** Gets the path template describing the types of segments in the path. */\n pathTemplate?: string | undefined;\n\n constructor(data?: IODataPath) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.edmType = _data[\"edmType\"]\n ? IEdmType.fromJS(_data[\"edmType\"])\n : undefined;\n this.navigationSource = _data[\"navigationSource\"]\n ? IEdmNavigationSource.fromJS(_data[\"navigationSource\"])\n : undefined;\n if (Array.isArray(_data[\"segments\"])) {\n this.segments = [] as any;\n for (let item of _data[\"segments\"])\n this.segments!.push(ODataPathSegment.fromJS(item));\n }\n this.pathTemplate = _data[\"pathTemplate\"];\n }\n }\n\n static fromJS(data: any): ODataPath {\n data = typeof data === \"object\" ? data : {};\n let result = new ODataPath();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"edmType\"] = this.edmType ? this.edmType.toJSON() : undefined;\n data[\"navigationSource\"] = this.navigationSource\n ? this.navigationSource.toJSON()\n : undefined;\n if (Array.isArray(this.segments)) {\n data[\"segments\"] = [];\n for (let item of this.segments) data[\"segments\"].push(item.toJSON());\n }\n data[\"pathTemplate\"] = this.pathTemplate;\n return data;\n }\n}\n\n/** Provides an object representation for an OData path with additional information about the EDM type and entity set for the path. */\nexport interface IODataPath {\n /** Gets or sets the EDM type of the path. */\n edmType?: IEdmType | undefined;\n /** Gets or sets the navigation source of the path. */\n navigationSource?: IEdmNavigationSource | undefined;\n /** Gets the path segments for the OData path. */\n segments?: ODataPathSegment[] | undefined;\n /** Gets the path template describing the types of segments in the path. */\n pathTemplate?: string | undefined;\n}\n\n/** The semantic representation of a segment in a path. */\nexport abstract class ODataPathSegment implements IODataPathSegment {\n /** Returns the identifier for this segment i.e. string part without the keys. */\n identifier?: string | undefined;\n\n constructor(data?: IODataPathSegment) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.identifier = _data[\"identifier\"];\n }\n }\n\n static fromJS(data: any): ODataPathSegment {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'ODataPathSegment' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"identifier\"] = this.identifier;\n return data;\n }\n}\n\n/** The semantic representation of a segment in a path. */\nexport interface IODataPathSegment {\n /** Returns the identifier for this segment i.e. string part without the keys. */\n identifier?: string | undefined;\n}\n\nexport abstract class IServiceProvider implements IIServiceProvider {\n constructor(data?: IIServiceProvider) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): IServiceProvider {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'IServiceProvider' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\nexport interface IIServiceProvider {}\n\nexport class HttpRequestMessage implements IHttpRequestMessage {\n version?: Version | undefined;\n content?: HttpContent | undefined;\n method?: HttpMethod | undefined;\n requestUri?: string | undefined;\n headers?: HttpRequestHeaders | undefined;\n properties?: { [key: string]: any } | undefined;\n\n constructor(data?: IHttpRequestMessage) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.version = _data[\"version\"]\n ? Version.fromJS(_data[\"version\"])\n : undefined;\n this.content = _data[\"content\"]\n ? HttpContent.fromJS(_data[\"content\"])\n : undefined;\n this.method = _data[\"method\"]\n ? HttpMethod.fromJS(_data[\"method\"])\n : undefined;\n this.requestUri = _data[\"requestUri\"];\n this.headers = _data[\"headers\"]\n ? HttpRequestHeaders.fromJS(_data[\"headers\"])\n : undefined;\n if (_data[\"properties\"]) {\n this.properties = {} as any;\n for (let key in _data[\"properties\"]) {\n if (_data[\"properties\"].hasOwnProperty(key))\n this.properties![key] = _data[\"properties\"][key];\n }\n }\n }\n }\n\n static fromJS(data: any): HttpRequestMessage {\n data = typeof data === \"object\" ? data : {};\n let result = new HttpRequestMessage();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"version\"] = this.version ? this.version.toJSON() : undefined;\n data[\"content\"] = this.content ? this.content.toJSON() : undefined;\n data[\"method\"] = this.method ? this.method.toJSON() : undefined;\n data[\"requestUri\"] = this.requestUri;\n data[\"headers\"] = this.headers ? this.headers.toJSON() : undefined;\n if (this.properties) {\n data[\"properties\"] = {};\n for (let key in this.properties) {\n if (this.properties.hasOwnProperty(key))\n data[\"properties\"][key] = this.properties[key];\n }\n }\n return data;\n }\n}\n\nexport interface IHttpRequestMessage {\n version?: Version | undefined;\n content?: HttpContent | undefined;\n method?: HttpMethod | undefined;\n requestUri?: string | undefined;\n headers?: HttpRequestHeaders | undefined;\n properties?: { [key: string]: any } | undefined;\n}\n\nexport class Version implements IVersion {\n major!: number;\n minor!: number;\n build!: number;\n revision!: number;\n majorRevision!: number;\n minorRevision!: number;\n\n constructor(data?: IVersion) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.major = _data[\"major\"];\n this.minor = _data[\"minor\"];\n this.build = _data[\"build\"];\n this.revision = _data[\"revision\"];\n this.majorRevision = _data[\"majorRevision\"];\n this.minorRevision = _data[\"minorRevision\"];\n }\n }\n\n static fromJS(data: any): Version {\n data = typeof data === \"object\" ? data : {};\n let result = new Version();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"major\"] = this.major;\n data[\"minor\"] = this.minor;\n data[\"build\"] = this.build;\n data[\"revision\"] = this.revision;\n data[\"majorRevision\"] = this.majorRevision;\n data[\"minorRevision\"] = this.minorRevision;\n return data;\n }\n}\n\nexport interface IVersion {\n major: number;\n minor: number;\n build: number;\n revision: number;\n majorRevision: number;\n minorRevision: number;\n}\n\nexport abstract class HttpContent implements IHttpContent {\n headers?: HttpContentHeaders | undefined;\n\n constructor(data?: IHttpContent) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.headers = _data[\"headers\"]\n ? HttpContentHeaders.fromJS(_data[\"headers\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): HttpContent {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\"The abstract class 'HttpContent' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"headers\"] = this.headers ? this.headers.toJSON() : undefined;\n return data;\n }\n}\n\nexport interface IHttpContent {\n headers?: HttpContentHeaders | undefined;\n}\n\nexport class Anonymous implements IAnonymous {\n allow?: string[] | undefined;\n contentDisposition?: ContentDispositionHeaderValue | undefined;\n contentEncoding?: string[] | undefined;\n contentLanguage?: string[] | undefined;\n contentLength?: number | undefined;\n contentLocation?: string | undefined;\n contentMD5?: string | undefined;\n contentRange?: ContentRangeHeaderValue | undefined;\n contentType?: MediaTypeHeaderValue | undefined;\n expires?: Date | undefined;\n lastModified?: Date | undefined;\n\n constructor(data?: IAnonymous) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"allow\"])) {\n this.allow = [] as any;\n for (let item of _data[\"allow\"]) this.allow!.push(item);\n }\n this.contentDisposition = _data[\"contentDisposition\"]\n ? ContentDispositionHeaderValue.fromJS(_data[\"contentDisposition\"])\n : undefined;\n if (Array.isArray(_data[\"contentEncoding\"])) {\n this.contentEncoding = [] as any;\n for (let item of _data[\"contentEncoding\"])\n this.contentEncoding!.push(item);\n }\n if (Array.isArray(_data[\"contentLanguage\"])) {\n this.contentLanguage = [] as any;\n for (let item of _data[\"contentLanguage\"])\n this.contentLanguage!.push(item);\n }\n this.contentLength = _data[\"contentLength\"];\n this.contentLocation = _data[\"contentLocation\"];\n this.contentMD5 = _data[\"contentMD5\"];\n this.contentRange = _data[\"contentRange\"]\n ? ContentRangeHeaderValue.fromJS(_data[\"contentRange\"])\n : undefined;\n this.contentType = _data[\"contentType\"]\n ? MediaTypeHeaderValue.fromJS(_data[\"contentType\"])\n : undefined;\n this.expires = _data[\"expires\"]\n ? new Date(_data[\"expires\"].toString())\n : undefined;\n this.lastModified = _data[\"lastModified\"]\n ? new Date(_data[\"lastModified\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): Anonymous {\n data = typeof data === \"object\" ? data : {};\n let result = new Anonymous();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.allow)) {\n data[\"allow\"] = [];\n for (let item of this.allow) data[\"allow\"].push(item);\n }\n data[\"contentDisposition\"] = this.contentDisposition\n ? this.contentDisposition.toJSON()\n : undefined;\n if (Array.isArray(this.contentEncoding)) {\n data[\"contentEncoding\"] = [];\n for (let item of this.contentEncoding) data[\"contentEncoding\"].push(item);\n }\n if (Array.isArray(this.contentLanguage)) {\n data[\"contentLanguage\"] = [];\n for (let item of this.contentLanguage) data[\"contentLanguage\"].push(item);\n }\n data[\"contentLength\"] = this.contentLength;\n data[\"contentLocation\"] = this.contentLocation;\n data[\"contentMD5\"] = this.contentMD5;\n data[\"contentRange\"] = this.contentRange\n ? this.contentRange.toJSON()\n : undefined;\n data[\"contentType\"] = this.contentType\n ? this.contentType.toJSON()\n : undefined;\n data[\"expires\"] = this.expires\n ? this.expires.toISOString()\n : undefined;\n data[\"lastModified\"] = this.lastModified\n ? this.lastModified.toISOString()\n : undefined;\n return data;\n }\n}\n\nexport interface IAnonymous {\n allow?: string[] | undefined;\n contentDisposition?: ContentDispositionHeaderValue | undefined;\n contentEncoding?: string[] | undefined;\n contentLanguage?: string[] | undefined;\n contentLength?: number | undefined;\n contentLocation?: string | undefined;\n contentMD5?: string | undefined;\n contentRange?: ContentRangeHeaderValue | undefined;\n contentType?: MediaTypeHeaderValue | undefined;\n expires?: Date | undefined;\n lastModified?: Date | undefined;\n}\n\nexport class HttpContentHeaders extends Anonymous\n implements IHttpContentHeaders {\n constructor(data?: IHttpContentHeaders) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): HttpContentHeaders {\n data = typeof data === \"object\" ? data : {};\n let result = new HttpContentHeaders();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IHttpContentHeaders extends IAnonymous {}\n\nexport class ContentDispositionHeaderValue\n implements IContentDispositionHeaderValue {\n dispositionType?: string | undefined;\n parameters?: NameValueHeaderValue[] | undefined;\n name?: string | undefined;\n fileName?: string | undefined;\n fileNameStar?: string | undefined;\n creationDate?: Date | undefined;\n modificationDate?: Date | undefined;\n readDate?: Date | undefined;\n size?: number | undefined;\n\n constructor(data?: IContentDispositionHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.dispositionType = _data[\"dispositionType\"];\n if (Array.isArray(_data[\"parameters\"])) {\n this.parameters = [] as any;\n for (let item of _data[\"parameters\"])\n this.parameters!.push(NameValueHeaderValue.fromJS(item));\n }\n this.name = _data[\"name\"];\n this.fileName = _data[\"fileName\"];\n this.fileNameStar = _data[\"fileNameStar\"];\n this.creationDate = _data[\"creationDate\"]\n ? new Date(_data[\"creationDate\"].toString())\n : undefined;\n this.modificationDate = _data[\"modificationDate\"]\n ? new Date(_data[\"modificationDate\"].toString())\n : undefined;\n this.readDate = _data[\"readDate\"]\n ? new Date(_data[\"readDate\"].toString())\n : undefined;\n this.size = _data[\"size\"];\n }\n }\n\n static fromJS(data: any): ContentDispositionHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new ContentDispositionHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"dispositionType\"] = this.dispositionType;\n if (Array.isArray(this.parameters)) {\n data[\"parameters\"] = [];\n for (let item of this.parameters) data[\"parameters\"].push(item.toJSON());\n }\n data[\"name\"] = this.name;\n data[\"fileName\"] = this.fileName;\n data[\"fileNameStar\"] = this.fileNameStar;\n data[\"creationDate\"] = this.creationDate\n ? this.creationDate.toISOString()\n : undefined;\n data[\"modificationDate\"] = this.modificationDate\n ? this.modificationDate.toISOString()\n : undefined;\n data[\"readDate\"] = this.readDate\n ? this.readDate.toISOString()\n : undefined;\n data[\"size\"] = this.size;\n return data;\n }\n}\n\nexport interface IContentDispositionHeaderValue {\n dispositionType?: string | undefined;\n parameters?: NameValueHeaderValue[] | undefined;\n name?: string | undefined;\n fileName?: string | undefined;\n fileNameStar?: string | undefined;\n creationDate?: Date | undefined;\n modificationDate?: Date | undefined;\n readDate?: Date | undefined;\n size?: number | undefined;\n}\n\nexport class NameValueHeaderValue implements INameValueHeaderValue {\n name?: string | undefined;\n value?: string | undefined;\n\n constructor(data?: INameValueHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.name = _data[\"name\"];\n this.value = _data[\"value\"];\n }\n }\n\n static fromJS(data: any): NameValueHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new NameValueHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"name\"] = this.name;\n data[\"value\"] = this.value;\n return data;\n }\n}\n\nexport interface INameValueHeaderValue {\n name?: string | undefined;\n value?: string | undefined;\n}\n\nexport class ContentRangeHeaderValue implements IContentRangeHeaderValue {\n unit?: string | undefined;\n from?: number | undefined;\n to?: number | undefined;\n length?: number | undefined;\n hasLength!: boolean;\n hasRange!: boolean;\n\n constructor(data?: IContentRangeHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.unit = _data[\"unit\"];\n this.from = _data[\"from\"];\n this.to = _data[\"to\"];\n this.length = _data[\"length\"];\n this.hasLength = _data[\"hasLength\"];\n this.hasRange = _data[\"hasRange\"];\n }\n }\n\n static fromJS(data: any): ContentRangeHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new ContentRangeHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"unit\"] = this.unit;\n data[\"from\"] = this.from;\n data[\"to\"] = this.to;\n data[\"length\"] = this.length;\n data[\"hasLength\"] = this.hasLength;\n data[\"hasRange\"] = this.hasRange;\n return data;\n }\n}\n\nexport interface IContentRangeHeaderValue {\n unit?: string | undefined;\n from?: number | undefined;\n to?: number | undefined;\n length?: number | undefined;\n hasLength: boolean;\n hasRange: boolean;\n}\n\nexport class MediaTypeHeaderValue implements IMediaTypeHeaderValue {\n charSet?: string | undefined;\n parameters?: NameValueHeaderValue[] | undefined;\n mediaType?: string | undefined;\n\n constructor(data?: IMediaTypeHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.charSet = _data[\"charSet\"];\n if (Array.isArray(_data[\"parameters\"])) {\n this.parameters = [] as any;\n for (let item of _data[\"parameters\"])\n this.parameters!.push(NameValueHeaderValue.fromJS(item));\n }\n this.mediaType = _data[\"mediaType\"];\n }\n }\n\n static fromJS(data: any): MediaTypeHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new MediaTypeHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"charSet\"] = this.charSet;\n if (Array.isArray(this.parameters)) {\n data[\"parameters\"] = [];\n for (let item of this.parameters) data[\"parameters\"].push(item.toJSON());\n }\n data[\"mediaType\"] = this.mediaType;\n return data;\n }\n}\n\nexport interface IMediaTypeHeaderValue {\n charSet?: string | undefined;\n parameters?: NameValueHeaderValue[] | undefined;\n mediaType?: string | undefined;\n}\n\nexport class KeyValuePairOfStringAndIEnumerableOfString\n implements IKeyValuePairOfStringAndIEnumerableOfString {\n key?: string | undefined;\n value?: string[] | undefined;\n\n constructor(data?: IKeyValuePairOfStringAndIEnumerableOfString) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.key = _data[\"key\"];\n if (Array.isArray(_data[\"value\"])) {\n this.value = [] as any;\n for (let item of _data[\"value\"]) this.value!.push(item);\n }\n }\n }\n\n static fromJS(data: any): KeyValuePairOfStringAndIEnumerableOfString {\n data = typeof data === \"object\" ? data : {};\n let result = new KeyValuePairOfStringAndIEnumerableOfString();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"key\"] = this.key;\n if (Array.isArray(this.value)) {\n data[\"value\"] = [];\n for (let item of this.value) data[\"value\"].push(item);\n }\n return data;\n }\n}\n\nexport interface IKeyValuePairOfStringAndIEnumerableOfString {\n key?: string | undefined;\n value?: string[] | undefined;\n}\n\nexport class HttpMethod implements IHttpMethod {\n method?: string | undefined;\n\n constructor(data?: IHttpMethod) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.method = _data[\"method\"];\n }\n }\n\n static fromJS(data: any): HttpMethod {\n data = typeof data === \"object\" ? data : {};\n let result = new HttpMethod();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"method\"] = this.method;\n return data;\n }\n}\n\nexport interface IHttpMethod {\n method?: string | undefined;\n}\n\nexport class Anonymous2 implements IAnonymous2 {\n accept?: MediaTypeWithQualityHeaderValue[] | undefined;\n acceptCharset?: StringWithQualityHeaderValue[] | undefined;\n acceptEncoding?: StringWithQualityHeaderValue[] | undefined;\n acceptLanguage?: StringWithQualityHeaderValue[] | undefined;\n authorization?: AuthenticationHeaderValue | undefined;\n expect?: NameValueWithParametersHeaderValue[] | undefined;\n expectContinue?: boolean | undefined;\n from?: string | undefined;\n host?: string | undefined;\n ifMatch?: EntityTagHeaderValue[] | undefined;\n ifModifiedSince?: Date | undefined;\n ifNoneMatch?: EntityTagHeaderValue[] | undefined;\n ifRange?: RangeConditionHeaderValue | undefined;\n ifUnmodifiedSince?: Date | undefined;\n maxForwards?: number | undefined;\n proxyAuthorization?: AuthenticationHeaderValue | undefined;\n range?: RangeHeaderValue | undefined;\n referrer?: string | undefined;\n te?: TransferCodingWithQualityHeaderValue[] | undefined;\n userAgent?: ProductInfoHeaderValue[] | undefined;\n cacheControl?: CacheControlHeaderValue | undefined;\n connection?: string[] | undefined;\n connectionClose?: boolean | undefined;\n date?: Date | undefined;\n pragma?: NameValueHeaderValue[] | undefined;\n trailer?: string[] | undefined;\n transferEncoding?: TransferCodingHeaderValue[] | undefined;\n transferEncodingChunked?: boolean | undefined;\n upgrade?: ProductHeaderValue[] | undefined;\n via?: ViaHeaderValue[] | undefined;\n warning?: WarningHeaderValue[] | undefined;\n\n constructor(data?: IAnonymous2) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"accept\"])) {\n this.accept = [] as any;\n for (let item of _data[\"accept\"])\n this.accept!.push(MediaTypeWithQualityHeaderValue.fromJS(item));\n }\n if (Array.isArray(_data[\"acceptCharset\"])) {\n this.acceptCharset = [] as any;\n for (let item of _data[\"acceptCharset\"])\n this.acceptCharset!.push(StringWithQualityHeaderValue.fromJS(item));\n }\n if (Array.isArray(_data[\"acceptEncoding\"])) {\n this.acceptEncoding = [] as any;\n for (let item of _data[\"acceptEncoding\"])\n this.acceptEncoding!.push(StringWithQualityHeaderValue.fromJS(item));\n }\n if (Array.isArray(_data[\"acceptLanguage\"])) {\n this.acceptLanguage = [] as any;\n for (let item of _data[\"acceptLanguage\"])\n this.acceptLanguage!.push(StringWithQualityHeaderValue.fromJS(item));\n }\n this.authorization = _data[\"authorization\"]\n ? AuthenticationHeaderValue.fromJS(_data[\"authorization\"])\n : undefined;\n if (Array.isArray(_data[\"expect\"])) {\n this.expect = [] as any;\n for (let item of _data[\"expect\"])\n this.expect!.push(NameValueWithParametersHeaderValue.fromJS(item));\n }\n this.expectContinue = _data[\"expectContinue\"];\n this.from = _data[\"from\"];\n this.host = _data[\"host\"];\n if (Array.isArray(_data[\"ifMatch\"])) {\n this.ifMatch = [] as any;\n for (let item of _data[\"ifMatch\"])\n this.ifMatch!.push(EntityTagHeaderValue.fromJS(item));\n }\n this.ifModifiedSince = _data[\"ifModifiedSince\"]\n ? new Date(_data[\"ifModifiedSince\"].toString())\n : undefined;\n if (Array.isArray(_data[\"ifNoneMatch\"])) {\n this.ifNoneMatch = [] as any;\n for (let item of _data[\"ifNoneMatch\"])\n this.ifNoneMatch!.push(EntityTagHeaderValue.fromJS(item));\n }\n this.ifRange = _data[\"ifRange\"]\n ? RangeConditionHeaderValue.fromJS(_data[\"ifRange\"])\n : undefined;\n this.ifUnmodifiedSince = _data[\"ifUnmodifiedSince\"]\n ? new Date(_data[\"ifUnmodifiedSince\"].toString())\n : undefined;\n this.maxForwards = _data[\"maxForwards\"];\n this.proxyAuthorization = _data[\"proxyAuthorization\"]\n ? AuthenticationHeaderValue.fromJS(_data[\"proxyAuthorization\"])\n : undefined;\n this.range = _data[\"range\"]\n ? RangeHeaderValue.fromJS(_data[\"range\"])\n : undefined;\n this.referrer = _data[\"referrer\"];\n if (Array.isArray(_data[\"te\"])) {\n this.te = [] as any;\n for (let item of _data[\"te\"])\n this.te!.push(TransferCodingWithQualityHeaderValue.fromJS(item));\n }\n if (Array.isArray(_data[\"userAgent\"])) {\n this.userAgent = [] as any;\n for (let item of _data[\"userAgent\"])\n this.userAgent!.push(ProductInfoHeaderValue.fromJS(item));\n }\n this.cacheControl = _data[\"cacheControl\"]\n ? CacheControlHeaderValue.fromJS(_data[\"cacheControl\"])\n : undefined;\n if (Array.isArray(_data[\"connection\"])) {\n this.connection = [] as any;\n for (let item of _data[\"connection\"]) this.connection!.push(item);\n }\n this.connectionClose = _data[\"connectionClose\"];\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n if (Array.isArray(_data[\"pragma\"])) {\n this.pragma = [] as any;\n for (let item of _data[\"pragma\"])\n this.pragma!.push(NameValueHeaderValue.fromJS(item));\n }\n if (Array.isArray(_data[\"trailer\"])) {\n this.trailer = [] as any;\n for (let item of _data[\"trailer\"]) this.trailer!.push(item);\n }\n if (Array.isArray(_data[\"transferEncoding\"])) {\n this.transferEncoding = [] as any;\n for (let item of _data[\"transferEncoding\"])\n this.transferEncoding!.push(TransferCodingHeaderValue.fromJS(item));\n }\n this.transferEncodingChunked = _data[\"transferEncodingChunked\"];\n if (Array.isArray(_data[\"upgrade\"])) {\n this.upgrade = [] as any;\n for (let item of _data[\"upgrade\"])\n this.upgrade!.push(ProductHeaderValue.fromJS(item));\n }\n if (Array.isArray(_data[\"via\"])) {\n this.via = [] as any;\n for (let item of _data[\"via\"])\n this.via!.push(ViaHeaderValue.fromJS(item));\n }\n if (Array.isArray(_data[\"warning\"])) {\n this.warning = [] as any;\n for (let item of _data[\"warning\"])\n this.warning!.push(WarningHeaderValue.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): Anonymous2 {\n data = typeof data === \"object\" ? data : {};\n let result = new Anonymous2();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.accept)) {\n data[\"accept\"] = [];\n for (let item of this.accept) data[\"accept\"].push(item.toJSON());\n }\n if (Array.isArray(this.acceptCharset)) {\n data[\"acceptCharset\"] = [];\n for (let item of this.acceptCharset)\n data[\"acceptCharset\"].push(item.toJSON());\n }\n if (Array.isArray(this.acceptEncoding)) {\n data[\"acceptEncoding\"] = [];\n for (let item of this.acceptEncoding)\n data[\"acceptEncoding\"].push(item.toJSON());\n }\n if (Array.isArray(this.acceptLanguage)) {\n data[\"acceptLanguage\"] = [];\n for (let item of this.acceptLanguage)\n data[\"acceptLanguage\"].push(item.toJSON());\n }\n data[\"authorization\"] = this.authorization\n ? this.authorization.toJSON()\n : undefined;\n if (Array.isArray(this.expect)) {\n data[\"expect\"] = [];\n for (let item of this.expect) data[\"expect\"].push(item.toJSON());\n }\n data[\"expectContinue\"] = this.expectContinue;\n data[\"from\"] = this.from;\n data[\"host\"] = this.host;\n if (Array.isArray(this.ifMatch)) {\n data[\"ifMatch\"] = [];\n for (let item of this.ifMatch) data[\"ifMatch\"].push(item.toJSON());\n }\n data[\"ifModifiedSince\"] = this.ifModifiedSince\n ? this.ifModifiedSince.toISOString()\n : undefined;\n if (Array.isArray(this.ifNoneMatch)) {\n data[\"ifNoneMatch\"] = [];\n for (let item of this.ifNoneMatch)\n data[\"ifNoneMatch\"].push(item.toJSON());\n }\n data[\"ifRange\"] = this.ifRange ? this.ifRange.toJSON() : undefined;\n data[\"ifUnmodifiedSince\"] = this.ifUnmodifiedSince\n ? this.ifUnmodifiedSince.toISOString()\n : undefined;\n data[\"maxForwards\"] = this.maxForwards;\n data[\"proxyAuthorization\"] = this.proxyAuthorization\n ? this.proxyAuthorization.toJSON()\n : undefined;\n data[\"range\"] = this.range ? this.range.toJSON() : undefined;\n data[\"referrer\"] = this.referrer;\n if (Array.isArray(this.te)) {\n data[\"te\"] = [];\n for (let item of this.te) data[\"te\"].push(item.toJSON());\n }\n if (Array.isArray(this.userAgent)) {\n data[\"userAgent\"] = [];\n for (let item of this.userAgent) data[\"userAgent\"].push(item.toJSON());\n }\n data[\"cacheControl\"] = this.cacheControl\n ? this.cacheControl.toJSON()\n : undefined;\n if (Array.isArray(this.connection)) {\n data[\"connection\"] = [];\n for (let item of this.connection) data[\"connection\"].push(item);\n }\n data[\"connectionClose\"] = this.connectionClose;\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n if (Array.isArray(this.pragma)) {\n data[\"pragma\"] = [];\n for (let item of this.pragma) data[\"pragma\"].push(item.toJSON());\n }\n if (Array.isArray(this.trailer)) {\n data[\"trailer\"] = [];\n for (let item of this.trailer) data[\"trailer\"].push(item);\n }\n if (Array.isArray(this.transferEncoding)) {\n data[\"transferEncoding\"] = [];\n for (let item of this.transferEncoding)\n data[\"transferEncoding\"].push(item.toJSON());\n }\n data[\"transferEncodingChunked\"] = this.transferEncodingChunked;\n if (Array.isArray(this.upgrade)) {\n data[\"upgrade\"] = [];\n for (let item of this.upgrade) data[\"upgrade\"].push(item.toJSON());\n }\n if (Array.isArray(this.via)) {\n data[\"via\"] = [];\n for (let item of this.via) data[\"via\"].push(item.toJSON());\n }\n if (Array.isArray(this.warning)) {\n data[\"warning\"] = [];\n for (let item of this.warning) data[\"warning\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IAnonymous2 {\n accept?: MediaTypeWithQualityHeaderValue[] | undefined;\n acceptCharset?: StringWithQualityHeaderValue[] | undefined;\n acceptEncoding?: StringWithQualityHeaderValue[] | undefined;\n acceptLanguage?: StringWithQualityHeaderValue[] | undefined;\n authorization?: AuthenticationHeaderValue | undefined;\n expect?: NameValueWithParametersHeaderValue[] | undefined;\n expectContinue?: boolean | undefined;\n from?: string | undefined;\n host?: string | undefined;\n ifMatch?: EntityTagHeaderValue[] | undefined;\n ifModifiedSince?: Date | undefined;\n ifNoneMatch?: EntityTagHeaderValue[] | undefined;\n ifRange?: RangeConditionHeaderValue | undefined;\n ifUnmodifiedSince?: Date | undefined;\n maxForwards?: number | undefined;\n proxyAuthorization?: AuthenticationHeaderValue | undefined;\n range?: RangeHeaderValue | undefined;\n referrer?: string | undefined;\n te?: TransferCodingWithQualityHeaderValue[] | undefined;\n userAgent?: ProductInfoHeaderValue[] | undefined;\n cacheControl?: CacheControlHeaderValue | undefined;\n connection?: string[] | undefined;\n connectionClose?: boolean | undefined;\n date?: Date | undefined;\n pragma?: NameValueHeaderValue[] | undefined;\n trailer?: string[] | undefined;\n transferEncoding?: TransferCodingHeaderValue[] | undefined;\n transferEncodingChunked?: boolean | undefined;\n upgrade?: ProductHeaderValue[] | undefined;\n via?: ViaHeaderValue[] | undefined;\n warning?: WarningHeaderValue[] | undefined;\n}\n\nexport class HttpRequestHeaders extends Anonymous2\n implements IHttpRequestHeaders {\n constructor(data?: IHttpRequestHeaders) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): HttpRequestHeaders {\n data = typeof data === \"object\" ? data : {};\n let result = new HttpRequestHeaders();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IHttpRequestHeaders extends IAnonymous2 {}\n\nexport class MediaTypeWithQualityHeaderValue extends MediaTypeHeaderValue\n implements IMediaTypeWithQualityHeaderValue {\n quality?: number | undefined;\n\n constructor(data?: IMediaTypeWithQualityHeaderValue) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.quality = _data[\"quality\"];\n }\n }\n\n static fromJS(data: any): MediaTypeWithQualityHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new MediaTypeWithQualityHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"quality\"] = this.quality;\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IMediaTypeWithQualityHeaderValue\n extends IMediaTypeHeaderValue {\n quality?: number | undefined;\n}\n\nexport class StringWithQualityHeaderValue\n implements IStringWithQualityHeaderValue {\n value?: string | undefined;\n quality?: number | undefined;\n\n constructor(data?: IStringWithQualityHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.value = _data[\"value\"];\n this.quality = _data[\"quality\"];\n }\n }\n\n static fromJS(data: any): StringWithQualityHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new StringWithQualityHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"value\"] = this.value;\n data[\"quality\"] = this.quality;\n return data;\n }\n}\n\nexport interface IStringWithQualityHeaderValue {\n value?: string | undefined;\n quality?: number | undefined;\n}\n\nexport class AuthenticationHeaderValue implements IAuthenticationHeaderValue {\n scheme?: string | undefined;\n parameter?: string | undefined;\n\n constructor(data?: IAuthenticationHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.scheme = _data[\"scheme\"];\n this.parameter = _data[\"parameter\"];\n }\n }\n\n static fromJS(data: any): AuthenticationHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new AuthenticationHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"scheme\"] = this.scheme;\n data[\"parameter\"] = this.parameter;\n return data;\n }\n}\n\nexport interface IAuthenticationHeaderValue {\n scheme?: string | undefined;\n parameter?: string | undefined;\n}\n\nexport class NameValueWithParametersHeaderValue extends NameValueHeaderValue\n implements INameValueWithParametersHeaderValue {\n parameters?: NameValueHeaderValue[] | undefined;\n\n constructor(data?: INameValueWithParametersHeaderValue) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n if (Array.isArray(_data[\"parameters\"])) {\n this.parameters = [] as any;\n for (let item of _data[\"parameters\"])\n this.parameters!.push(NameValueHeaderValue.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): NameValueWithParametersHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new NameValueWithParametersHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.parameters)) {\n data[\"parameters\"] = [];\n for (let item of this.parameters) data[\"parameters\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface INameValueWithParametersHeaderValue\n extends INameValueHeaderValue {\n parameters?: NameValueHeaderValue[] | undefined;\n}\n\nexport class EntityTagHeaderValue implements IEntityTagHeaderValue {\n tag?: string | undefined;\n isWeak!: boolean;\n\n constructor(data?: IEntityTagHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.tag = _data[\"tag\"];\n this.isWeak = _data[\"isWeak\"];\n }\n }\n\n static fromJS(data: any): EntityTagHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new EntityTagHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"tag\"] = this.tag;\n data[\"isWeak\"] = this.isWeak;\n return data;\n }\n}\n\nexport interface IEntityTagHeaderValue {\n tag?: string | undefined;\n isWeak: boolean;\n}\n\nexport class RangeConditionHeaderValue implements IRangeConditionHeaderValue {\n date?: Date | undefined;\n entityTag?: EntityTagHeaderValue | undefined;\n\n constructor(data?: IRangeConditionHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n this.entityTag = _data[\"entityTag\"]\n ? EntityTagHeaderValue.fromJS(_data[\"entityTag\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): RangeConditionHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new RangeConditionHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n data[\"entityTag\"] = this.entityTag\n ? this.entityTag.toJSON()\n : undefined;\n return data;\n }\n}\n\nexport interface IRangeConditionHeaderValue {\n date?: Date | undefined;\n entityTag?: EntityTagHeaderValue | undefined;\n}\n\nexport class RangeHeaderValue implements IRangeHeaderValue {\n unit?: string | undefined;\n ranges?: RangeItemHeaderValue[] | undefined;\n\n constructor(data?: IRangeHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.unit = _data[\"unit\"];\n if (Array.isArray(_data[\"ranges\"])) {\n this.ranges = [] as any;\n for (let item of _data[\"ranges\"])\n this.ranges!.push(RangeItemHeaderValue.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): RangeHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new RangeHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"unit\"] = this.unit;\n if (Array.isArray(this.ranges)) {\n data[\"ranges\"] = [];\n for (let item of this.ranges) data[\"ranges\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IRangeHeaderValue {\n unit?: string | undefined;\n ranges?: RangeItemHeaderValue[] | undefined;\n}\n\nexport class RangeItemHeaderValue implements IRangeItemHeaderValue {\n from?: number | undefined;\n to?: number | undefined;\n\n constructor(data?: IRangeItemHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.from = _data[\"from\"];\n this.to = _data[\"to\"];\n }\n }\n\n static fromJS(data: any): RangeItemHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new RangeItemHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"from\"] = this.from;\n data[\"to\"] = this.to;\n return data;\n }\n}\n\nexport interface IRangeItemHeaderValue {\n from?: number | undefined;\n to?: number | undefined;\n}\n\nexport class TransferCodingHeaderValue implements ITransferCodingHeaderValue {\n value?: string | undefined;\n parameters?: NameValueHeaderValue[] | undefined;\n\n constructor(data?: ITransferCodingHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.value = _data[\"value\"];\n if (Array.isArray(_data[\"parameters\"])) {\n this.parameters = [] as any;\n for (let item of _data[\"parameters\"])\n this.parameters!.push(NameValueHeaderValue.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): TransferCodingHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new TransferCodingHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"value\"] = this.value;\n if (Array.isArray(this.parameters)) {\n data[\"parameters\"] = [];\n for (let item of this.parameters) data[\"parameters\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface ITransferCodingHeaderValue {\n value?: string | undefined;\n parameters?: NameValueHeaderValue[] | undefined;\n}\n\nexport class TransferCodingWithQualityHeaderValue\n extends TransferCodingHeaderValue\n implements ITransferCodingWithQualityHeaderValue {\n quality?: number | undefined;\n\n constructor(data?: ITransferCodingWithQualityHeaderValue) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.quality = _data[\"quality\"];\n }\n }\n\n static fromJS(data: any): TransferCodingWithQualityHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new TransferCodingWithQualityHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"quality\"] = this.quality;\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface ITransferCodingWithQualityHeaderValue\n extends ITransferCodingHeaderValue {\n quality?: number | undefined;\n}\n\nexport class ProductInfoHeaderValue implements IProductInfoHeaderValue {\n product?: ProductHeaderValue | undefined;\n comment?: string | undefined;\n\n constructor(data?: IProductInfoHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.product = _data[\"product\"]\n ? ProductHeaderValue.fromJS(_data[\"product\"])\n : undefined;\n this.comment = _data[\"comment\"];\n }\n }\n\n static fromJS(data: any): ProductInfoHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new ProductInfoHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"product\"] = this.product ? this.product.toJSON() : undefined;\n data[\"comment\"] = this.comment;\n return data;\n }\n}\n\nexport interface IProductInfoHeaderValue {\n product?: ProductHeaderValue | undefined;\n comment?: string | undefined;\n}\n\nexport class ProductHeaderValue implements IProductHeaderValue {\n name?: string | undefined;\n version?: string | undefined;\n\n constructor(data?: IProductHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.name = _data[\"name\"];\n this.version = _data[\"version\"];\n }\n }\n\n static fromJS(data: any): ProductHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new ProductHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"name\"] = this.name;\n data[\"version\"] = this.version;\n return data;\n }\n}\n\nexport interface IProductHeaderValue {\n name?: string | undefined;\n version?: string | undefined;\n}\n\nexport class CacheControlHeaderValue implements ICacheControlHeaderValue {\n noCache!: boolean;\n noCacheHeaders?: string[] | undefined;\n noStore!: boolean;\n maxAge?: string | undefined;\n sharedMaxAge?: string | undefined;\n maxStale!: boolean;\n maxStaleLimit?: string | undefined;\n minFresh?: string | undefined;\n noTransform!: boolean;\n onlyIfCached!: boolean;\n public!: boolean;\n private!: boolean;\n privateHeaders?: string[] | undefined;\n mustRevalidate!: boolean;\n proxyRevalidate!: boolean;\n extensions?: NameValueHeaderValue[] | undefined;\n\n constructor(data?: ICacheControlHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.noCache = _data[\"noCache\"];\n if (Array.isArray(_data[\"noCacheHeaders\"])) {\n this.noCacheHeaders = [] as any;\n for (let item of _data[\"noCacheHeaders\"])\n this.noCacheHeaders!.push(item);\n }\n this.noStore = _data[\"noStore\"];\n this.maxAge = _data[\"maxAge\"];\n this.sharedMaxAge = _data[\"sharedMaxAge\"];\n this.maxStale = _data[\"maxStale\"];\n this.maxStaleLimit = _data[\"maxStaleLimit\"];\n this.minFresh = _data[\"minFresh\"];\n this.noTransform = _data[\"noTransform\"];\n this.onlyIfCached = _data[\"onlyIfCached\"];\n this.public = _data[\"public\"];\n this.private = _data[\"private\"];\n if (Array.isArray(_data[\"privateHeaders\"])) {\n this.privateHeaders = [] as any;\n for (let item of _data[\"privateHeaders\"])\n this.privateHeaders!.push(item);\n }\n this.mustRevalidate = _data[\"mustRevalidate\"];\n this.proxyRevalidate = _data[\"proxyRevalidate\"];\n if (Array.isArray(_data[\"extensions\"])) {\n this.extensions = [] as any;\n for (let item of _data[\"extensions\"])\n this.extensions!.push(NameValueHeaderValue.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): CacheControlHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new CacheControlHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"noCache\"] = this.noCache;\n if (Array.isArray(this.noCacheHeaders)) {\n data[\"noCacheHeaders\"] = [];\n for (let item of this.noCacheHeaders) data[\"noCacheHeaders\"].push(item);\n }\n data[\"noStore\"] = this.noStore;\n data[\"maxAge\"] = this.maxAge;\n data[\"sharedMaxAge\"] = this.sharedMaxAge;\n data[\"maxStale\"] = this.maxStale;\n data[\"maxStaleLimit\"] = this.maxStaleLimit;\n data[\"minFresh\"] = this.minFresh;\n data[\"noTransform\"] = this.noTransform;\n data[\"onlyIfCached\"] = this.onlyIfCached;\n data[\"public\"] = this.public;\n data[\"private\"] = this.private;\n if (Array.isArray(this.privateHeaders)) {\n data[\"privateHeaders\"] = [];\n for (let item of this.privateHeaders) data[\"privateHeaders\"].push(item);\n }\n data[\"mustRevalidate\"] = this.mustRevalidate;\n data[\"proxyRevalidate\"] = this.proxyRevalidate;\n if (Array.isArray(this.extensions)) {\n data[\"extensions\"] = [];\n for (let item of this.extensions) data[\"extensions\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface ICacheControlHeaderValue {\n noCache: boolean;\n noCacheHeaders?: string[] | undefined;\n noStore: boolean;\n maxAge?: string | undefined;\n sharedMaxAge?: string | undefined;\n maxStale: boolean;\n maxStaleLimit?: string | undefined;\n minFresh?: string | undefined;\n noTransform: boolean;\n onlyIfCached: boolean;\n public: boolean;\n private: boolean;\n privateHeaders?: string[] | undefined;\n mustRevalidate: boolean;\n proxyRevalidate: boolean;\n extensions?: NameValueHeaderValue[] | undefined;\n}\n\nexport class ViaHeaderValue implements IViaHeaderValue {\n protocolName?: string | undefined;\n protocolVersion?: string | undefined;\n receivedBy?: string | undefined;\n comment?: string | undefined;\n\n constructor(data?: IViaHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.protocolName = _data[\"protocolName\"];\n this.protocolVersion = _data[\"protocolVersion\"];\n this.receivedBy = _data[\"receivedBy\"];\n this.comment = _data[\"comment\"];\n }\n }\n\n static fromJS(data: any): ViaHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new ViaHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"protocolName\"] = this.protocolName;\n data[\"protocolVersion\"] = this.protocolVersion;\n data[\"receivedBy\"] = this.receivedBy;\n data[\"comment\"] = this.comment;\n return data;\n }\n}\n\nexport interface IViaHeaderValue {\n protocolName?: string | undefined;\n protocolVersion?: string | undefined;\n receivedBy?: string | undefined;\n comment?: string | undefined;\n}\n\nexport class WarningHeaderValue implements IWarningHeaderValue {\n code!: number;\n agent?: string | undefined;\n text?: string | undefined;\n date?: Date | undefined;\n\n constructor(data?: IWarningHeaderValue) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.agent = _data[\"agent\"];\n this.text = _data[\"text\"];\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): WarningHeaderValue {\n data = typeof data === \"object\" ? data : {};\n let result = new WarningHeaderValue();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"agent\"] = this.agent;\n data[\"text\"] = this.text;\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n return data;\n }\n}\n\nexport interface IWarningHeaderValue {\n code: number;\n agent?: string | undefined;\n text?: string | undefined;\n date?: Date | undefined;\n}\n\n/** Represents the raw query values in the string format from the incoming request. */\nexport class ODataRawQueryOptions implements IODataRawQueryOptions {\n /** Gets the raw $filter query value from the incoming request Uri if exists. */\n filter?: string | undefined;\n apply?: string | undefined;\n /** Gets the raw $orderby query value from the incoming request Uri if exists. */\n orderBy?: string | undefined;\n /** Gets the raw $top query value from the incoming request Uri if exists. */\n top?: string | undefined;\n /** Gets the raw $skip query value from the incoming request Uri if exists. */\n skip?: string | undefined;\n /** Gets the raw $select query value from the incoming request Uri if exists. */\n select?: string | undefined;\n /** Gets the raw $expand query value from the incoming request Uri if exists. */\n expand?: string | undefined;\n /** Gets the raw $count query value from the incoming request Uri if exists. */\n count?: string | undefined;\n /** Gets the raw $format query value from the incoming request Uri if exists. */\n format?: string | undefined;\n /** Gets the raw $skiptoken query value from the incoming request Uri if exists. */\n skipToken?: string | undefined;\n deltaToken?: string | undefined;\n\n constructor(data?: IODataRawQueryOptions) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.filter = _data[\"filter\"];\n this.apply = _data[\"apply\"];\n this.orderBy = _data[\"orderBy\"];\n this.top = _data[\"top\"];\n this.skip = _data[\"skip\"];\n this.select = _data[\"select\"];\n this.expand = _data[\"expand\"];\n this.count = _data[\"count\"];\n this.format = _data[\"format\"];\n this.skipToken = _data[\"skipToken\"];\n this.deltaToken = _data[\"deltaToken\"];\n }\n }\n\n static fromJS(data: any): ODataRawQueryOptions {\n data = typeof data === \"object\" ? data : {};\n let result = new ODataRawQueryOptions();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"filter\"] = this.filter;\n data[\"apply\"] = this.apply;\n data[\"orderBy\"] = this.orderBy;\n data[\"top\"] = this.top;\n data[\"skip\"] = this.skip;\n data[\"select\"] = this.select;\n data[\"expand\"] = this.expand;\n data[\"count\"] = this.count;\n data[\"format\"] = this.format;\n data[\"skipToken\"] = this.skipToken;\n data[\"deltaToken\"] = this.deltaToken;\n return data;\n }\n}\n\n/** Represents the raw query values in the string format from the incoming request. */\nexport interface IODataRawQueryOptions {\n /** Gets the raw $filter query value from the incoming request Uri if exists. */\n filter?: string | undefined;\n apply?: string | undefined;\n /** Gets the raw $orderby query value from the incoming request Uri if exists. */\n orderBy?: string | undefined;\n /** Gets the raw $top query value from the incoming request Uri if exists. */\n top?: string | undefined;\n /** Gets the raw $skip query value from the incoming request Uri if exists. */\n skip?: string | undefined;\n /** Gets the raw $select query value from the incoming request Uri if exists. */\n select?: string | undefined;\n /** Gets the raw $expand query value from the incoming request Uri if exists. */\n expand?: string | undefined;\n /** Gets the raw $count query value from the incoming request Uri if exists. */\n count?: string | undefined;\n /** Gets the raw $format query value from the incoming request Uri if exists. */\n format?: string | undefined;\n /** Gets the raw $skiptoken query value from the incoming request Uri if exists. */\n skipToken?: string | undefined;\n deltaToken?: string | undefined;\n}\n\n/** Represents the OData $select and $expand query options. */\nexport class SelectExpandQueryOption implements ISelectExpandQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the raw $select value. */\n rawSelect?: string | undefined;\n /** Gets the raw $expand value. */\n rawExpand?: string | undefined;\n /** Gets or sets the $select and $expand query validator. */\n validator?: SelectExpandQueryValidator | undefined;\n /** Gets the parsed SelectExpandClause for this query option. */\n selectExpandClause?: SelectExpandClause | undefined;\n /** Gets or sets the number of levels that a top level $expand=NavigationProperty($levels=max) will be expanded. This value will decrease by one with each nesting level in the $expand clause. For example, with a property value 5, the following query $expand=A($expand=B($expand=C($levels=max))) will be interpreted as $expand=A($expand=B($expand=C($levels=3))). If the query gets validated, the MaxExpansionDepth value must be greater than or equal to this value. */\n levelsMaxLiteralExpansionDepth!: number;\n\n constructor(data?: ISelectExpandQueryOption) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.context = _data[\"context\"]\n ? ODataQueryContext.fromJS(_data[\"context\"])\n : undefined;\n this.rawSelect = _data[\"rawSelect\"];\n this.rawExpand = _data[\"rawExpand\"];\n this.validator = _data[\"validator\"]\n ? SelectExpandQueryValidator.fromJS(_data[\"validator\"])\n : undefined;\n this.selectExpandClause = _data[\"selectExpandClause\"]\n ? SelectExpandClause.fromJS(_data[\"selectExpandClause\"])\n : undefined;\n this.levelsMaxLiteralExpansionDepth =\n _data[\"levelsMaxLiteralExpansionDepth\"];\n }\n }\n\n static fromJS(data: any): SelectExpandQueryOption {\n data = typeof data === \"object\" ? data : {};\n let result = new SelectExpandQueryOption();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"context\"] = this.context ? this.context.toJSON() : undefined;\n data[\"rawSelect\"] = this.rawSelect;\n data[\"rawExpand\"] = this.rawExpand;\n data[\"validator\"] = this.validator\n ? this.validator.toJSON()\n : undefined;\n data[\"selectExpandClause\"] = this.selectExpandClause\n ? this.selectExpandClause.toJSON()\n : undefined;\n data[\n \"levelsMaxLiteralExpansionDepth\"\n ] = this.levelsMaxLiteralExpansionDepth;\n return data;\n }\n}\n\n/** Represents the OData $select and $expand query options. */\nexport interface ISelectExpandQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the raw $select value. */\n rawSelect?: string | undefined;\n /** Gets the raw $expand value. */\n rawExpand?: string | undefined;\n /** Gets or sets the $select and $expand query validator. */\n validator?: SelectExpandQueryValidator | undefined;\n /** Gets the parsed SelectExpandClause for this query option. */\n selectExpandClause?: SelectExpandClause | undefined;\n /** Gets or sets the number of levels that a top level $expand=NavigationProperty($levels=max) will be expanded. This value will decrease by one with each nesting level in the $expand clause. For example, with a property value 5, the following query $expand=A($expand=B($expand=C($levels=max))) will be interpreted as $expand=A($expand=B($expand=C($levels=3))). If the query gets validated, the MaxExpansionDepth value must be greater than or equal to this value. */\n levelsMaxLiteralExpansionDepth: number;\n}\n\n/** Represents a validator used to validate a SelectExpandQueryOption based on the ODataValidationSettings. */\nexport class SelectExpandQueryValidator implements ISelectExpandQueryValidator {\n constructor(data?: ISelectExpandQueryValidator) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): SelectExpandQueryValidator {\n data = typeof data === \"object\" ? data : {};\n let result = new SelectExpandQueryValidator();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Represents a validator used to validate a SelectExpandQueryOption based on the ODataValidationSettings. */\nexport interface ISelectExpandQueryValidator {}\n\n/** Class representing the combined semantic meaning of any select or expand clauses in the uri. */\nexport class SelectExpandClause implements ISelectExpandClause {\n /** Gets the selected properties and operations. */\n selectedItems?: SelectItem[] | undefined;\n /** Gets a flag indicating that everything at this level has been selected. */\n allSelected!: boolean;\n\n constructor(data?: ISelectExpandClause) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"selectedItems\"])) {\n this.selectedItems = [] as any;\n for (let item of _data[\"selectedItems\"])\n this.selectedItems!.push(SelectItem.fromJS(item));\n }\n this.allSelected = _data[\"allSelected\"];\n }\n }\n\n static fromJS(data: any): SelectExpandClause {\n data = typeof data === \"object\" ? data : {};\n let result = new SelectExpandClause();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.selectedItems)) {\n data[\"selectedItems\"] = [];\n for (let item of this.selectedItems)\n data[\"selectedItems\"].push(item.toJSON());\n }\n data[\"allSelected\"] = this.allSelected;\n return data;\n }\n}\n\n/** Class representing the combined semantic meaning of any select or expand clauses in the uri. */\nexport interface ISelectExpandClause {\n /** Gets the selected properties and operations. */\n selectedItems?: SelectItem[] | undefined;\n /** Gets a flag indicating that everything at this level has been selected. */\n allSelected: boolean;\n}\n\n/** An item that has been selected by the query at the current level of the tree. */\nexport abstract class SelectItem implements ISelectItem {\n constructor(data?: ISelectItem) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): SelectItem {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\"The abstract class 'SelectItem' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** An item that has been selected by the query at the current level of the tree. */\nexport interface ISelectItem {}\n\nexport class ApplyQueryOption implements IApplyQueryOption {\n context?: ODataQueryContext | undefined;\n resultClrType?: string | undefined;\n applyClause?: ApplyClause | undefined;\n rawValue?: string | undefined;\n\n constructor(data?: IApplyQueryOption) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.context = _data[\"context\"]\n ? ODataQueryContext.fromJS(_data[\"context\"])\n : undefined;\n this.resultClrType = _data[\"resultClrType\"];\n this.applyClause = _data[\"applyClause\"]\n ? ApplyClause.fromJS(_data[\"applyClause\"])\n : undefined;\n this.rawValue = _data[\"rawValue\"];\n }\n }\n\n static fromJS(data: any): ApplyQueryOption {\n data = typeof data === \"object\" ? data : {};\n let result = new ApplyQueryOption();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"context\"] = this.context ? this.context.toJSON() : undefined;\n data[\"resultClrType\"] = this.resultClrType;\n data[\"applyClause\"] = this.applyClause\n ? this.applyClause.toJSON()\n : undefined;\n data[\"rawValue\"] = this.rawValue;\n return data;\n }\n}\n\nexport interface IApplyQueryOption {\n context?: ODataQueryContext | undefined;\n resultClrType?: string | undefined;\n applyClause?: ApplyClause | undefined;\n rawValue?: string | undefined;\n}\n\n/** Represents the set of transformations to perform as part of $apply. */\nexport class ApplyClause implements IApplyClause {\n /** The collection of transformations to perform. */\n transformations?: TransformationNode[] | undefined;\n\n constructor(data?: IApplyClause) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"transformations\"])) {\n this.transformations = [] as any;\n for (let item of _data[\"transformations\"])\n this.transformations!.push(TransformationNode.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): ApplyClause {\n data = typeof data === \"object\" ? data : {};\n let result = new ApplyClause();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.transformations)) {\n data[\"transformations\"] = [];\n for (let item of this.transformations)\n data[\"transformations\"].push(item.toJSON());\n }\n return data;\n }\n}\n\n/** Represents the set of transformations to perform as part of $apply. */\nexport interface IApplyClause {\n /** The collection of transformations to perform. */\n transformations?: TransformationNode[] | undefined;\n}\n\n/** Base class for all transformation nodes. */\nexport abstract class TransformationNode implements ITransformationNode {\n constructor(data?: ITransformationNode) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): TransformationNode {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'TransformationNode' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Base class for all transformation nodes. */\nexport interface ITransformationNode {}\n\n/** This defines a $filter OData query option for querying. */\nexport class FilterQueryOption implements IFilterQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets or sets the Filter Query Validator */\n validator?: FilterQueryValidator | undefined;\n /** Gets the parsed FilterClause for this query option. */\n filterClause?: FilterClause | undefined;\n /** Gets the raw $filter value. */\n rawValue?: string | undefined;\n\n constructor(data?: IFilterQueryOption) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.context = _data[\"context\"]\n ? ODataQueryContext.fromJS(_data[\"context\"])\n : undefined;\n this.validator = _data[\"validator\"]\n ? FilterQueryValidator.fromJS(_data[\"validator\"])\n : undefined;\n this.filterClause = _data[\"filterClause\"]\n ? FilterClause.fromJS(_data[\"filterClause\"])\n : undefined;\n this.rawValue = _data[\"rawValue\"];\n }\n }\n\n static fromJS(data: any): FilterQueryOption {\n data = typeof data === \"object\" ? data : {};\n let result = new FilterQueryOption();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"context\"] = this.context ? this.context.toJSON() : undefined;\n data[\"validator\"] = this.validator\n ? this.validator.toJSON()\n : undefined;\n data[\"filterClause\"] = this.filterClause\n ? this.filterClause.toJSON()\n : undefined;\n data[\"rawValue\"] = this.rawValue;\n return data;\n }\n}\n\n/** This defines a $filter OData query option for querying. */\nexport interface IFilterQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets or sets the Filter Query Validator */\n validator?: FilterQueryValidator | undefined;\n /** Gets the parsed FilterClause for this query option. */\n filterClause?: FilterClause | undefined;\n /** Gets the raw $filter value. */\n rawValue?: string | undefined;\n}\n\n/** Represents a validator used to validate a FilterQueryOption based on the ODataValidationSettings. */\nexport class FilterQueryValidator implements IFilterQueryValidator {\n constructor(data?: IFilterQueryValidator) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): FilterQueryValidator {\n data = typeof data === \"object\" ? data : {};\n let result = new FilterQueryValidator();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Represents a validator used to validate a FilterQueryOption based on the ODataValidationSettings. */\nexport interface IFilterQueryValidator {}\n\n/** The result of parsing a $filter query option. */\nexport class FilterClause implements IFilterClause {\n /** Gets the filter expression - this should evaluate to a single boolean value. */\n expression?: SingleValueNode | undefined;\n /** Gets the parameter for the expression which represents a single value from the collection. */\n rangeVariable?: RangeVariable | undefined;\n /** Gets the type of item returned by this clause. */\n itemType?: IEdmTypeReference | undefined;\n\n constructor(data?: IFilterClause) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.expression = _data[\"expression\"]\n ? SingleValueNode.fromJS(_data[\"expression\"])\n : undefined;\n this.rangeVariable = _data[\"rangeVariable\"]\n ? RangeVariable.fromJS(_data[\"rangeVariable\"])\n : undefined;\n this.itemType = _data[\"itemType\"]\n ? IEdmTypeReference.fromJS(_data[\"itemType\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): FilterClause {\n data = typeof data === \"object\" ? data : {};\n let result = new FilterClause();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"expression\"] = this.expression\n ? this.expression.toJSON()\n : undefined;\n data[\"rangeVariable\"] = this.rangeVariable\n ? this.rangeVariable.toJSON()\n : undefined;\n data[\"itemType\"] = this.itemType ? this.itemType.toJSON() : undefined;\n return data;\n }\n}\n\n/** The result of parsing a $filter query option. */\nexport interface IFilterClause {\n /** Gets the filter expression - this should evaluate to a single boolean value. */\n expression?: SingleValueNode | undefined;\n /** Gets the parameter for the expression which represents a single value from the collection. */\n rangeVariable?: RangeVariable | undefined;\n /** Gets the type of item returned by this clause. */\n itemType?: IEdmTypeReference | undefined;\n}\n\n/** Base class for all semantic metadata bound nodes. */\nexport abstract class QueryNode implements IQueryNode {\n constructor(data?: IQueryNode) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): QueryNode {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\"The abstract class 'QueryNode' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Base class for all semantic metadata bound nodes. */\nexport interface IQueryNode {}\n\n/** Base class for all semantic metadata bound nodes which represent a single composable value. */\nexport abstract class SingleValueNode extends QueryNode\n implements ISingleValueNode {\n /** Gets the kind of this node. */\n kind!: QueryNodeKind;\n\n constructor(data?: ISingleValueNode) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.kind = _data[\"kind\"];\n }\n }\n\n static fromJS(data: any): SingleValueNode {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'SingleValueNode' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"kind\"] = this.kind;\n super.toJSON(data);\n return data;\n }\n}\n\n/** Base class for all semantic metadata bound nodes which represent a single composable value. */\nexport interface ISingleValueNode extends IQueryNode {\n /** Gets the kind of this node. */\n kind: QueryNodeKind;\n}\n\n/** Public enumeration of kinds of query nodes. A subset of InternalQueryNodeKind */\nexport enum QueryNodeKind {\n None = 0,\n Constant = 1,\n Convert = 2,\n NonResourceRangeVariableReference = 3,\n BinaryOperator = 4,\n UnaryOperator = 5,\n SingleValuePropertyAccess = 6,\n CollectionPropertyAccess = 7,\n SingleValueFunctionCall = 8,\n Any = 9,\n CollectionNavigationNode = 10,\n SingleNavigationNode = 11,\n SingleValueOpenPropertyAccess = 12,\n SingleResourceCast = 13,\n All = 14,\n CollectionResourceCast = 15,\n ResourceRangeVariableReference = 16,\n SingleResourceFunctionCall = 17,\n CollectionFunctionCall = 18,\n CollectionResourceFunctionCall = 19,\n NamedFunctionParameter = 20,\n ParameterAlias = 21,\n EntitySet = 22,\n KeyLookup = 23,\n SearchTerm = 24,\n CollectionOpenPropertyAccess = 25,\n CollectionComplexNode = 26,\n SingleComplexNode = 27,\n Count = 28\n}\n\n/** A RangeVariable, which represents an iterator variable either over a collection, either of entities or not. Exists outside of the main SemanticAST, but hooked in via a RangeVariableReferenceNode (either Non-Entity or Entity). */\nexport abstract class RangeVariable implements IRangeVariable {\n constructor(data?: IRangeVariable) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): RangeVariable {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'RangeVariable' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** A RangeVariable, which represents an iterator variable either over a collection, either of entities or not. Exists outside of the main SemanticAST, but hooked in via a RangeVariableReferenceNode (either Non-Entity or Entity). */\nexport interface IRangeVariable {}\n\n/** This defines a $orderby OData query option for querying. */\nexport class OrderByQueryOption implements IOrderByQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the mutable list of OrderByPropertyNode instances for this query option. */\n orderByNodes?: OrderByNode[] | undefined;\n /** Gets the raw $orderby value. */\n rawValue?: string | undefined;\n /** Gets or sets the OrderBy Query Validator. */\n validator?: OrderByQueryValidator | undefined;\n /** Gets the parsed OrderByClause for this query option. */\n orderByClause?: OrderByClause | undefined;\n\n constructor(data?: IOrderByQueryOption) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.context = _data[\"context\"]\n ? ODataQueryContext.fromJS(_data[\"context\"])\n : undefined;\n if (Array.isArray(_data[\"orderByNodes\"])) {\n this.orderByNodes = [] as any;\n for (let item of _data[\"orderByNodes\"])\n this.orderByNodes!.push(OrderByNode.fromJS(item));\n }\n this.rawValue = _data[\"rawValue\"];\n this.validator = _data[\"validator\"]\n ? OrderByQueryValidator.fromJS(_data[\"validator\"])\n : undefined;\n this.orderByClause = _data[\"orderByClause\"]\n ? OrderByClause.fromJS(_data[\"orderByClause\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): OrderByQueryOption {\n data = typeof data === \"object\" ? data : {};\n let result = new OrderByQueryOption();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"context\"] = this.context ? this.context.toJSON() : undefined;\n if (Array.isArray(this.orderByNodes)) {\n data[\"orderByNodes\"] = [];\n for (let item of this.orderByNodes)\n data[\"orderByNodes\"].push(item.toJSON());\n }\n data[\"rawValue\"] = this.rawValue;\n data[\"validator\"] = this.validator\n ? this.validator.toJSON()\n : undefined;\n data[\"orderByClause\"] = this.orderByClause\n ? this.orderByClause.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** This defines a $orderby OData query option for querying. */\nexport interface IOrderByQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the mutable list of OrderByPropertyNode instances for this query option. */\n orderByNodes?: OrderByNode[] | undefined;\n /** Gets the raw $orderby value. */\n rawValue?: string | undefined;\n /** Gets or sets the OrderBy Query Validator. */\n validator?: OrderByQueryValidator | undefined;\n /** Gets the parsed OrderByClause for this query option. */\n orderByClause?: OrderByClause | undefined;\n}\n\n/** Represents a single order by expression in the $orderby clause. */\nexport abstract class OrderByNode implements IOrderByNode {\n /** Gets the OrderByDirection for the current node. */\n direction!: OrderByDirection;\n\n constructor(data?: IOrderByNode) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.direction = _data[\"direction\"];\n }\n }\n\n static fromJS(data: any): OrderByNode {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\"The abstract class 'OrderByNode' cannot be instantiated.\");\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"direction\"] = this.direction;\n return data;\n }\n}\n\n/** Represents a single order by expression in the $orderby clause. */\nexport interface IOrderByNode {\n /** Gets the OrderByDirection for the current node. */\n direction: OrderByDirection;\n}\n\n/** Enumeration of order by directions. */\nexport enum OrderByDirection {\n Ascending = 0,\n Descending = 1\n}\n\n/** Represents a validator used to validate an OrderByQueryOption based on the ODataValidationSettings. */\nexport class OrderByQueryValidator implements IOrderByQueryValidator {\n constructor(data?: IOrderByQueryValidator) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): OrderByQueryValidator {\n data = typeof data === \"object\" ? data : {};\n let result = new OrderByQueryValidator();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Represents a validator used to validate an OrderByQueryOption based on the ODataValidationSettings. */\nexport interface IOrderByQueryValidator {}\n\n/** Represents the result of parsing the $orderby query option. */\nexport class OrderByClause implements IOrderByClause {\n /** Gets the next orderby to perform after performing this orderby, can be null in the case of only a single orderby expression. */\n thenBy?: OrderByClause | undefined;\n /** Gets the order-by expression. */\n expression?: SingleValueNode | undefined;\n /** Gets the direction to order. */\n direction!: OrderByDirection;\n /** Gets the rangeVariable for the expression which represents a single value from the collection we iterate over. */\n rangeVariable?: RangeVariable | undefined;\n /** Gets the type of a single item from the collection returned after ordering. */\n itemType?: IEdmTypeReference | undefined;\n\n constructor(data?: IOrderByClause) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.thenBy = _data[\"thenBy\"]\n ? OrderByClause.fromJS(_data[\"thenBy\"])\n : undefined;\n this.expression = _data[\"expression\"]\n ? SingleValueNode.fromJS(_data[\"expression\"])\n : undefined;\n this.direction = _data[\"direction\"];\n this.rangeVariable = _data[\"rangeVariable\"]\n ? RangeVariable.fromJS(_data[\"rangeVariable\"])\n : undefined;\n this.itemType = _data[\"itemType\"]\n ? IEdmTypeReference.fromJS(_data[\"itemType\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): OrderByClause {\n data = typeof data === \"object\" ? data : {};\n let result = new OrderByClause();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"thenBy\"] = this.thenBy ? this.thenBy.toJSON() : undefined;\n data[\"expression\"] = this.expression\n ? this.expression.toJSON()\n : undefined;\n data[\"direction\"] = this.direction;\n data[\"rangeVariable\"] = this.rangeVariable\n ? this.rangeVariable.toJSON()\n : undefined;\n data[\"itemType\"] = this.itemType ? this.itemType.toJSON() : undefined;\n return data;\n }\n}\n\n/** Represents the result of parsing the $orderby query option. */\nexport interface IOrderByClause {\n /** Gets the next orderby to perform after performing this orderby, can be null in the case of only a single orderby expression. */\n thenBy?: OrderByClause | undefined;\n /** Gets the order-by expression. */\n expression?: SingleValueNode | undefined;\n /** Gets the direction to order. */\n direction: OrderByDirection;\n /** Gets the rangeVariable for the expression which represents a single value from the collection we iterate over. */\n rangeVariable?: RangeVariable | undefined;\n /** Gets the type of a single item from the collection returned after ordering. */\n itemType?: IEdmTypeReference | undefined;\n}\n\n/** This defines a $skip OData query option for querying. */\nexport class SkipQueryOption implements ISkipQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the raw $skip value. */\n rawValue?: string | undefined;\n /** Gets the value of the $skip as a parsed integer. */\n value!: number;\n /** Gets or sets the Skip Query Validator. */\n validator?: SkipQueryValidator | undefined;\n\n constructor(data?: ISkipQueryOption) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.context = _data[\"context\"]\n ? ODataQueryContext.fromJS(_data[\"context\"])\n : undefined;\n this.rawValue = _data[\"rawValue\"];\n this.value = _data[\"value\"];\n this.validator = _data[\"validator\"]\n ? SkipQueryValidator.fromJS(_data[\"validator\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): SkipQueryOption {\n data = typeof data === \"object\" ? data : {};\n let result = new SkipQueryOption();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"context\"] = this.context ? this.context.toJSON() : undefined;\n data[\"rawValue\"] = this.rawValue;\n data[\"value\"] = this.value;\n data[\"validator\"] = this.validator\n ? this.validator.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** This defines a $skip OData query option for querying. */\nexport interface ISkipQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the raw $skip value. */\n rawValue?: string | undefined;\n /** Gets the value of the $skip as a parsed integer. */\n value: number;\n /** Gets or sets the Skip Query Validator. */\n validator?: SkipQueryValidator | undefined;\n}\n\n/** Represents a validator used to validate a SkipQueryOption based on the ODataValidationSettings. */\nexport class SkipQueryValidator implements ISkipQueryValidator {\n constructor(data?: ISkipQueryValidator) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): SkipQueryValidator {\n data = typeof data === \"object\" ? data : {};\n let result = new SkipQueryValidator();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Represents a validator used to validate a SkipQueryOption based on the ODataValidationSettings. */\nexport interface ISkipQueryValidator {}\n\n/** This defines a $top OData query option for querying. */\nexport class TopQueryOption implements ITopQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the raw $top value. */\n rawValue?: string | undefined;\n /** Gets the value of the $top as a parsed integer. */\n value!: number;\n /** Gets or sets the Top Query Validator. */\n validator?: TopQueryValidator | undefined;\n\n constructor(data?: ITopQueryOption) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.context = _data[\"context\"]\n ? ODataQueryContext.fromJS(_data[\"context\"])\n : undefined;\n this.rawValue = _data[\"rawValue\"];\n this.value = _data[\"value\"];\n this.validator = _data[\"validator\"]\n ? TopQueryValidator.fromJS(_data[\"validator\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): TopQueryOption {\n data = typeof data === \"object\" ? data : {};\n let result = new TopQueryOption();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"context\"] = this.context ? this.context.toJSON() : undefined;\n data[\"rawValue\"] = this.rawValue;\n data[\"value\"] = this.value;\n data[\"validator\"] = this.validator\n ? this.validator.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** This defines a $top OData query option for querying. */\nexport interface ITopQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the raw $top value. */\n rawValue?: string | undefined;\n /** Gets the value of the $top as a parsed integer. */\n value: number;\n /** Gets or sets the Top Query Validator. */\n validator?: TopQueryValidator | undefined;\n}\n\n/** Represents a validator used to validate a TopQueryOption based on the ODataValidationSettings. */\nexport class TopQueryValidator implements ITopQueryValidator {\n constructor(data?: ITopQueryValidator) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): TopQueryValidator {\n data = typeof data === \"object\" ? data : {};\n let result = new TopQueryValidator();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Represents a validator used to validate a TopQueryOption based on the ODataValidationSettings. */\nexport interface ITopQueryValidator {}\n\n/** Represents the value of the $count query option and exposes a way to retrieve the number of entities that satisfy a query. */\nexport class CountQueryOption implements ICountQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the raw $count value. */\n rawValue?: string | undefined;\n /** Gets the value of the $count in a parsed form. */\n value!: boolean;\n /** Gets or sets the $count query validator. */\n validator?: CountQueryValidator | undefined;\n\n constructor(data?: ICountQueryOption) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.context = _data[\"context\"]\n ? ODataQueryContext.fromJS(_data[\"context\"])\n : undefined;\n this.rawValue = _data[\"rawValue\"];\n this.value = _data[\"value\"];\n this.validator = _data[\"validator\"]\n ? CountQueryValidator.fromJS(_data[\"validator\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): CountQueryOption {\n data = typeof data === \"object\" ? data : {};\n let result = new CountQueryOption();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"context\"] = this.context ? this.context.toJSON() : undefined;\n data[\"rawValue\"] = this.rawValue;\n data[\"value\"] = this.value;\n data[\"validator\"] = this.validator\n ? this.validator.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** Represents the value of the $count query option and exposes a way to retrieve the number of entities that satisfy a query. */\nexport interface ICountQueryOption {\n /** Gets the given ODataQueryContext. */\n context?: ODataQueryContext | undefined;\n /** Gets the raw $count value. */\n rawValue?: string | undefined;\n /** Gets the value of the $count in a parsed form. */\n value: boolean;\n /** Gets or sets the $count query validator. */\n validator?: CountQueryValidator | undefined;\n}\n\n/** Represents a validator used to validate a CountQueryOption based on the ODataValidationSettings. */\nexport class CountQueryValidator implements ICountQueryValidator {\n constructor(data?: ICountQueryValidator) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): CountQueryValidator {\n data = typeof data === \"object\" ? data : {};\n let result = new CountQueryValidator();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Represents a validator used to validate a CountQueryOption based on the ODataValidationSettings. */\nexport interface ICountQueryValidator {}\n\n/** Represents a validator used to validate OData queries based on the ODataValidationSettings. */\nexport class ODataQueryValidator implements IODataQueryValidator {\n constructor(data?: IODataQueryValidator) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {}\n\n static fromJS(data: any): ODataQueryValidator {\n data = typeof data === \"object\" ? data : {};\n let result = new ODataQueryValidator();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n return data;\n }\n}\n\n/** Represents a validator used to validate OData queries based on the ODataValidationSettings. */\nexport interface IODataQueryValidator {}\n\nexport class EstimateSummaryExtended extends EstimateSummary\n implements IEstimateSummaryExtended {\n blobUrl?: string | undefined;\n description?: string | undefined;\n filter1?: string | undefined;\n filter2?: string | undefined;\n filter3?: string | undefined;\n filter4?: string | undefined;\n filter5?: string | undefined;\n filter6?: string | undefined;\n address?: string | undefined;\n resp_Estimator?: string | undefined;\n tot_Cost!: number;\n bid_Amount!: number;\n status?: string | undefined;\n owner?: string | undefined;\n wc_State?: string | undefined;\n project_Name?: string | undefined;\n project_Number?: string | undefined;\n type_Work?: string | undefined;\n availableReports?: ReportViewModel[] | undefined;\n\n constructor(data?: IEstimateSummaryExtended) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.blobUrl = _data[\"blobUrl\"];\n this.description = _data[\"description\"];\n this.filter1 = _data[\"filter1\"];\n this.filter2 = _data[\"filter2\"];\n this.filter3 = _data[\"filter3\"];\n this.filter4 = _data[\"filter4\"];\n this.filter5 = _data[\"filter5\"];\n this.filter6 = _data[\"filter6\"];\n this.address = _data[\"address\"];\n this.resp_Estimator = _data[\"resp_Estimator\"];\n this.tot_Cost = _data[\"tot_Cost\"];\n this.bid_Amount = _data[\"bid_Amount\"];\n this.status = _data[\"status\"];\n this.owner = _data[\"owner\"];\n this.wc_State = _data[\"wc_State\"];\n this.project_Name = _data[\"project_Name\"];\n this.project_Number = _data[\"project_Number\"];\n this.type_Work = _data[\"type_Work\"];\n if (Array.isArray(_data[\"availableReports\"])) {\n this.availableReports = [] as any;\n for (let item of _data[\"availableReports\"])\n this.availableReports!.push(ReportViewModel.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): EstimateSummaryExtended {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateSummaryExtended();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"blobUrl\"] = this.blobUrl;\n data[\"description\"] = this.description;\n data[\"filter1\"] = this.filter1;\n data[\"filter2\"] = this.filter2;\n data[\"filter3\"] = this.filter3;\n data[\"filter4\"] = this.filter4;\n data[\"filter5\"] = this.filter5;\n data[\"filter6\"] = this.filter6;\n data[\"address\"] = this.address;\n data[\"resp_Estimator\"] = this.resp_Estimator;\n data[\"tot_Cost\"] = this.tot_Cost;\n data[\"bid_Amount\"] = this.bid_Amount;\n data[\"status\"] = this.status;\n data[\"owner\"] = this.owner;\n data[\"wc_State\"] = this.wc_State;\n data[\"project_Name\"] = this.project_Name;\n data[\"project_Number\"] = this.project_Number;\n data[\"type_Work\"] = this.type_Work;\n if (Array.isArray(this.availableReports)) {\n data[\"availableReports\"] = [];\n for (let item of this.availableReports)\n data[\"availableReports\"].push(item.toJSON());\n }\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IEstimateSummaryExtended extends IEstimateSummary {\n blobUrl?: string | undefined;\n description?: string | undefined;\n filter1?: string | undefined;\n filter2?: string | undefined;\n filter3?: string | undefined;\n filter4?: string | undefined;\n filter5?: string | undefined;\n filter6?: string | undefined;\n address?: string | undefined;\n resp_Estimator?: string | undefined;\n tot_Cost: number;\n bid_Amount: number;\n status?: string | undefined;\n owner?: string | undefined;\n wc_State?: string | undefined;\n project_Name?: string | undefined;\n project_Number?: string | undefined;\n type_Work?: string | undefined;\n availableReports?: ReportViewModel[] | undefined;\n}\n\nexport class ReportViewModel implements IReportViewModel {\n estimateId!: string;\n type!: ReportType;\n createdAt!: Date;\n reportName?: string | undefined;\n displayName?: string | undefined;\n\n constructor(data?: IReportViewModel) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.estimateId = _data[\"estimateId\"];\n this.type = _data[\"type\"];\n this.createdAt = _data[\"createdAt\"]\n ? new Date(_data[\"createdAt\"].toString())\n : undefined;\n this.reportName = _data[\"reportName\"];\n this.displayName = _data[\"displayName\"];\n }\n }\n\n static fromJS(data: any): ReportViewModel {\n data = typeof data === \"object\" ? data : {};\n let result = new ReportViewModel();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"estimateId\"] = this.estimateId;\n data[\"type\"] = this.type;\n data[\"createdAt\"] = this.createdAt\n ? this.createdAt.toISOString()\n : undefined;\n data[\"reportName\"] = this.reportName;\n data[\"displayName\"] = this.displayName;\n return data;\n }\n}\n\nexport interface IReportViewModel {\n estimateId: string;\n type: ReportType;\n createdAt: Date;\n reportName?: string | undefined;\n displayName?: string | undefined;\n}\n\nexport enum ReportType {\n Cost = 0,\n CostAndPrice = 1,\n EstimateRecap = 2\n}\n\nexport abstract class EstimateHistoryBaseTable\n implements IEstimateHistoryBaseTable {\n id!: string;\n\n constructor(data?: IEstimateHistoryBaseTable) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n }\n }\n\n static fromJS(data: any): EstimateHistoryBaseTable {\n data = typeof data === \"object\" ? data : {};\n throw new Error(\n \"The abstract class 'EstimateHistoryBaseTable' cannot be instantiated.\"\n );\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n return data;\n }\n}\n\nexport interface IEstimateHistoryBaseTable {\n id: string;\n}\n\nexport class Estimate extends EstimateHistoryBaseTable implements IEstimate {\n partitionId!: string;\n code?: string | undefined;\n name?: string | undefined;\n blobUrl?: string | undefined;\n processedStatus!: StatusCode;\n description?: string | undefined;\n estimateVersion?: string | undefined;\n filters?: EstimateFilters | undefined;\n totals?: EstimateTotals | undefined;\n lastModified!: Date;\n lastProcessed?: Date | undefined;\n processedStatusFailureCode!: ProcessedEstimateFailureCode;\n isExcludedEstimate!: boolean;\n isActiveEstimate!: boolean;\n isDeleted!: boolean;\n empId?: string | undefined;\n deletedTimestamp?: Date | undefined;\n activeEstimateBackups?: ActiveEstimateBackup[] | undefined;\n rootDirectory?: string | undefined;\n\n constructor(data?: IEstimate) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.partitionId = _data[\"partitionId\"];\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.blobUrl = _data[\"blobUrl\"];\n this.processedStatus = _data[\"processedStatus\"];\n this.description = _data[\"description\"];\n this.estimateVersion = _data[\"estimateVersion\"];\n this.filters = _data[\"filters\"]\n ? EstimateFilters.fromJS(_data[\"filters\"])\n : undefined;\n this.totals = _data[\"totals\"]\n ? EstimateTotals.fromJS(_data[\"totals\"])\n : undefined;\n this.lastModified = _data[\"lastModified\"]\n ? new Date(_data[\"lastModified\"].toString())\n : undefined;\n this.lastProcessed = _data[\"lastProcessed\"]\n ? new Date(_data[\"lastProcessed\"].toString())\n : undefined;\n this.processedStatusFailureCode = _data[\"processedStatusFailureCode\"];\n this.isExcludedEstimate = _data[\"isExcludedEstimate\"];\n this.isActiveEstimate = _data[\"isActiveEstimate\"];\n this.isDeleted = _data[\"isDeleted\"];\n this.empId = _data[\"empId\"];\n this.deletedTimestamp = _data[\"deletedTimestamp\"]\n ? new Date(_data[\"deletedTimestamp\"].toString())\n : undefined;\n if (Array.isArray(_data[\"activeEstimateBackups\"])) {\n this.activeEstimateBackups = [] as any;\n for (let item of _data[\"activeEstimateBackups\"])\n this.activeEstimateBackups!.push(ActiveEstimateBackup.fromJS(item));\n }\n this.rootDirectory = _data[\"rootDirectory\"];\n }\n }\n\n static fromJS(data: any): Estimate {\n data = typeof data === \"object\" ? data : {};\n let result = new Estimate();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"partitionId\"] = this.partitionId;\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"blobUrl\"] = this.blobUrl;\n data[\"processedStatus\"] = this.processedStatus;\n data[\"description\"] = this.description;\n data[\"estimateVersion\"] = this.estimateVersion;\n data[\"filters\"] = this.filters ? this.filters.toJSON() : undefined;\n data[\"totals\"] = this.totals ? this.totals.toJSON() : undefined;\n data[\"lastModified\"] = this.lastModified\n ? this.lastModified.toISOString()\n : undefined;\n data[\"lastProcessed\"] = this.lastProcessed\n ? this.lastProcessed.toISOString()\n : undefined;\n data[\"processedStatusFailureCode\"] = this.processedStatusFailureCode;\n data[\"isExcludedEstimate\"] = this.isExcludedEstimate;\n data[\"isActiveEstimate\"] = this.isActiveEstimate;\n data[\"isDeleted\"] = this.isDeleted;\n data[\"empId\"] = this.empId;\n data[\"deletedTimestamp\"] = this.deletedTimestamp\n ? this.deletedTimestamp.toISOString()\n : undefined;\n if (Array.isArray(this.activeEstimateBackups)) {\n data[\"activeEstimateBackups\"] = [];\n for (let item of this.activeEstimateBackups)\n data[\"activeEstimateBackups\"].push(item.toJSON());\n }\n data[\"rootDirectory\"] = this.rootDirectory;\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IEstimate extends IEstimateHistoryBaseTable {\n partitionId: string;\n code?: string | undefined;\n name?: string | undefined;\n blobUrl?: string | undefined;\n processedStatus: StatusCode;\n description?: string | undefined;\n estimateVersion?: string | undefined;\n filters?: EstimateFilters | undefined;\n totals?: EstimateTotals | undefined;\n lastModified: Date;\n lastProcessed?: Date | undefined;\n processedStatusFailureCode: ProcessedEstimateFailureCode;\n isExcludedEstimate: boolean;\n isActiveEstimate: boolean;\n isDeleted: boolean;\n empId?: string | undefined;\n deletedTimestamp?: Date | undefined;\n activeEstimateBackups?: ActiveEstimateBackup[] | undefined;\n rootDirectory?: string | undefined;\n}\n\nexport class EstimateFilters implements IEstimateFilters {\n project_Name?: string | undefined;\n project_Number?: string | undefined;\n status?: string | undefined;\n engineer?: string | undefined;\n resp_Estimator?: string | undefined;\n owner?: string | undefined;\n bid_Date?: Date | undefined;\n start_Date?: Date | undefined;\n review_Date?: Date | undefined;\n created_Date?: Date | undefined;\n modified_Date?: Date | undefined;\n modified_Time?: number | undefined;\n bid_Amount?: number | undefined;\n takeoff_Amount?: number | undefined;\n profit_Bidquan?: number | undefined;\n profit_Takeoff?: number | undefined;\n tot_Cost?: number | undefined;\n wc_State?: string | undefined;\n type_Work?: string | undefined;\n filter_1?: string | undefined;\n filter_2?: string | undefined;\n filter_3?: string | undefined;\n filter_4?: string | undefined;\n filter_5?: string | undefined;\n filter_6?: string | undefined;\n user_Ascii1?: string | undefined;\n user_Ascii2?: string | undefined;\n user_Ascii3?: string | undefined;\n user_Ascii4?: string | undefined;\n user_Ascii5?: string | undefined;\n user_Ascii6?: string | undefined;\n user_Ascii7?: string | undefined;\n user_Ascii8?: string | undefined;\n user_Ascii9?: string | undefined;\n user_Ascii10?: string | undefined;\n user_Ascii11?: string | undefined;\n user_Ascii12?: string | undefined;\n user_Ascii13?: string | undefined;\n user_Ascii14?: string | undefined;\n user_Ascii15?: string | undefined;\n user_Ascii16?: string | undefined;\n user_Ascii17?: string | undefined;\n user_Ascii18?: string | undefined;\n user_Ascii19?: string | undefined;\n user_Ascii20?: string | undefined;\n user_Vendor1?: string | undefined;\n user_Vendor2?: string | undefined;\n user_Vendor3?: string | undefined;\n user_Vendor4?: string | undefined;\n user_Vendor5?: string | undefined;\n user_Vendor6?: string | undefined;\n user_Flag1?: string | undefined;\n user_Flag2?: string | undefined;\n user_Flag3?: string | undefined;\n user_Flag4?: string | undefined;\n user_Flag5?: string | undefined;\n user_Flag6?: string | undefined;\n user_Flag7?: string | undefined;\n user_Flag8?: string | undefined;\n user_Flag9?: string | undefined;\n user_Flag10?: string | undefined;\n user_Flag11?: string | undefined;\n user_Flag12?: string | undefined;\n user_Code1?: string | undefined;\n user_Name2?: string | undefined;\n user_Integer1?: number | undefined;\n user_Integer2?: number | undefined;\n user_Integer3?: number | undefined;\n user_Integer4?: number | undefined;\n user_Integer5?: number | undefined;\n user_Number1?: number | undefined;\n user_Number2?: number | undefined;\n user_Number3?: number | undefined;\n user_Number4?: number | undefined;\n user_Number5?: number | undefined;\n user_Number6?: number | undefined;\n user_Number7?: number | undefined;\n user_Number8?: number | undefined;\n user_Number9?: number | undefined;\n user_Number10?: number | undefined;\n user_Number11?: number | undefined;\n user_Number12?: number | undefined;\n user_Number13?: number | undefined;\n user_Number14?: number | undefined;\n user_Number15?: number | undefined;\n user_Number16?: number | undefined;\n user_Number17?: number | undefined;\n user_Number18?: number | undefined;\n user_Number19?: number | undefined;\n user_Number20?: number | undefined;\n user_Perc1?: number | undefined;\n user_Perc2?: number | undefined;\n user_Def_Date?: Date | undefined;\n user_Date2?: Date | undefined;\n user_Date3?: Date | undefined;\n user_Date4?: Date | undefined;\n user_Date5?: Date | undefined;\n user_Date6?: Date | undefined;\n user_Date7?: Date | undefined;\n user_Date8?: Date | undefined;\n user_Date9?: Date | undefined;\n user_Date10?: Date | undefined;\n user_Date11?: Date | undefined;\n address?: string | undefined;\n latitude?: number | undefined;\n longitude?: number | undefined;\n\n constructor(data?: IEstimateFilters) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.project_Name = _data[\"project_Name\"];\n this.project_Number = _data[\"project_Number\"];\n this.status = _data[\"status\"];\n this.engineer = _data[\"engineer\"];\n this.resp_Estimator = _data[\"resp_Estimator\"];\n this.owner = _data[\"owner\"];\n this.bid_Date = _data[\"bid_Date\"]\n ? new Date(_data[\"bid_Date\"].toString())\n : undefined;\n this.start_Date = _data[\"start_Date\"]\n ? new Date(_data[\"start_Date\"].toString())\n : undefined;\n this.review_Date = _data[\"review_Date\"]\n ? new Date(_data[\"review_Date\"].toString())\n : undefined;\n this.created_Date = _data[\"created_Date\"]\n ? new Date(_data[\"created_Date\"].toString())\n : undefined;\n this.modified_Date = _data[\"modified_Date\"]\n ? new Date(_data[\"modified_Date\"].toString())\n : undefined;\n this.modified_Time = _data[\"modified_Time\"];\n this.bid_Amount = _data[\"bid_Amount\"];\n this.takeoff_Amount = _data[\"takeoff_Amount\"];\n this.profit_Bidquan = _data[\"profit_Bidquan\"];\n this.profit_Takeoff = _data[\"profit_Takeoff\"];\n this.tot_Cost = _data[\"tot_Cost\"];\n this.wc_State = _data[\"wc_State\"];\n this.type_Work = _data[\"type_Work\"];\n this.filter_1 = _data[\"filter_1\"];\n this.filter_2 = _data[\"filter_2\"];\n this.filter_3 = _data[\"filter_3\"];\n this.filter_4 = _data[\"filter_4\"];\n this.filter_5 = _data[\"filter_5\"];\n this.filter_6 = _data[\"filter_6\"];\n this.user_Ascii1 = _data[\"user_Ascii1\"];\n this.user_Ascii2 = _data[\"user_Ascii2\"];\n this.user_Ascii3 = _data[\"user_Ascii3\"];\n this.user_Ascii4 = _data[\"user_Ascii4\"];\n this.user_Ascii5 = _data[\"user_Ascii5\"];\n this.user_Ascii6 = _data[\"user_Ascii6\"];\n this.user_Ascii7 = _data[\"user_Ascii7\"];\n this.user_Ascii8 = _data[\"user_Ascii8\"];\n this.user_Ascii9 = _data[\"user_Ascii9\"];\n this.user_Ascii10 = _data[\"user_Ascii10\"];\n this.user_Ascii11 = _data[\"user_Ascii11\"];\n this.user_Ascii12 = _data[\"user_Ascii12\"];\n this.user_Ascii13 = _data[\"user_Ascii13\"];\n this.user_Ascii14 = _data[\"user_Ascii14\"];\n this.user_Ascii15 = _data[\"user_Ascii15\"];\n this.user_Ascii16 = _data[\"user_Ascii16\"];\n this.user_Ascii17 = _data[\"user_Ascii17\"];\n this.user_Ascii18 = _data[\"user_Ascii18\"];\n this.user_Ascii19 = _data[\"user_Ascii19\"];\n this.user_Ascii20 = _data[\"user_Ascii20\"];\n this.user_Vendor1 = _data[\"user_Vendor1\"];\n this.user_Vendor2 = _data[\"user_Vendor2\"];\n this.user_Vendor3 = _data[\"user_Vendor3\"];\n this.user_Vendor4 = _data[\"user_Vendor4\"];\n this.user_Vendor5 = _data[\"user_Vendor5\"];\n this.user_Vendor6 = _data[\"user_Vendor6\"];\n this.user_Flag1 = _data[\"user_Flag1\"];\n this.user_Flag2 = _data[\"user_Flag2\"];\n this.user_Flag3 = _data[\"user_Flag3\"];\n this.user_Flag4 = _data[\"user_Flag4\"];\n this.user_Flag5 = _data[\"user_Flag5\"];\n this.user_Flag6 = _data[\"user_Flag6\"];\n this.user_Flag7 = _data[\"user_Flag7\"];\n this.user_Flag8 = _data[\"user_Flag8\"];\n this.user_Flag9 = _data[\"user_Flag9\"];\n this.user_Flag10 = _data[\"user_Flag10\"];\n this.user_Flag11 = _data[\"user_Flag11\"];\n this.user_Flag12 = _data[\"user_Flag12\"];\n this.user_Code1 = _data[\"user_Code1\"];\n this.user_Name2 = _data[\"user_Name2\"];\n this.user_Integer1 = _data[\"user_Integer1\"];\n this.user_Integer2 = _data[\"user_Integer2\"];\n this.user_Integer3 = _data[\"user_Integer3\"];\n this.user_Integer4 = _data[\"user_Integer4\"];\n this.user_Integer5 = _data[\"user_Integer5\"];\n this.user_Number1 = _data[\"user_Number1\"];\n this.user_Number2 = _data[\"user_Number2\"];\n this.user_Number3 = _data[\"user_Number3\"];\n this.user_Number4 = _data[\"user_Number4\"];\n this.user_Number5 = _data[\"user_Number5\"];\n this.user_Number6 = _data[\"user_Number6\"];\n this.user_Number7 = _data[\"user_Number7\"];\n this.user_Number8 = _data[\"user_Number8\"];\n this.user_Number9 = _data[\"user_Number9\"];\n this.user_Number10 = _data[\"user_Number10\"];\n this.user_Number11 = _data[\"user_Number11\"];\n this.user_Number12 = _data[\"user_Number12\"];\n this.user_Number13 = _data[\"user_Number13\"];\n this.user_Number14 = _data[\"user_Number14\"];\n this.user_Number15 = _data[\"user_Number15\"];\n this.user_Number16 = _data[\"user_Number16\"];\n this.user_Number17 = _data[\"user_Number17\"];\n this.user_Number18 = _data[\"user_Number18\"];\n this.user_Number19 = _data[\"user_Number19\"];\n this.user_Number20 = _data[\"user_Number20\"];\n this.user_Perc1 = _data[\"user_Perc1\"];\n this.user_Perc2 = _data[\"user_Perc2\"];\n this.user_Def_Date = _data[\"user_Def_Date\"]\n ? new Date(_data[\"user_Def_Date\"].toString())\n : undefined;\n this.user_Date2 = _data[\"user_Date2\"]\n ? new Date(_data[\"user_Date2\"].toString())\n : undefined;\n this.user_Date3 = _data[\"user_Date3\"]\n ? new Date(_data[\"user_Date3\"].toString())\n : undefined;\n this.user_Date4 = _data[\"user_Date4\"]\n ? new Date(_data[\"user_Date4\"].toString())\n : undefined;\n this.user_Date5 = _data[\"user_Date5\"]\n ? new Date(_data[\"user_Date5\"].toString())\n : undefined;\n this.user_Date6 = _data[\"user_Date6\"]\n ? new Date(_data[\"user_Date6\"].toString())\n : undefined;\n this.user_Date7 = _data[\"user_Date7\"]\n ? new Date(_data[\"user_Date7\"].toString())\n : undefined;\n this.user_Date8 = _data[\"user_Date8\"]\n ? new Date(_data[\"user_Date8\"].toString())\n : undefined;\n this.user_Date9 = _data[\"user_Date9\"]\n ? new Date(_data[\"user_Date9\"].toString())\n : undefined;\n this.user_Date10 = _data[\"user_Date10\"]\n ? new Date(_data[\"user_Date10\"].toString())\n : undefined;\n this.user_Date11 = _data[\"user_Date11\"]\n ? new Date(_data[\"user_Date11\"].toString())\n : undefined;\n this.address = _data[\"address\"];\n this.latitude = _data[\"latitude\"];\n this.longitude = _data[\"longitude\"];\n }\n }\n\n static fromJS(data: any): EstimateFilters {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateFilters();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"project_Name\"] = this.project_Name;\n data[\"project_Number\"] = this.project_Number;\n data[\"status\"] = this.status;\n data[\"engineer\"] = this.engineer;\n data[\"resp_Estimator\"] = this.resp_Estimator;\n data[\"owner\"] = this.owner;\n data[\"bid_Date\"] = this.bid_Date\n ? this.bid_Date.toISOString()\n : undefined;\n data[\"start_Date\"] = this.start_Date\n ? this.start_Date.toISOString()\n : undefined;\n data[\"review_Date\"] = this.review_Date\n ? this.review_Date.toISOString()\n : undefined;\n data[\"created_Date\"] = this.created_Date\n ? this.created_Date.toISOString()\n : undefined;\n data[\"modified_Date\"] = this.modified_Date\n ? this.modified_Date.toISOString()\n : undefined;\n data[\"modified_Time\"] = this.modified_Time;\n data[\"bid_Amount\"] = this.bid_Amount;\n data[\"takeoff_Amount\"] = this.takeoff_Amount;\n data[\"profit_Bidquan\"] = this.profit_Bidquan;\n data[\"profit_Takeoff\"] = this.profit_Takeoff;\n data[\"tot_Cost\"] = this.tot_Cost;\n data[\"wc_State\"] = this.wc_State;\n data[\"type_Work\"] = this.type_Work;\n data[\"filter_1\"] = this.filter_1;\n data[\"filter_2\"] = this.filter_2;\n data[\"filter_3\"] = this.filter_3;\n data[\"filter_4\"] = this.filter_4;\n data[\"filter_5\"] = this.filter_5;\n data[\"filter_6\"] = this.filter_6;\n data[\"user_Ascii1\"] = this.user_Ascii1;\n data[\"user_Ascii2\"] = this.user_Ascii2;\n data[\"user_Ascii3\"] = this.user_Ascii3;\n data[\"user_Ascii4\"] = this.user_Ascii4;\n data[\"user_Ascii5\"] = this.user_Ascii5;\n data[\"user_Ascii6\"] = this.user_Ascii6;\n data[\"user_Ascii7\"] = this.user_Ascii7;\n data[\"user_Ascii8\"] = this.user_Ascii8;\n data[\"user_Ascii9\"] = this.user_Ascii9;\n data[\"user_Ascii10\"] = this.user_Ascii10;\n data[\"user_Ascii11\"] = this.user_Ascii11;\n data[\"user_Ascii12\"] = this.user_Ascii12;\n data[\"user_Ascii13\"] = this.user_Ascii13;\n data[\"user_Ascii14\"] = this.user_Ascii14;\n data[\"user_Ascii15\"] = this.user_Ascii15;\n data[\"user_Ascii16\"] = this.user_Ascii16;\n data[\"user_Ascii17\"] = this.user_Ascii17;\n data[\"user_Ascii18\"] = this.user_Ascii18;\n data[\"user_Ascii19\"] = this.user_Ascii19;\n data[\"user_Ascii20\"] = this.user_Ascii20;\n data[\"user_Vendor1\"] = this.user_Vendor1;\n data[\"user_Vendor2\"] = this.user_Vendor2;\n data[\"user_Vendor3\"] = this.user_Vendor3;\n data[\"user_Vendor4\"] = this.user_Vendor4;\n data[\"user_Vendor5\"] = this.user_Vendor5;\n data[\"user_Vendor6\"] = this.user_Vendor6;\n data[\"user_Flag1\"] = this.user_Flag1;\n data[\"user_Flag2\"] = this.user_Flag2;\n data[\"user_Flag3\"] = this.user_Flag3;\n data[\"user_Flag4\"] = this.user_Flag4;\n data[\"user_Flag5\"] = this.user_Flag5;\n data[\"user_Flag6\"] = this.user_Flag6;\n data[\"user_Flag7\"] = this.user_Flag7;\n data[\"user_Flag8\"] = this.user_Flag8;\n data[\"user_Flag9\"] = this.user_Flag9;\n data[\"user_Flag10\"] = this.user_Flag10;\n data[\"user_Flag11\"] = this.user_Flag11;\n data[\"user_Flag12\"] = this.user_Flag12;\n data[\"user_Code1\"] = this.user_Code1;\n data[\"user_Name2\"] = this.user_Name2;\n data[\"user_Integer1\"] = this.user_Integer1;\n data[\"user_Integer2\"] = this.user_Integer2;\n data[\"user_Integer3\"] = this.user_Integer3;\n data[\"user_Integer4\"] = this.user_Integer4;\n data[\"user_Integer5\"] = this.user_Integer5;\n data[\"user_Number1\"] = this.user_Number1;\n data[\"user_Number2\"] = this.user_Number2;\n data[\"user_Number3\"] = this.user_Number3;\n data[\"user_Number4\"] = this.user_Number4;\n data[\"user_Number5\"] = this.user_Number5;\n data[\"user_Number6\"] = this.user_Number6;\n data[\"user_Number7\"] = this.user_Number7;\n data[\"user_Number8\"] = this.user_Number8;\n data[\"user_Number9\"] = this.user_Number9;\n data[\"user_Number10\"] = this.user_Number10;\n data[\"user_Number11\"] = this.user_Number11;\n data[\"user_Number12\"] = this.user_Number12;\n data[\"user_Number13\"] = this.user_Number13;\n data[\"user_Number14\"] = this.user_Number14;\n data[\"user_Number15\"] = this.user_Number15;\n data[\"user_Number16\"] = this.user_Number16;\n data[\"user_Number17\"] = this.user_Number17;\n data[\"user_Number18\"] = this.user_Number18;\n data[\"user_Number19\"] = this.user_Number19;\n data[\"user_Number20\"] = this.user_Number20;\n data[\"user_Perc1\"] = this.user_Perc1;\n data[\"user_Perc2\"] = this.user_Perc2;\n data[\"user_Def_Date\"] = this.user_Def_Date\n ? this.user_Def_Date.toISOString()\n : undefined;\n data[\"user_Date2\"] = this.user_Date2\n ? this.user_Date2.toISOString()\n : undefined;\n data[\"user_Date3\"] = this.user_Date3\n ? this.user_Date3.toISOString()\n : undefined;\n data[\"user_Date4\"] = this.user_Date4\n ? this.user_Date4.toISOString()\n : undefined;\n data[\"user_Date5\"] = this.user_Date5\n ? this.user_Date5.toISOString()\n : undefined;\n data[\"user_Date6\"] = this.user_Date6\n ? this.user_Date6.toISOString()\n : undefined;\n data[\"user_Date7\"] = this.user_Date7\n ? this.user_Date7.toISOString()\n : undefined;\n data[\"user_Date8\"] = this.user_Date8\n ? this.user_Date8.toISOString()\n : undefined;\n data[\"user_Date9\"] = this.user_Date9\n ? this.user_Date9.toISOString()\n : undefined;\n data[\"user_Date10\"] = this.user_Date10\n ? this.user_Date10.toISOString()\n : undefined;\n data[\"user_Date11\"] = this.user_Date11\n ? this.user_Date11.toISOString()\n : undefined;\n data[\"address\"] = this.address;\n data[\"latitude\"] = this.latitude;\n data[\"longitude\"] = this.longitude;\n return data;\n }\n}\n\nexport interface IEstimateFilters {\n project_Name?: string | undefined;\n project_Number?: string | undefined;\n status?: string | undefined;\n engineer?: string | undefined;\n resp_Estimator?: string | undefined;\n owner?: string | undefined;\n bid_Date?: Date | undefined;\n start_Date?: Date | undefined;\n review_Date?: Date | undefined;\n created_Date?: Date | undefined;\n modified_Date?: Date | undefined;\n modified_Time?: number | undefined;\n bid_Amount?: number | undefined;\n takeoff_Amount?: number | undefined;\n profit_Bidquan?: number | undefined;\n profit_Takeoff?: number | undefined;\n tot_Cost?: number | undefined;\n wc_State?: string | undefined;\n type_Work?: string | undefined;\n filter_1?: string | undefined;\n filter_2?: string | undefined;\n filter_3?: string | undefined;\n filter_4?: string | undefined;\n filter_5?: string | undefined;\n filter_6?: string | undefined;\n user_Ascii1?: string | undefined;\n user_Ascii2?: string | undefined;\n user_Ascii3?: string | undefined;\n user_Ascii4?: string | undefined;\n user_Ascii5?: string | undefined;\n user_Ascii6?: string | undefined;\n user_Ascii7?: string | undefined;\n user_Ascii8?: string | undefined;\n user_Ascii9?: string | undefined;\n user_Ascii10?: string | undefined;\n user_Ascii11?: string | undefined;\n user_Ascii12?: string | undefined;\n user_Ascii13?: string | undefined;\n user_Ascii14?: string | undefined;\n user_Ascii15?: string | undefined;\n user_Ascii16?: string | undefined;\n user_Ascii17?: string | undefined;\n user_Ascii18?: string | undefined;\n user_Ascii19?: string | undefined;\n user_Ascii20?: string | undefined;\n user_Vendor1?: string | undefined;\n user_Vendor2?: string | undefined;\n user_Vendor3?: string | undefined;\n user_Vendor4?: string | undefined;\n user_Vendor5?: string | undefined;\n user_Vendor6?: string | undefined;\n user_Flag1?: string | undefined;\n user_Flag2?: string | undefined;\n user_Flag3?: string | undefined;\n user_Flag4?: string | undefined;\n user_Flag5?: string | undefined;\n user_Flag6?: string | undefined;\n user_Flag7?: string | undefined;\n user_Flag8?: string | undefined;\n user_Flag9?: string | undefined;\n user_Flag10?: string | undefined;\n user_Flag11?: string | undefined;\n user_Flag12?: string | undefined;\n user_Code1?: string | undefined;\n user_Name2?: string | undefined;\n user_Integer1?: number | undefined;\n user_Integer2?: number | undefined;\n user_Integer3?: number | undefined;\n user_Integer4?: number | undefined;\n user_Integer5?: number | undefined;\n user_Number1?: number | undefined;\n user_Number2?: number | undefined;\n user_Number3?: number | undefined;\n user_Number4?: number | undefined;\n user_Number5?: number | undefined;\n user_Number6?: number | undefined;\n user_Number7?: number | undefined;\n user_Number8?: number | undefined;\n user_Number9?: number | undefined;\n user_Number10?: number | undefined;\n user_Number11?: number | undefined;\n user_Number12?: number | undefined;\n user_Number13?: number | undefined;\n user_Number14?: number | undefined;\n user_Number15?: number | undefined;\n user_Number16?: number | undefined;\n user_Number17?: number | undefined;\n user_Number18?: number | undefined;\n user_Number19?: number | undefined;\n user_Number20?: number | undefined;\n user_Perc1?: number | undefined;\n user_Perc2?: number | undefined;\n user_Def_Date?: Date | undefined;\n user_Date2?: Date | undefined;\n user_Date3?: Date | undefined;\n user_Date4?: Date | undefined;\n user_Date5?: Date | undefined;\n user_Date6?: Date | undefined;\n user_Date7?: Date | undefined;\n user_Date8?: Date | undefined;\n user_Date9?: Date | undefined;\n user_Date10?: Date | undefined;\n user_Date11?: Date | undefined;\n address?: string | undefined;\n latitude?: number | undefined;\n longitude?: number | undefined;\n}\n\nexport class EstimateTotals implements IEstimateTotals {\n baseLabor_Direct!: number;\n baseLabor_Indirect!: number;\n baseLabor_Total!: number;\n burden_Direct!: number;\n burden_Indirect!: number;\n burden_Total!: number;\n totalLabor_Direct!: number;\n totalLabor_Indirect!: number;\n totalLabor_Total!: number;\n permanentMaterial_Direct!: number;\n permanentMaterial_Indirect!: number;\n permanentMaterial_Total!: number;\n constructionMaterial_Direct!: number;\n constructionMaterial_Indirect!: number;\n constructionMaterial_Total!: number;\n subcontract_Direct!: number;\n subcontract_Indirect!: number;\n subcontract_Total!: number;\n equipmentOperatingExpense_Direct!: number;\n equipmentOperatingExpense_Indirect!: number;\n equipmentOperatingExpense_Total!: number;\n companyEquipment_Direct!: number;\n companyEquipment_Indirect!: number;\n companyEquipment_Total!: number;\n rentedEquipment_Direct!: number;\n rentedEquipment_Indirect!: number;\n rentedEquipment_Total!: number;\n misc1_Direct!: number;\n misc1_Indirect!: number;\n misc1_Total!: number;\n misc2_Direct!: number;\n misc2_Indirect!: number;\n misc2_Total!: number;\n misc3_Direct!: number;\n misc3_Indirect!: number;\n misc3_Total!: number;\n totalEntryCost_Takeoff_Direct!: number;\n totalEntryCost_Takeoff_Indirect!: number;\n totalEntryCost_Takeoff_Total!: number;\n totalEntryCost_Bid_Direct!: number;\n totalEntryCost_Bid_Indirect!: number;\n totalEntryCost_Bid_Total!: number;\n balMarkup_Bid!: number;\n actualMarkup_Bid!: number;\n balancedBid_Bid!: number;\n bidTotal_Bid!: number;\n addonBondTotal!: number;\n totalEqp_Direct!: number;\n totalEqp_Indirect!: number;\n totalEqp_Total!: number;\n manhours_Direct!: number;\n manhours_Indirect!: number;\n manhours_Total!: number;\n addon_Cost!: number;\n bond!: number;\n addon_Markup!: number;\n addon_Total!: number;\n totalCost_Takeoff!: number;\n job_Duration!: number;\n balMarkup_Takeoff!: number;\n actualMarkup_Takeoff!: number;\n balancedBid_Takeoff!: number;\n passThrough_Cost!: number;\n passThrough_Adjustment!: number;\n passThrough_Total!: number;\n totalCost_Bid_LessPassThrough!: number;\n totalCost_Bid!: number;\n total_User_Adjustments!: number;\n total_User_Adjustments_Cost!: number;\n desired_Bid!: number;\n desired_Bid_Diff!: number;\n bidTotal_Takeoff!: number;\n totalCost_Takeoff_LessPassThrough!: number;\n markupPercentCost_Takeoff!: number;\n markupPercentCost_Bid!: number;\n markupPercentSales_Takeoff!: number;\n markupPercentSales_Bid!: number;\n totalCost_Takeoff_LessPassThroughAndAdjustments!: number;\n totalCost_Bid_LessPassThroughAndAdjustments!: number;\n totalEntryCost_Bid_Spread_Indirect!: number;\n addonBond_Cost_Bid_Spread_Total!: number;\n totalCost_Bid_Spread!: number;\n balMarkup_Bid_Spread!: number;\n actualMarkup_Bid_Spread!: number;\n actv_User_Quan1!: number;\n actv_User_Quan2!: number;\n actv_User_Quan3!: number;\n actv_User_Quan4!: number;\n open_Biditems!: number;\n minority_Goal_Percent!: number;\n minority_Goal_Total!: number;\n minority_Current_Percent!: number;\n minority_Current_Total!: number;\n\n constructor(data?: IEstimateTotals) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.baseLabor_Direct = _data[\"baseLabor_Direct\"];\n this.baseLabor_Indirect = _data[\"baseLabor_Indirect\"];\n this.baseLabor_Total = _data[\"baseLabor_Total\"];\n this.burden_Direct = _data[\"burden_Direct\"];\n this.burden_Indirect = _data[\"burden_Indirect\"];\n this.burden_Total = _data[\"burden_Total\"];\n this.totalLabor_Direct = _data[\"totalLabor_Direct\"];\n this.totalLabor_Indirect = _data[\"totalLabor_Indirect\"];\n this.totalLabor_Total = _data[\"totalLabor_Total\"];\n this.permanentMaterial_Direct = _data[\"permanentMaterial_Direct\"];\n this.permanentMaterial_Indirect = _data[\"permanentMaterial_Indirect\"];\n this.permanentMaterial_Total = _data[\"permanentMaterial_Total\"];\n this.constructionMaterial_Direct = _data[\"constructionMaterial_Direct\"];\n this.constructionMaterial_Indirect =\n _data[\"constructionMaterial_Indirect\"];\n this.constructionMaterial_Total = _data[\"constructionMaterial_Total\"];\n this.subcontract_Direct = _data[\"subcontract_Direct\"];\n this.subcontract_Indirect = _data[\"subcontract_Indirect\"];\n this.subcontract_Total = _data[\"subcontract_Total\"];\n this.equipmentOperatingExpense_Direct =\n _data[\"equipmentOperatingExpense_Direct\"];\n this.equipmentOperatingExpense_Indirect =\n _data[\"equipmentOperatingExpense_Indirect\"];\n this.equipmentOperatingExpense_Total =\n _data[\"equipmentOperatingExpense_Total\"];\n this.companyEquipment_Direct = _data[\"companyEquipment_Direct\"];\n this.companyEquipment_Indirect = _data[\"companyEquipment_Indirect\"];\n this.companyEquipment_Total = _data[\"companyEquipment_Total\"];\n this.rentedEquipment_Direct = _data[\"rentedEquipment_Direct\"];\n this.rentedEquipment_Indirect = _data[\"rentedEquipment_Indirect\"];\n this.rentedEquipment_Total = _data[\"rentedEquipment_Total\"];\n this.misc1_Direct = _data[\"misc1_Direct\"];\n this.misc1_Indirect = _data[\"misc1_Indirect\"];\n this.misc1_Total = _data[\"misc1_Total\"];\n this.misc2_Direct = _data[\"misc2_Direct\"];\n this.misc2_Indirect = _data[\"misc2_Indirect\"];\n this.misc2_Total = _data[\"misc2_Total\"];\n this.misc3_Direct = _data[\"misc3_Direct\"];\n this.misc3_Indirect = _data[\"misc3_Indirect\"];\n this.misc3_Total = _data[\"misc3_Total\"];\n this.totalEntryCost_Takeoff_Direct =\n _data[\"totalEntryCost_Takeoff_Direct\"];\n this.totalEntryCost_Takeoff_Indirect =\n _data[\"totalEntryCost_Takeoff_Indirect\"];\n this.totalEntryCost_Takeoff_Total = _data[\"totalEntryCost_Takeoff_Total\"];\n this.totalEntryCost_Bid_Direct = _data[\"totalEntryCost_Bid_Direct\"];\n this.totalEntryCost_Bid_Indirect = _data[\"totalEntryCost_Bid_Indirect\"];\n this.totalEntryCost_Bid_Total = _data[\"totalEntryCost_Bid_Total\"];\n this.balMarkup_Bid = _data[\"balMarkup_Bid\"];\n this.actualMarkup_Bid = _data[\"actualMarkup_Bid\"];\n this.balancedBid_Bid = _data[\"balancedBid_Bid\"];\n this.bidTotal_Bid = _data[\"bidTotal_Bid\"];\n this.addonBondTotal = _data[\"addonBondTotal\"];\n this.totalEqp_Direct = _data[\"totalEqp_Direct\"];\n this.totalEqp_Indirect = _data[\"totalEqp_Indirect\"];\n this.totalEqp_Total = _data[\"totalEqp_Total\"];\n this.manhours_Direct = _data[\"manhours_Direct\"];\n this.manhours_Indirect = _data[\"manhours_Indirect\"];\n this.manhours_Total = _data[\"manhours_Total\"];\n this.addon_Cost = _data[\"addon_Cost\"];\n this.bond = _data[\"bond\"];\n this.addon_Markup = _data[\"addon_Markup\"];\n this.addon_Total = _data[\"addon_Total\"];\n this.totalCost_Takeoff = _data[\"totalCost_Takeoff\"];\n this.job_Duration = _data[\"job_Duration\"];\n this.balMarkup_Takeoff = _data[\"balMarkup_Takeoff\"];\n this.actualMarkup_Takeoff = _data[\"actualMarkup_Takeoff\"];\n this.balancedBid_Takeoff = _data[\"balancedBid_Takeoff\"];\n this.passThrough_Cost = _data[\"passThrough_Cost\"];\n this.passThrough_Adjustment = _data[\"passThrough_Adjustment\"];\n this.passThrough_Total = _data[\"passThrough_Total\"];\n this.totalCost_Bid_LessPassThrough =\n _data[\"totalCost_Bid_LessPassThrough\"];\n this.totalCost_Bid = _data[\"totalCost_Bid\"];\n this.total_User_Adjustments = _data[\"total_User_Adjustments\"];\n this.total_User_Adjustments_Cost = _data[\"total_User_Adjustments_Cost\"];\n this.desired_Bid = _data[\"desired_Bid\"];\n this.desired_Bid_Diff = _data[\"desired_Bid_Diff\"];\n this.bidTotal_Takeoff = _data[\"bidTotal_Takeoff\"];\n this.totalCost_Takeoff_LessPassThrough =\n _data[\"totalCost_Takeoff_LessPassThrough\"];\n this.markupPercentCost_Takeoff = _data[\"markupPercentCost_Takeoff\"];\n this.markupPercentCost_Bid = _data[\"markupPercentCost_Bid\"];\n this.markupPercentSales_Takeoff = _data[\"markupPercentSales_Takeoff\"];\n this.markupPercentSales_Bid = _data[\"markupPercentSales_Bid\"];\n this.totalCost_Takeoff_LessPassThroughAndAdjustments =\n _data[\"totalCost_Takeoff_LessPassThroughAndAdjustments\"];\n this.totalCost_Bid_LessPassThroughAndAdjustments =\n _data[\"totalCost_Bid_LessPassThroughAndAdjustments\"];\n this.totalEntryCost_Bid_Spread_Indirect =\n _data[\"totalEntryCost_Bid_Spread_Indirect\"];\n this.addonBond_Cost_Bid_Spread_Total =\n _data[\"addonBond_Cost_Bid_Spread_Total\"];\n this.totalCost_Bid_Spread = _data[\"totalCost_Bid_Spread\"];\n this.balMarkup_Bid_Spread = _data[\"balMarkup_Bid_Spread\"];\n this.actualMarkup_Bid_Spread = _data[\"actualMarkup_Bid_Spread\"];\n this.actv_User_Quan1 = _data[\"actv_User_Quan1\"];\n this.actv_User_Quan2 = _data[\"actv_User_Quan2\"];\n this.actv_User_Quan3 = _data[\"actv_User_Quan3\"];\n this.actv_User_Quan4 = _data[\"actv_User_Quan4\"];\n this.open_Biditems = _data[\"open_Biditems\"];\n this.minority_Goal_Percent = _data[\"minority_Goal_Percent\"];\n this.minority_Goal_Total = _data[\"minority_Goal_Total\"];\n this.minority_Current_Percent = _data[\"minority_Current_Percent\"];\n this.minority_Current_Total = _data[\"minority_Current_Total\"];\n }\n }\n\n static fromJS(data: any): EstimateTotals {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateTotals();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"baseLabor_Direct\"] = this.baseLabor_Direct;\n data[\"baseLabor_Indirect\"] = this.baseLabor_Indirect;\n data[\"baseLabor_Total\"] = this.baseLabor_Total;\n data[\"burden_Direct\"] = this.burden_Direct;\n data[\"burden_Indirect\"] = this.burden_Indirect;\n data[\"burden_Total\"] = this.burden_Total;\n data[\"totalLabor_Direct\"] = this.totalLabor_Direct;\n data[\"totalLabor_Indirect\"] = this.totalLabor_Indirect;\n data[\"totalLabor_Total\"] = this.totalLabor_Total;\n data[\"permanentMaterial_Direct\"] = this.permanentMaterial_Direct;\n data[\"permanentMaterial_Indirect\"] = this.permanentMaterial_Indirect;\n data[\"permanentMaterial_Total\"] = this.permanentMaterial_Total;\n data[\"constructionMaterial_Direct\"] = this.constructionMaterial_Direct;\n data[\"constructionMaterial_Indirect\"] = this.constructionMaterial_Indirect;\n data[\"constructionMaterial_Total\"] = this.constructionMaterial_Total;\n data[\"subcontract_Direct\"] = this.subcontract_Direct;\n data[\"subcontract_Indirect\"] = this.subcontract_Indirect;\n data[\"subcontract_Total\"] = this.subcontract_Total;\n data[\n \"equipmentOperatingExpense_Direct\"\n ] = this.equipmentOperatingExpense_Direct;\n data[\n \"equipmentOperatingExpense_Indirect\"\n ] = this.equipmentOperatingExpense_Indirect;\n data[\n \"equipmentOperatingExpense_Total\"\n ] = this.equipmentOperatingExpense_Total;\n data[\"companyEquipment_Direct\"] = this.companyEquipment_Direct;\n data[\"companyEquipment_Indirect\"] = this.companyEquipment_Indirect;\n data[\"companyEquipment_Total\"] = this.companyEquipment_Total;\n data[\"rentedEquipment_Direct\"] = this.rentedEquipment_Direct;\n data[\"rentedEquipment_Indirect\"] = this.rentedEquipment_Indirect;\n data[\"rentedEquipment_Total\"] = this.rentedEquipment_Total;\n data[\"misc1_Direct\"] = this.misc1_Direct;\n data[\"misc1_Indirect\"] = this.misc1_Indirect;\n data[\"misc1_Total\"] = this.misc1_Total;\n data[\"misc2_Direct\"] = this.misc2_Direct;\n data[\"misc2_Indirect\"] = this.misc2_Indirect;\n data[\"misc2_Total\"] = this.misc2_Total;\n data[\"misc3_Direct\"] = this.misc3_Direct;\n data[\"misc3_Indirect\"] = this.misc3_Indirect;\n data[\"misc3_Total\"] = this.misc3_Total;\n data[\"totalEntryCost_Takeoff_Direct\"] = this.totalEntryCost_Takeoff_Direct;\n data[\n \"totalEntryCost_Takeoff_Indirect\"\n ] = this.totalEntryCost_Takeoff_Indirect;\n data[\"totalEntryCost_Takeoff_Total\"] = this.totalEntryCost_Takeoff_Total;\n data[\"totalEntryCost_Bid_Direct\"] = this.totalEntryCost_Bid_Direct;\n data[\"totalEntryCost_Bid_Indirect\"] = this.totalEntryCost_Bid_Indirect;\n data[\"totalEntryCost_Bid_Total\"] = this.totalEntryCost_Bid_Total;\n data[\"balMarkup_Bid\"] = this.balMarkup_Bid;\n data[\"actualMarkup_Bid\"] = this.actualMarkup_Bid;\n data[\"balancedBid_Bid\"] = this.balancedBid_Bid;\n data[\"bidTotal_Bid\"] = this.bidTotal_Bid;\n data[\"addonBondTotal\"] = this.addonBondTotal;\n data[\"totalEqp_Direct\"] = this.totalEqp_Direct;\n data[\"totalEqp_Indirect\"] = this.totalEqp_Indirect;\n data[\"totalEqp_Total\"] = this.totalEqp_Total;\n data[\"manhours_Direct\"] = this.manhours_Direct;\n data[\"manhours_Indirect\"] = this.manhours_Indirect;\n data[\"manhours_Total\"] = this.manhours_Total;\n data[\"addon_Cost\"] = this.addon_Cost;\n data[\"bond\"] = this.bond;\n data[\"addon_Markup\"] = this.addon_Markup;\n data[\"addon_Total\"] = this.addon_Total;\n data[\"totalCost_Takeoff\"] = this.totalCost_Takeoff;\n data[\"job_Duration\"] = this.job_Duration;\n data[\"balMarkup_Takeoff\"] = this.balMarkup_Takeoff;\n data[\"actualMarkup_Takeoff\"] = this.actualMarkup_Takeoff;\n data[\"balancedBid_Takeoff\"] = this.balancedBid_Takeoff;\n data[\"passThrough_Cost\"] = this.passThrough_Cost;\n data[\"passThrough_Adjustment\"] = this.passThrough_Adjustment;\n data[\"passThrough_Total\"] = this.passThrough_Total;\n data[\"totalCost_Bid_LessPassThrough\"] = this.totalCost_Bid_LessPassThrough;\n data[\"totalCost_Bid\"] = this.totalCost_Bid;\n data[\"total_User_Adjustments\"] = this.total_User_Adjustments;\n data[\"total_User_Adjustments_Cost\"] = this.total_User_Adjustments_Cost;\n data[\"desired_Bid\"] = this.desired_Bid;\n data[\"desired_Bid_Diff\"] = this.desired_Bid_Diff;\n data[\"bidTotal_Takeoff\"] = this.bidTotal_Takeoff;\n data[\n \"totalCost_Takeoff_LessPassThrough\"\n ] = this.totalCost_Takeoff_LessPassThrough;\n data[\"markupPercentCost_Takeoff\"] = this.markupPercentCost_Takeoff;\n data[\"markupPercentCost_Bid\"] = this.markupPercentCost_Bid;\n data[\"markupPercentSales_Takeoff\"] = this.markupPercentSales_Takeoff;\n data[\"markupPercentSales_Bid\"] = this.markupPercentSales_Bid;\n data[\n \"totalCost_Takeoff_LessPassThroughAndAdjustments\"\n ] = this.totalCost_Takeoff_LessPassThroughAndAdjustments;\n data[\n \"totalCost_Bid_LessPassThroughAndAdjustments\"\n ] = this.totalCost_Bid_LessPassThroughAndAdjustments;\n data[\n \"totalEntryCost_Bid_Spread_Indirect\"\n ] = this.totalEntryCost_Bid_Spread_Indirect;\n data[\n \"addonBond_Cost_Bid_Spread_Total\"\n ] = this.addonBond_Cost_Bid_Spread_Total;\n data[\"totalCost_Bid_Spread\"] = this.totalCost_Bid_Spread;\n data[\"balMarkup_Bid_Spread\"] = this.balMarkup_Bid_Spread;\n data[\"actualMarkup_Bid_Spread\"] = this.actualMarkup_Bid_Spread;\n data[\"actv_User_Quan1\"] = this.actv_User_Quan1;\n data[\"actv_User_Quan2\"] = this.actv_User_Quan2;\n data[\"actv_User_Quan3\"] = this.actv_User_Quan3;\n data[\"actv_User_Quan4\"] = this.actv_User_Quan4;\n data[\"open_Biditems\"] = this.open_Biditems;\n data[\"minority_Goal_Percent\"] = this.minority_Goal_Percent;\n data[\"minority_Goal_Total\"] = this.minority_Goal_Total;\n data[\"minority_Current_Percent\"] = this.minority_Current_Percent;\n data[\"minority_Current_Total\"] = this.minority_Current_Total;\n return data;\n }\n}\n\nexport interface IEstimateTotals {\n baseLabor_Direct: number;\n baseLabor_Indirect: number;\n baseLabor_Total: number;\n burden_Direct: number;\n burden_Indirect: number;\n burden_Total: number;\n totalLabor_Direct: number;\n totalLabor_Indirect: number;\n totalLabor_Total: number;\n permanentMaterial_Direct: number;\n permanentMaterial_Indirect: number;\n permanentMaterial_Total: number;\n constructionMaterial_Direct: number;\n constructionMaterial_Indirect: number;\n constructionMaterial_Total: number;\n subcontract_Direct: number;\n subcontract_Indirect: number;\n subcontract_Total: number;\n equipmentOperatingExpense_Direct: number;\n equipmentOperatingExpense_Indirect: number;\n equipmentOperatingExpense_Total: number;\n companyEquipment_Direct: number;\n companyEquipment_Indirect: number;\n companyEquipment_Total: number;\n rentedEquipment_Direct: number;\n rentedEquipment_Indirect: number;\n rentedEquipment_Total: number;\n misc1_Direct: number;\n misc1_Indirect: number;\n misc1_Total: number;\n misc2_Direct: number;\n misc2_Indirect: number;\n misc2_Total: number;\n misc3_Direct: number;\n misc3_Indirect: number;\n misc3_Total: number;\n totalEntryCost_Takeoff_Direct: number;\n totalEntryCost_Takeoff_Indirect: number;\n totalEntryCost_Takeoff_Total: number;\n totalEntryCost_Bid_Direct: number;\n totalEntryCost_Bid_Indirect: number;\n totalEntryCost_Bid_Total: number;\n balMarkup_Bid: number;\n actualMarkup_Bid: number;\n balancedBid_Bid: number;\n bidTotal_Bid: number;\n addonBondTotal: number;\n totalEqp_Direct: number;\n totalEqp_Indirect: number;\n totalEqp_Total: number;\n manhours_Direct: number;\n manhours_Indirect: number;\n manhours_Total: number;\n addon_Cost: number;\n bond: number;\n addon_Markup: number;\n addon_Total: number;\n totalCost_Takeoff: number;\n job_Duration: number;\n balMarkup_Takeoff: number;\n actualMarkup_Takeoff: number;\n balancedBid_Takeoff: number;\n passThrough_Cost: number;\n passThrough_Adjustment: number;\n passThrough_Total: number;\n totalCost_Bid_LessPassThrough: number;\n totalCost_Bid: number;\n total_User_Adjustments: number;\n total_User_Adjustments_Cost: number;\n desired_Bid: number;\n desired_Bid_Diff: number;\n bidTotal_Takeoff: number;\n totalCost_Takeoff_LessPassThrough: number;\n markupPercentCost_Takeoff: number;\n markupPercentCost_Bid: number;\n markupPercentSales_Takeoff: number;\n markupPercentSales_Bid: number;\n totalCost_Takeoff_LessPassThroughAndAdjustments: number;\n totalCost_Bid_LessPassThroughAndAdjustments: number;\n totalEntryCost_Bid_Spread_Indirect: number;\n addonBond_Cost_Bid_Spread_Total: number;\n totalCost_Bid_Spread: number;\n balMarkup_Bid_Spread: number;\n actualMarkup_Bid_Spread: number;\n actv_User_Quan1: number;\n actv_User_Quan2: number;\n actv_User_Quan3: number;\n actv_User_Quan4: number;\n open_Biditems: number;\n minority_Goal_Percent: number;\n minority_Goal_Total: number;\n minority_Current_Percent: number;\n minority_Current_Total: number;\n}\n\nexport class ActiveEstimateBackup extends EstimateHistoryBaseTable\n implements IActiveEstimateBackup {\n estimateId!: string;\n blobUrl?: string | undefined;\n uploadedTimestamp!: Date;\n\n constructor(data?: IActiveEstimateBackup) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.estimateId = _data[\"estimateId\"];\n this.blobUrl = _data[\"blobUrl\"];\n this.uploadedTimestamp = _data[\"uploadedTimestamp\"]\n ? new Date(_data[\"uploadedTimestamp\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): ActiveEstimateBackup {\n data = typeof data === \"object\" ? data : {};\n let result = new ActiveEstimateBackup();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"estimateId\"] = this.estimateId;\n data[\"blobUrl\"] = this.blobUrl;\n data[\"uploadedTimestamp\"] = this.uploadedTimestamp\n ? this.uploadedTimestamp.toISOString()\n : undefined;\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IActiveEstimateBackup extends IEstimateHistoryBaseTable {\n estimateId: string;\n blobUrl?: string | undefined;\n uploadedTimestamp: Date;\n}\n\nexport class EstimateExcluded implements IEstimateExcluded {\n estimateId!: string;\n excluded!: boolean;\n\n constructor(data?: IEstimateExcluded) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.estimateId = _data[\"estimateId\"];\n this.excluded = _data[\"excluded\"];\n }\n }\n\n static fromJS(data: any): EstimateExcluded {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateExcluded();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"estimateId\"] = this.estimateId;\n data[\"excluded\"] = this.excluded;\n return data;\n }\n}\n\nexport interface IEstimateExcluded {\n estimateId: string;\n excluded: boolean;\n}\n\nexport class DeleteEstimateViewModel implements IDeleteEstimateViewModel {\n found!: boolean;\n success!: boolean;\n id!: string;\n deletionError?: string | undefined;\n\n constructor(data?: IDeleteEstimateViewModel) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.found = _data[\"found\"];\n this.success = _data[\"success\"];\n this.id = _data[\"id\"];\n this.deletionError = _data[\"deletionError\"];\n }\n }\n\n static fromJS(data: any): DeleteEstimateViewModel {\n data = typeof data === \"object\" ? data : {};\n let result = new DeleteEstimateViewModel();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"found\"] = this.found;\n data[\"success\"] = this.success;\n data[\"id\"] = this.id;\n data[\"deletionError\"] = this.deletionError;\n return data;\n }\n}\n\nexport interface IDeleteEstimateViewModel {\n found: boolean;\n success: boolean;\n id: string;\n deletionError?: string | undefined;\n}\n\nexport class EstimateExistViewModel implements IEstimateExistViewModel {\n code?: string | undefined;\n exist!: boolean;\n\n constructor(data?: IEstimateExistViewModel) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.exist = _data[\"exist\"];\n }\n }\n\n static fromJS(data: any): EstimateExistViewModel {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateExistViewModel();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"exist\"] = this.exist;\n return data;\n }\n}\n\nexport interface IEstimateExistViewModel {\n code?: string | undefined;\n exist: boolean;\n}\n\nexport class EstimateIndex implements IEstimateIndex {\n index!: number;\n\n constructor(data?: IEstimateIndex) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.index = _data[\"index\"];\n }\n }\n\n static fromJS(data: any): EstimateIndex {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateIndex();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"index\"] = this.index;\n return data;\n }\n}\n\nexport interface IEstimateIndex {\n index: number;\n}\n\nexport class EstimateFlattened implements IEstimateFlattened {\n id!: string;\n processedStatus!: StatusCode;\n partitionId!: string;\n lastModified!: Date;\n lastProcessed?: Date | undefined;\n code?: string | undefined;\n name?: string | undefined;\n blobUrl?: string | undefined;\n description?: string | undefined;\n estimateVersion?: string | undefined;\n businessUnitCode?: string | undefined;\n isExcludedEstimate!: boolean;\n isActiveEstimate!: boolean;\n filters_Project_Name?: string | undefined;\n filters_Project_Number?: string | undefined;\n filters_Address?: string | undefined;\n filters_Latitude?: number | undefined;\n filters_Longitude?: number | undefined;\n filters_Status?: string | undefined;\n filters_Engineer?: string | undefined;\n filters_Resp_Estimator?: string | undefined;\n filters_Owner?: string | undefined;\n filters_Bid_Date?: Date | undefined;\n filters_Start_Date?: Date | undefined;\n filters_Review_Date?: Date | undefined;\n filters_Created_Date?: Date | undefined;\n filters_Modified_Date?: Date | undefined;\n filters_Modified_Time?: number | undefined;\n filters_Bid_Amount?: number | undefined;\n filters_Takeoff_Amount?: number | undefined;\n filters_Profit_Bidquan?: number | undefined;\n filters_Profit_Takeoff?: number | undefined;\n filters_Tot_Cost?: number | undefined;\n filters_Wc_State?: string | undefined;\n filters_Type_Work?: string | undefined;\n filters_Filter_1?: string | undefined;\n filters_Filter_2?: string | undefined;\n filters_Filter_3?: string | undefined;\n filters_Filter_4?: string | undefined;\n filters_Filter_5?: string | undefined;\n filters_Filter_6?: string | undefined;\n filters_User_Ascii1?: string | undefined;\n filters_User_Ascii2?: string | undefined;\n filters_User_Ascii3?: string | undefined;\n filters_User_Ascii4?: string | undefined;\n filters_User_Ascii5?: string | undefined;\n filters_User_Ascii6?: string | undefined;\n filters_User_Ascii7?: string | undefined;\n filters_User_Ascii8?: string | undefined;\n filters_User_Ascii9?: string | undefined;\n filters_User_Ascii10?: string | undefined;\n filters_User_Ascii11?: string | undefined;\n filters_User_Ascii12?: string | undefined;\n filters_User_Ascii13?: string | undefined;\n filters_User_Ascii14?: string | undefined;\n filters_User_Ascii15?: string | undefined;\n filters_User_Ascii16?: string | undefined;\n filters_User_Ascii17?: string | undefined;\n filters_User_Ascii18?: string | undefined;\n filters_User_Ascii19?: string | undefined;\n filters_User_Ascii20?: string | undefined;\n filters_User_Vendor1?: string | undefined;\n filters_User_Vendor2?: string | undefined;\n filters_User_Vendor3?: string | undefined;\n filters_User_Vendor4?: string | undefined;\n filters_User_Vendor5?: string | undefined;\n filters_User_Vendor6?: string | undefined;\n filters_User_Flag1?: string | undefined;\n filters_User_Flag2?: string | undefined;\n filters_User_Flag3?: string | undefined;\n filters_User_Flag4?: string | undefined;\n filters_User_Flag5?: string | undefined;\n filters_User_Flag6?: string | undefined;\n filters_User_Flag7?: string | undefined;\n filters_User_Flag8?: string | undefined;\n filters_User_Flag9?: string | undefined;\n filters_User_Flag10?: string | undefined;\n filters_User_Flag11?: string | undefined;\n filters_User_Flag12?: string | undefined;\n filters_User_Code1?: string | undefined;\n filters_User_Name2?: string | undefined;\n filters_User_Integer1?: number | undefined;\n filters_User_Integer2?: number | undefined;\n filters_User_Integer3?: number | undefined;\n filters_User_Integer4?: number | undefined;\n filters_User_Integer5?: number | undefined;\n filters_User_Number1?: number | undefined;\n filters_User_Number2?: number | undefined;\n filters_User_Number3?: number | undefined;\n filters_User_Number4?: number | undefined;\n filters_User_Number5?: number | undefined;\n filters_User_Number6?: number | undefined;\n filters_User_Number7?: number | undefined;\n filters_User_Number8?: number | undefined;\n filters_User_Number9?: number | undefined;\n filters_User_Number10?: number | undefined;\n filters_User_Number11?: number | undefined;\n filters_User_Number12?: number | undefined;\n filters_User_Number13?: number | undefined;\n filters_User_Number14?: number | undefined;\n filters_User_Number15?: number | undefined;\n filters_User_Number16?: number | undefined;\n filters_User_Number17?: number | undefined;\n filters_User_Number18?: number | undefined;\n filters_User_Number19?: number | undefined;\n filters_User_Number20?: number | undefined;\n filters_User_Perc1?: number | undefined;\n filters_User_Perc2?: number | undefined;\n filters_User_Def_Date?: Date | undefined;\n filters_User_Date2?: Date | undefined;\n filters_User_Date3?: Date | undefined;\n filters_User_Date4?: Date | undefined;\n filters_User_Date5?: Date | undefined;\n filters_User_Date6?: Date | undefined;\n filters_User_Date7?: Date | undefined;\n filters_User_Date8?: Date | undefined;\n filters_User_Date9?: Date | undefined;\n filters_User_Date10?: Date | undefined;\n filters_User_Date11?: Date | undefined;\n totals_BaseLabor_Direct!: number;\n totals_BaseLabor_Indirect!: number;\n totals_BaseLabor_Total!: number;\n totals_Burden_Direct!: number;\n totals_Burden_Indirect!: number;\n totals_Burden_Total!: number;\n totals_TotalLabor_Direct!: number;\n totals_TotalLabor_Indirect!: number;\n totals_TotalLabor_Total!: number;\n totals_PermanentMaterial_Direct!: number;\n totals_PermanentMaterial_Indirect!: number;\n totals_PermanentMaterial_Total!: number;\n totals_ConstructionMaterial_Direct!: number;\n totals_ConstructionMaterial_Indirect!: number;\n totals_ConstructionMaterial_Total!: number;\n totals_Subcontract_Direct!: number;\n totals_Subcontract_Indirect!: number;\n totals_Subcontract_Total!: number;\n totals_EquipmentOperatingExpense_Direct!: number;\n totals_EquipmentOperatingExpense_Indirect!: number;\n totals_EquipmentOperatingExpense_Total!: number;\n totals_CompanyEquipment_Direct!: number;\n totals_CompanyEquipment_Indirect!: number;\n totals_CompanyEquipment_Total!: number;\n totals_RentedEquipment_Direct!: number;\n totals_RentedEquipment_Indirect!: number;\n totals_RentedEquipment_Total!: number;\n totals_Misc1_Direct!: number;\n totals_Misc1_Indirect!: number;\n totals_Misc1_Total!: number;\n totals_Misc2_Direct!: number;\n totals_Misc2_Indirect!: number;\n totals_Misc2_Total!: number;\n totals_Misc3_Direct!: number;\n totals_Misc3_Indirect!: number;\n totals_Misc3_Total!: number;\n totals_TotalEntryCost_Takeoff_Direct!: number;\n totals_TotalEntryCost_Takeoff_Indirect!: number;\n totals_TotalEntryCost_Takeoff_Total!: number;\n totals_TotalEntryCost_Bid_Direct!: number;\n totals_TotalEntryCost_Bid_Indirect!: number;\n totals_TotalEntryCost_Bid_Total!: number;\n totals_BalMarkup_Bid!: number;\n totals_ActualMarkup_Bid!: number;\n totals_BalancedBid_Bid!: number;\n totals_BidTotal_Bid!: number;\n totals_AddonBondTotal!: number;\n totals_TotalEqp_Direct!: number;\n totals_TotalEqp_Indirect!: number;\n totals_TotalEqp_Total!: number;\n totals_Manhours_Direct!: number;\n totals_Manhours_Indirect!: number;\n totals_Manhours_Total!: number;\n totals_Addon_Cost!: number;\n totals_Bond!: number;\n totals_Addon_Markup!: number;\n totals_Addon_Total!: number;\n totals_TotalCost_Takeoff!: number;\n totals_Job_Duration!: number;\n totals_BalMarkup_Takeoff!: number;\n totals_ActualMarkup_Takeoff!: number;\n totals_BalancedBid_Takeoff!: number;\n totals_PassThrough_Cost!: number;\n totals_PassThrough_Adjustment!: number;\n totals_PassThrough_Total!: number;\n totals_TotalCost_Bid_LessPassThrough!: number;\n totals_TotalCost_Bid!: number;\n totals_Total_User_Adjustments!: number;\n totals_Total_User_Adjustments_Cost!: number;\n totals_Desired_Bid!: number;\n totals_Desired_Bid_Diff!: number;\n totals_BidTotal_Takeoff!: number;\n totals_TotalCost_Takeoff_LessPassThrough!: number;\n totals_MarkupPercentCost_Takeoff!: number;\n totals_MarkupPercentCost_Bid!: number;\n totals_MarkupPercentSales_Takeoff!: number;\n totals_MarkupPercentSales_Bid!: number;\n totals_TotalCost_Takeoff_LessPassThroughAndAdjustments!: number;\n totals_TotalCost_Bid_LessPassThroughAndAdjustments!: number;\n totals_TotalEntryCost_Bid_Spread_Indirect!: number;\n totals_AddonBond_Cost_Bid_Spread_Total!: number;\n totals_TotalCost_Bid_Spread!: number;\n totals_BalMarkup_Bid_Spread!: number;\n totals_ActualMarkup_Bid_Spread!: number;\n totals_Actv_User_Quan1!: number;\n totals_Actv_User_Quan2!: number;\n totals_Actv_User_Quan3!: number;\n totals_Actv_User_Quan4!: number;\n totals_Open_Biditems!: number;\n totals_Minority_Goal_Percent!: number;\n totals_Minority_Goal_Total!: number;\n totals_Minority_Current_Percent!: number;\n totals_Minority_Current_Total!: number;\n empId?: string | undefined;\n\n constructor(data?: IEstimateFlattened) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.processedStatus = _data[\"processedStatus\"];\n this.partitionId = _data[\"partitionId\"];\n this.lastModified = _data[\"lastModified\"]\n ? new Date(_data[\"lastModified\"].toString())\n : undefined;\n this.lastProcessed = _data[\"lastProcessed\"]\n ? new Date(_data[\"lastProcessed\"].toString())\n : undefined;\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.blobUrl = _data[\"blobUrl\"];\n this.description = _data[\"description\"];\n this.estimateVersion = _data[\"estimateVersion\"];\n this.businessUnitCode = _data[\"businessUnitCode\"];\n this.isExcludedEstimate = _data[\"isExcludedEstimate\"];\n this.isActiveEstimate = _data[\"isActiveEstimate\"];\n this.filters_Project_Name = _data[\"filters_Project_Name\"];\n this.filters_Project_Number = _data[\"filters_Project_Number\"];\n this.filters_Address = _data[\"filters_Address\"];\n this.filters_Latitude = _data[\"filters_Latitude\"];\n this.filters_Longitude = _data[\"filters_Longitude\"];\n this.filters_Status = _data[\"filters_Status\"];\n this.filters_Engineer = _data[\"filters_Engineer\"];\n this.filters_Resp_Estimator = _data[\"filters_Resp_Estimator\"];\n this.filters_Owner = _data[\"filters_Owner\"];\n this.filters_Bid_Date = _data[\"filters_Bid_Date\"]\n ? new Date(_data[\"filters_Bid_Date\"].toString())\n : undefined;\n this.filters_Start_Date = _data[\"filters_Start_Date\"]\n ? new Date(_data[\"filters_Start_Date\"].toString())\n : undefined;\n this.filters_Review_Date = _data[\"filters_Review_Date\"]\n ? new Date(_data[\"filters_Review_Date\"].toString())\n : undefined;\n this.filters_Created_Date = _data[\"filters_Created_Date\"]\n ? new Date(_data[\"filters_Created_Date\"].toString())\n : undefined;\n this.filters_Modified_Date = _data[\"filters_Modified_Date\"]\n ? new Date(_data[\"filters_Modified_Date\"].toString())\n : undefined;\n this.filters_Modified_Time = _data[\"filters_Modified_Time\"];\n this.filters_Bid_Amount = _data[\"filters_Bid_Amount\"];\n this.filters_Takeoff_Amount = _data[\"filters_Takeoff_Amount\"];\n this.filters_Profit_Bidquan = _data[\"filters_Profit_Bidquan\"];\n this.filters_Profit_Takeoff = _data[\"filters_Profit_Takeoff\"];\n this.filters_Tot_Cost = _data[\"filters_Tot_Cost\"];\n this.filters_Wc_State = _data[\"filters_Wc_State\"];\n this.filters_Type_Work = _data[\"filters_Type_Work\"];\n this.filters_Filter_1 = _data[\"filters_Filter_1\"];\n this.filters_Filter_2 = _data[\"filters_Filter_2\"];\n this.filters_Filter_3 = _data[\"filters_Filter_3\"];\n this.filters_Filter_4 = _data[\"filters_Filter_4\"];\n this.filters_Filter_5 = _data[\"filters_Filter_5\"];\n this.filters_Filter_6 = _data[\"filters_Filter_6\"];\n this.filters_User_Ascii1 = _data[\"filters_User_Ascii1\"];\n this.filters_User_Ascii2 = _data[\"filters_User_Ascii2\"];\n this.filters_User_Ascii3 = _data[\"filters_User_Ascii3\"];\n this.filters_User_Ascii4 = _data[\"filters_User_Ascii4\"];\n this.filters_User_Ascii5 = _data[\"filters_User_Ascii5\"];\n this.filters_User_Ascii6 = _data[\"filters_User_Ascii6\"];\n this.filters_User_Ascii7 = _data[\"filters_User_Ascii7\"];\n this.filters_User_Ascii8 = _data[\"filters_User_Ascii8\"];\n this.filters_User_Ascii9 = _data[\"filters_User_Ascii9\"];\n this.filters_User_Ascii10 = _data[\"filters_User_Ascii10\"];\n this.filters_User_Ascii11 = _data[\"filters_User_Ascii11\"];\n this.filters_User_Ascii12 = _data[\"filters_User_Ascii12\"];\n this.filters_User_Ascii13 = _data[\"filters_User_Ascii13\"];\n this.filters_User_Ascii14 = _data[\"filters_User_Ascii14\"];\n this.filters_User_Ascii15 = _data[\"filters_User_Ascii15\"];\n this.filters_User_Ascii16 = _data[\"filters_User_Ascii16\"];\n this.filters_User_Ascii17 = _data[\"filters_User_Ascii17\"];\n this.filters_User_Ascii18 = _data[\"filters_User_Ascii18\"];\n this.filters_User_Ascii19 = _data[\"filters_User_Ascii19\"];\n this.filters_User_Ascii20 = _data[\"filters_User_Ascii20\"];\n this.filters_User_Vendor1 = _data[\"filters_User_Vendor1\"];\n this.filters_User_Vendor2 = _data[\"filters_User_Vendor2\"];\n this.filters_User_Vendor3 = _data[\"filters_User_Vendor3\"];\n this.filters_User_Vendor4 = _data[\"filters_User_Vendor4\"];\n this.filters_User_Vendor5 = _data[\"filters_User_Vendor5\"];\n this.filters_User_Vendor6 = _data[\"filters_User_Vendor6\"];\n this.filters_User_Flag1 = _data[\"filters_User_Flag1\"];\n this.filters_User_Flag2 = _data[\"filters_User_Flag2\"];\n this.filters_User_Flag3 = _data[\"filters_User_Flag3\"];\n this.filters_User_Flag4 = _data[\"filters_User_Flag4\"];\n this.filters_User_Flag5 = _data[\"filters_User_Flag5\"];\n this.filters_User_Flag6 = _data[\"filters_User_Flag6\"];\n this.filters_User_Flag7 = _data[\"filters_User_Flag7\"];\n this.filters_User_Flag8 = _data[\"filters_User_Flag8\"];\n this.filters_User_Flag9 = _data[\"filters_User_Flag9\"];\n this.filters_User_Flag10 = _data[\"filters_User_Flag10\"];\n this.filters_User_Flag11 = _data[\"filters_User_Flag11\"];\n this.filters_User_Flag12 = _data[\"filters_User_Flag12\"];\n this.filters_User_Code1 = _data[\"filters_User_Code1\"];\n this.filters_User_Name2 = _data[\"filters_User_Name2\"];\n this.filters_User_Integer1 = _data[\"filters_User_Integer1\"];\n this.filters_User_Integer2 = _data[\"filters_User_Integer2\"];\n this.filters_User_Integer3 = _data[\"filters_User_Integer3\"];\n this.filters_User_Integer4 = _data[\"filters_User_Integer4\"];\n this.filters_User_Integer5 = _data[\"filters_User_Integer5\"];\n this.filters_User_Number1 = _data[\"filters_User_Number1\"];\n this.filters_User_Number2 = _data[\"filters_User_Number2\"];\n this.filters_User_Number3 = _data[\"filters_User_Number3\"];\n this.filters_User_Number4 = _data[\"filters_User_Number4\"];\n this.filters_User_Number5 = _data[\"filters_User_Number5\"];\n this.filters_User_Number6 = _data[\"filters_User_Number6\"];\n this.filters_User_Number7 = _data[\"filters_User_Number7\"];\n this.filters_User_Number8 = _data[\"filters_User_Number8\"];\n this.filters_User_Number9 = _data[\"filters_User_Number9\"];\n this.filters_User_Number10 = _data[\"filters_User_Number10\"];\n this.filters_User_Number11 = _data[\"filters_User_Number11\"];\n this.filters_User_Number12 = _data[\"filters_User_Number12\"];\n this.filters_User_Number13 = _data[\"filters_User_Number13\"];\n this.filters_User_Number14 = _data[\"filters_User_Number14\"];\n this.filters_User_Number15 = _data[\"filters_User_Number15\"];\n this.filters_User_Number16 = _data[\"filters_User_Number16\"];\n this.filters_User_Number17 = _data[\"filters_User_Number17\"];\n this.filters_User_Number18 = _data[\"filters_User_Number18\"];\n this.filters_User_Number19 = _data[\"filters_User_Number19\"];\n this.filters_User_Number20 = _data[\"filters_User_Number20\"];\n this.filters_User_Perc1 = _data[\"filters_User_Perc1\"];\n this.filters_User_Perc2 = _data[\"filters_User_Perc2\"];\n this.filters_User_Def_Date = _data[\"filters_User_Def_Date\"]\n ? new Date(_data[\"filters_User_Def_Date\"].toString())\n : undefined;\n this.filters_User_Date2 = _data[\"filters_User_Date2\"]\n ? new Date(_data[\"filters_User_Date2\"].toString())\n : undefined;\n this.filters_User_Date3 = _data[\"filters_User_Date3\"]\n ? new Date(_data[\"filters_User_Date3\"].toString())\n : undefined;\n this.filters_User_Date4 = _data[\"filters_User_Date4\"]\n ? new Date(_data[\"filters_User_Date4\"].toString())\n : undefined;\n this.filters_User_Date5 = _data[\"filters_User_Date5\"]\n ? new Date(_data[\"filters_User_Date5\"].toString())\n : undefined;\n this.filters_User_Date6 = _data[\"filters_User_Date6\"]\n ? new Date(_data[\"filters_User_Date6\"].toString())\n : undefined;\n this.filters_User_Date7 = _data[\"filters_User_Date7\"]\n ? new Date(_data[\"filters_User_Date7\"].toString())\n : undefined;\n this.filters_User_Date8 = _data[\"filters_User_Date8\"]\n ? new Date(_data[\"filters_User_Date8\"].toString())\n : undefined;\n this.filters_User_Date9 = _data[\"filters_User_Date9\"]\n ? new Date(_data[\"filters_User_Date9\"].toString())\n : undefined;\n this.filters_User_Date10 = _data[\"filters_User_Date10\"]\n ? new Date(_data[\"filters_User_Date10\"].toString())\n : undefined;\n this.filters_User_Date11 = _data[\"filters_User_Date11\"]\n ? new Date(_data[\"filters_User_Date11\"].toString())\n : undefined;\n this.totals_BaseLabor_Direct = _data[\"totals_BaseLabor_Direct\"];\n this.totals_BaseLabor_Indirect = _data[\"totals_BaseLabor_Indirect\"];\n this.totals_BaseLabor_Total = _data[\"totals_BaseLabor_Total\"];\n this.totals_Burden_Direct = _data[\"totals_Burden_Direct\"];\n this.totals_Burden_Indirect = _data[\"totals_Burden_Indirect\"];\n this.totals_Burden_Total = _data[\"totals_Burden_Total\"];\n this.totals_TotalLabor_Direct = _data[\"totals_TotalLabor_Direct\"];\n this.totals_TotalLabor_Indirect = _data[\"totals_TotalLabor_Indirect\"];\n this.totals_TotalLabor_Total = _data[\"totals_TotalLabor_Total\"];\n this.totals_PermanentMaterial_Direct =\n _data[\"totals_PermanentMaterial_Direct\"];\n this.totals_PermanentMaterial_Indirect =\n _data[\"totals_PermanentMaterial_Indirect\"];\n this.totals_PermanentMaterial_Total =\n _data[\"totals_PermanentMaterial_Total\"];\n this.totals_ConstructionMaterial_Direct =\n _data[\"totals_ConstructionMaterial_Direct\"];\n this.totals_ConstructionMaterial_Indirect =\n _data[\"totals_ConstructionMaterial_Indirect\"];\n this.totals_ConstructionMaterial_Total =\n _data[\"totals_ConstructionMaterial_Total\"];\n this.totals_Subcontract_Direct = _data[\"totals_Subcontract_Direct\"];\n this.totals_Subcontract_Indirect = _data[\"totals_Subcontract_Indirect\"];\n this.totals_Subcontract_Total = _data[\"totals_Subcontract_Total\"];\n this.totals_EquipmentOperatingExpense_Direct =\n _data[\"totals_EquipmentOperatingExpense_Direct\"];\n this.totals_EquipmentOperatingExpense_Indirect =\n _data[\"totals_EquipmentOperatingExpense_Indirect\"];\n this.totals_EquipmentOperatingExpense_Total =\n _data[\"totals_EquipmentOperatingExpense_Total\"];\n this.totals_CompanyEquipment_Direct =\n _data[\"totals_CompanyEquipment_Direct\"];\n this.totals_CompanyEquipment_Indirect =\n _data[\"totals_CompanyEquipment_Indirect\"];\n this.totals_CompanyEquipment_Total =\n _data[\"totals_CompanyEquipment_Total\"];\n this.totals_RentedEquipment_Direct =\n _data[\"totals_RentedEquipment_Direct\"];\n this.totals_RentedEquipment_Indirect =\n _data[\"totals_RentedEquipment_Indirect\"];\n this.totals_RentedEquipment_Total = _data[\"totals_RentedEquipment_Total\"];\n this.totals_Misc1_Direct = _data[\"totals_Misc1_Direct\"];\n this.totals_Misc1_Indirect = _data[\"totals_Misc1_Indirect\"];\n this.totals_Misc1_Total = _data[\"totals_Misc1_Total\"];\n this.totals_Misc2_Direct = _data[\"totals_Misc2_Direct\"];\n this.totals_Misc2_Indirect = _data[\"totals_Misc2_Indirect\"];\n this.totals_Misc2_Total = _data[\"totals_Misc2_Total\"];\n this.totals_Misc3_Direct = _data[\"totals_Misc3_Direct\"];\n this.totals_Misc3_Indirect = _data[\"totals_Misc3_Indirect\"];\n this.totals_Misc3_Total = _data[\"totals_Misc3_Total\"];\n this.totals_TotalEntryCost_Takeoff_Direct =\n _data[\"totals_TotalEntryCost_Takeoff_Direct\"];\n this.totals_TotalEntryCost_Takeoff_Indirect =\n _data[\"totals_TotalEntryCost_Takeoff_Indirect\"];\n this.totals_TotalEntryCost_Takeoff_Total =\n _data[\"totals_TotalEntryCost_Takeoff_Total\"];\n this.totals_TotalEntryCost_Bid_Direct =\n _data[\"totals_TotalEntryCost_Bid_Direct\"];\n this.totals_TotalEntryCost_Bid_Indirect =\n _data[\"totals_TotalEntryCost_Bid_Indirect\"];\n this.totals_TotalEntryCost_Bid_Total =\n _data[\"totals_TotalEntryCost_Bid_Total\"];\n this.totals_BalMarkup_Bid = _data[\"totals_BalMarkup_Bid\"];\n this.totals_ActualMarkup_Bid = _data[\"totals_ActualMarkup_Bid\"];\n this.totals_BalancedBid_Bid = _data[\"totals_BalancedBid_Bid\"];\n this.totals_BidTotal_Bid = _data[\"totals_BidTotal_Bid\"];\n this.totals_AddonBondTotal = _data[\"totals_AddonBondTotal\"];\n this.totals_TotalEqp_Direct = _data[\"totals_TotalEqp_Direct\"];\n this.totals_TotalEqp_Indirect = _data[\"totals_TotalEqp_Indirect\"];\n this.totals_TotalEqp_Total = _data[\"totals_TotalEqp_Total\"];\n this.totals_Manhours_Direct = _data[\"totals_Manhours_Direct\"];\n this.totals_Manhours_Indirect = _data[\"totals_Manhours_Indirect\"];\n this.totals_Manhours_Total = _data[\"totals_Manhours_Total\"];\n this.totals_Addon_Cost = _data[\"totals_Addon_Cost\"];\n this.totals_Bond = _data[\"totals_Bond\"];\n this.totals_Addon_Markup = _data[\"totals_Addon_Markup\"];\n this.totals_Addon_Total = _data[\"totals_Addon_Total\"];\n this.totals_TotalCost_Takeoff = _data[\"totals_TotalCost_Takeoff\"];\n this.totals_Job_Duration = _data[\"totals_Job_Duration\"];\n this.totals_BalMarkup_Takeoff = _data[\"totals_BalMarkup_Takeoff\"];\n this.totals_ActualMarkup_Takeoff = _data[\"totals_ActualMarkup_Takeoff\"];\n this.totals_BalancedBid_Takeoff = _data[\"totals_BalancedBid_Takeoff\"];\n this.totals_PassThrough_Cost = _data[\"totals_PassThrough_Cost\"];\n this.totals_PassThrough_Adjustment =\n _data[\"totals_PassThrough_Adjustment\"];\n this.totals_PassThrough_Total = _data[\"totals_PassThrough_Total\"];\n this.totals_TotalCost_Bid_LessPassThrough =\n _data[\"totals_TotalCost_Bid_LessPassThrough\"];\n this.totals_TotalCost_Bid = _data[\"totals_TotalCost_Bid\"];\n this.totals_Total_User_Adjustments =\n _data[\"totals_Total_User_Adjustments\"];\n this.totals_Total_User_Adjustments_Cost =\n _data[\"totals_Total_User_Adjustments_Cost\"];\n this.totals_Desired_Bid = _data[\"totals_Desired_Bid\"];\n this.totals_Desired_Bid_Diff = _data[\"totals_Desired_Bid_Diff\"];\n this.totals_BidTotal_Takeoff = _data[\"totals_BidTotal_Takeoff\"];\n this.totals_TotalCost_Takeoff_LessPassThrough =\n _data[\"totals_TotalCost_Takeoff_LessPassThrough\"];\n this.totals_MarkupPercentCost_Takeoff =\n _data[\"totals_MarkupPercentCost_Takeoff\"];\n this.totals_MarkupPercentCost_Bid = _data[\"totals_MarkupPercentCost_Bid\"];\n this.totals_MarkupPercentSales_Takeoff =\n _data[\"totals_MarkupPercentSales_Takeoff\"];\n this.totals_MarkupPercentSales_Bid =\n _data[\"totals_MarkupPercentSales_Bid\"];\n this.totals_TotalCost_Takeoff_LessPassThroughAndAdjustments =\n _data[\"totals_TotalCost_Takeoff_LessPassThroughAndAdjustments\"];\n this.totals_TotalCost_Bid_LessPassThroughAndAdjustments =\n _data[\"totals_TotalCost_Bid_LessPassThroughAndAdjustments\"];\n this.totals_TotalEntryCost_Bid_Spread_Indirect =\n _data[\"totals_TotalEntryCost_Bid_Spread_Indirect\"];\n this.totals_AddonBond_Cost_Bid_Spread_Total =\n _data[\"totals_AddonBond_Cost_Bid_Spread_Total\"];\n this.totals_TotalCost_Bid_Spread = _data[\"totals_TotalCost_Bid_Spread\"];\n this.totals_BalMarkup_Bid_Spread = _data[\"totals_BalMarkup_Bid_Spread\"];\n this.totals_ActualMarkup_Bid_Spread =\n _data[\"totals_ActualMarkup_Bid_Spread\"];\n this.totals_Actv_User_Quan1 = _data[\"totals_Actv_User_Quan1\"];\n this.totals_Actv_User_Quan2 = _data[\"totals_Actv_User_Quan2\"];\n this.totals_Actv_User_Quan3 = _data[\"totals_Actv_User_Quan3\"];\n this.totals_Actv_User_Quan4 = _data[\"totals_Actv_User_Quan4\"];\n this.totals_Open_Biditems = _data[\"totals_Open_Biditems\"];\n this.totals_Minority_Goal_Percent = _data[\"totals_Minority_Goal_Percent\"];\n this.totals_Minority_Goal_Total = _data[\"totals_Minority_Goal_Total\"];\n this.totals_Minority_Current_Percent =\n _data[\"totals_Minority_Current_Percent\"];\n this.totals_Minority_Current_Total =\n _data[\"totals_Minority_Current_Total\"];\n this.empId = _data[\"empId\"];\n }\n }\n\n static fromJS(data: any): EstimateFlattened {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateFlattened();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"processedStatus\"] = this.processedStatus;\n data[\"partitionId\"] = this.partitionId;\n data[\"lastModified\"] = this.lastModified\n ? this.lastModified.toISOString()\n : undefined;\n data[\"lastProcessed\"] = this.lastProcessed\n ? this.lastProcessed.toISOString()\n : undefined;\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"blobUrl\"] = this.blobUrl;\n data[\"description\"] = this.description;\n data[\"estimateVersion\"] = this.estimateVersion;\n data[\"businessUnitCode\"] = this.businessUnitCode;\n data[\"isExcludedEstimate\"] = this.isExcludedEstimate;\n data[\"isActiveEstimate\"] = this.isActiveEstimate;\n data[\"filters_Project_Name\"] = this.filters_Project_Name;\n data[\"filters_Project_Number\"] = this.filters_Project_Number;\n data[\"filters_Address\"] = this.filters_Address;\n data[\"filters_Latitude\"] = this.filters_Latitude;\n data[\"filters_Longitude\"] = this.filters_Longitude;\n data[\"filters_Status\"] = this.filters_Status;\n data[\"filters_Engineer\"] = this.filters_Engineer;\n data[\"filters_Resp_Estimator\"] = this.filters_Resp_Estimator;\n data[\"filters_Owner\"] = this.filters_Owner;\n data[\"filters_Bid_Date\"] = this.filters_Bid_Date\n ? this.filters_Bid_Date.toISOString()\n : undefined;\n data[\"filters_Start_Date\"] = this.filters_Start_Date\n ? this.filters_Start_Date.toISOString()\n : undefined;\n data[\"filters_Review_Date\"] = this.filters_Review_Date\n ? this.filters_Review_Date.toISOString()\n : undefined;\n data[\"filters_Created_Date\"] = this.filters_Created_Date\n ? this.filters_Created_Date.toISOString()\n : undefined;\n data[\"filters_Modified_Date\"] = this.filters_Modified_Date\n ? this.filters_Modified_Date.toISOString()\n : undefined;\n data[\"filters_Modified_Time\"] = this.filters_Modified_Time;\n data[\"filters_Bid_Amount\"] = this.filters_Bid_Amount;\n data[\"filters_Takeoff_Amount\"] = this.filters_Takeoff_Amount;\n data[\"filters_Profit_Bidquan\"] = this.filters_Profit_Bidquan;\n data[\"filters_Profit_Takeoff\"] = this.filters_Profit_Takeoff;\n data[\"filters_Tot_Cost\"] = this.filters_Tot_Cost;\n data[\"filters_Wc_State\"] = this.filters_Wc_State;\n data[\"filters_Type_Work\"] = this.filters_Type_Work;\n data[\"filters_Filter_1\"] = this.filters_Filter_1;\n data[\"filters_Filter_2\"] = this.filters_Filter_2;\n data[\"filters_Filter_3\"] = this.filters_Filter_3;\n data[\"filters_Filter_4\"] = this.filters_Filter_4;\n data[\"filters_Filter_5\"] = this.filters_Filter_5;\n data[\"filters_Filter_6\"] = this.filters_Filter_6;\n data[\"filters_User_Ascii1\"] = this.filters_User_Ascii1;\n data[\"filters_User_Ascii2\"] = this.filters_User_Ascii2;\n data[\"filters_User_Ascii3\"] = this.filters_User_Ascii3;\n data[\"filters_User_Ascii4\"] = this.filters_User_Ascii4;\n data[\"filters_User_Ascii5\"] = this.filters_User_Ascii5;\n data[\"filters_User_Ascii6\"] = this.filters_User_Ascii6;\n data[\"filters_User_Ascii7\"] = this.filters_User_Ascii7;\n data[\"filters_User_Ascii8\"] = this.filters_User_Ascii8;\n data[\"filters_User_Ascii9\"] = this.filters_User_Ascii9;\n data[\"filters_User_Ascii10\"] = this.filters_User_Ascii10;\n data[\"filters_User_Ascii11\"] = this.filters_User_Ascii11;\n data[\"filters_User_Ascii12\"] = this.filters_User_Ascii12;\n data[\"filters_User_Ascii13\"] = this.filters_User_Ascii13;\n data[\"filters_User_Ascii14\"] = this.filters_User_Ascii14;\n data[\"filters_User_Ascii15\"] = this.filters_User_Ascii15;\n data[\"filters_User_Ascii16\"] = this.filters_User_Ascii16;\n data[\"filters_User_Ascii17\"] = this.filters_User_Ascii17;\n data[\"filters_User_Ascii18\"] = this.filters_User_Ascii18;\n data[\"filters_User_Ascii19\"] = this.filters_User_Ascii19;\n data[\"filters_User_Ascii20\"] = this.filters_User_Ascii20;\n data[\"filters_User_Vendor1\"] = this.filters_User_Vendor1;\n data[\"filters_User_Vendor2\"] = this.filters_User_Vendor2;\n data[\"filters_User_Vendor3\"] = this.filters_User_Vendor3;\n data[\"filters_User_Vendor4\"] = this.filters_User_Vendor4;\n data[\"filters_User_Vendor5\"] = this.filters_User_Vendor5;\n data[\"filters_User_Vendor6\"] = this.filters_User_Vendor6;\n data[\"filters_User_Flag1\"] = this.filters_User_Flag1;\n data[\"filters_User_Flag2\"] = this.filters_User_Flag2;\n data[\"filters_User_Flag3\"] = this.filters_User_Flag3;\n data[\"filters_User_Flag4\"] = this.filters_User_Flag4;\n data[\"filters_User_Flag5\"] = this.filters_User_Flag5;\n data[\"filters_User_Flag6\"] = this.filters_User_Flag6;\n data[\"filters_User_Flag7\"] = this.filters_User_Flag7;\n data[\"filters_User_Flag8\"] = this.filters_User_Flag8;\n data[\"filters_User_Flag9\"] = this.filters_User_Flag9;\n data[\"filters_User_Flag10\"] = this.filters_User_Flag10;\n data[\"filters_User_Flag11\"] = this.filters_User_Flag11;\n data[\"filters_User_Flag12\"] = this.filters_User_Flag12;\n data[\"filters_User_Code1\"] = this.filters_User_Code1;\n data[\"filters_User_Name2\"] = this.filters_User_Name2;\n data[\"filters_User_Integer1\"] = this.filters_User_Integer1;\n data[\"filters_User_Integer2\"] = this.filters_User_Integer2;\n data[\"filters_User_Integer3\"] = this.filters_User_Integer3;\n data[\"filters_User_Integer4\"] = this.filters_User_Integer4;\n data[\"filters_User_Integer5\"] = this.filters_User_Integer5;\n data[\"filters_User_Number1\"] = this.filters_User_Number1;\n data[\"filters_User_Number2\"] = this.filters_User_Number2;\n data[\"filters_User_Number3\"] = this.filters_User_Number3;\n data[\"filters_User_Number4\"] = this.filters_User_Number4;\n data[\"filters_User_Number5\"] = this.filters_User_Number5;\n data[\"filters_User_Number6\"] = this.filters_User_Number6;\n data[\"filters_User_Number7\"] = this.filters_User_Number7;\n data[\"filters_User_Number8\"] = this.filters_User_Number8;\n data[\"filters_User_Number9\"] = this.filters_User_Number9;\n data[\"filters_User_Number10\"] = this.filters_User_Number10;\n data[\"filters_User_Number11\"] = this.filters_User_Number11;\n data[\"filters_User_Number12\"] = this.filters_User_Number12;\n data[\"filters_User_Number13\"] = this.filters_User_Number13;\n data[\"filters_User_Number14\"] = this.filters_User_Number14;\n data[\"filters_User_Number15\"] = this.filters_User_Number15;\n data[\"filters_User_Number16\"] = this.filters_User_Number16;\n data[\"filters_User_Number17\"] = this.filters_User_Number17;\n data[\"filters_User_Number18\"] = this.filters_User_Number18;\n data[\"filters_User_Number19\"] = this.filters_User_Number19;\n data[\"filters_User_Number20\"] = this.filters_User_Number20;\n data[\"filters_User_Perc1\"] = this.filters_User_Perc1;\n data[\"filters_User_Perc2\"] = this.filters_User_Perc2;\n data[\"filters_User_Def_Date\"] = this.filters_User_Def_Date\n ? this.filters_User_Def_Date.toISOString()\n : undefined;\n data[\"filters_User_Date2\"] = this.filters_User_Date2\n ? this.filters_User_Date2.toISOString()\n : undefined;\n data[\"filters_User_Date3\"] = this.filters_User_Date3\n ? this.filters_User_Date3.toISOString()\n : undefined;\n data[\"filters_User_Date4\"] = this.filters_User_Date4\n ? this.filters_User_Date4.toISOString()\n : undefined;\n data[\"filters_User_Date5\"] = this.filters_User_Date5\n ? this.filters_User_Date5.toISOString()\n : undefined;\n data[\"filters_User_Date6\"] = this.filters_User_Date6\n ? this.filters_User_Date6.toISOString()\n : undefined;\n data[\"filters_User_Date7\"] = this.filters_User_Date7\n ? this.filters_User_Date7.toISOString()\n : undefined;\n data[\"filters_User_Date8\"] = this.filters_User_Date8\n ? this.filters_User_Date8.toISOString()\n : undefined;\n data[\"filters_User_Date9\"] = this.filters_User_Date9\n ? this.filters_User_Date9.toISOString()\n : undefined;\n data[\"filters_User_Date10\"] = this.filters_User_Date10\n ? this.filters_User_Date10.toISOString()\n : undefined;\n data[\"filters_User_Date11\"] = this.filters_User_Date11\n ? this.filters_User_Date11.toISOString()\n : undefined;\n data[\"totals_BaseLabor_Direct\"] = this.totals_BaseLabor_Direct;\n data[\"totals_BaseLabor_Indirect\"] = this.totals_BaseLabor_Indirect;\n data[\"totals_BaseLabor_Total\"] = this.totals_BaseLabor_Total;\n data[\"totals_Burden_Direct\"] = this.totals_Burden_Direct;\n data[\"totals_Burden_Indirect\"] = this.totals_Burden_Indirect;\n data[\"totals_Burden_Total\"] = this.totals_Burden_Total;\n data[\"totals_TotalLabor_Direct\"] = this.totals_TotalLabor_Direct;\n data[\"totals_TotalLabor_Indirect\"] = this.totals_TotalLabor_Indirect;\n data[\"totals_TotalLabor_Total\"] = this.totals_TotalLabor_Total;\n data[\n \"totals_PermanentMaterial_Direct\"\n ] = this.totals_PermanentMaterial_Direct;\n data[\n \"totals_PermanentMaterial_Indirect\"\n ] = this.totals_PermanentMaterial_Indirect;\n data[\n \"totals_PermanentMaterial_Total\"\n ] = this.totals_PermanentMaterial_Total;\n data[\n \"totals_ConstructionMaterial_Direct\"\n ] = this.totals_ConstructionMaterial_Direct;\n data[\n \"totals_ConstructionMaterial_Indirect\"\n ] = this.totals_ConstructionMaterial_Indirect;\n data[\n \"totals_ConstructionMaterial_Total\"\n ] = this.totals_ConstructionMaterial_Total;\n data[\"totals_Subcontract_Direct\"] = this.totals_Subcontract_Direct;\n data[\"totals_Subcontract_Indirect\"] = this.totals_Subcontract_Indirect;\n data[\"totals_Subcontract_Total\"] = this.totals_Subcontract_Total;\n data[\n \"totals_EquipmentOperatingExpense_Direct\"\n ] = this.totals_EquipmentOperatingExpense_Direct;\n data[\n \"totals_EquipmentOperatingExpense_Indirect\"\n ] = this.totals_EquipmentOperatingExpense_Indirect;\n data[\n \"totals_EquipmentOperatingExpense_Total\"\n ] = this.totals_EquipmentOperatingExpense_Total;\n data[\n \"totals_CompanyEquipment_Direct\"\n ] = this.totals_CompanyEquipment_Direct;\n data[\n \"totals_CompanyEquipment_Indirect\"\n ] = this.totals_CompanyEquipment_Indirect;\n data[\"totals_CompanyEquipment_Total\"] = this.totals_CompanyEquipment_Total;\n data[\"totals_RentedEquipment_Direct\"] = this.totals_RentedEquipment_Direct;\n data[\n \"totals_RentedEquipment_Indirect\"\n ] = this.totals_RentedEquipment_Indirect;\n data[\"totals_RentedEquipment_Total\"] = this.totals_RentedEquipment_Total;\n data[\"totals_Misc1_Direct\"] = this.totals_Misc1_Direct;\n data[\"totals_Misc1_Indirect\"] = this.totals_Misc1_Indirect;\n data[\"totals_Misc1_Total\"] = this.totals_Misc1_Total;\n data[\"totals_Misc2_Direct\"] = this.totals_Misc2_Direct;\n data[\"totals_Misc2_Indirect\"] = this.totals_Misc2_Indirect;\n data[\"totals_Misc2_Total\"] = this.totals_Misc2_Total;\n data[\"totals_Misc3_Direct\"] = this.totals_Misc3_Direct;\n data[\"totals_Misc3_Indirect\"] = this.totals_Misc3_Indirect;\n data[\"totals_Misc3_Total\"] = this.totals_Misc3_Total;\n data[\n \"totals_TotalEntryCost_Takeoff_Direct\"\n ] = this.totals_TotalEntryCost_Takeoff_Direct;\n data[\n \"totals_TotalEntryCost_Takeoff_Indirect\"\n ] = this.totals_TotalEntryCost_Takeoff_Indirect;\n data[\n \"totals_TotalEntryCost_Takeoff_Total\"\n ] = this.totals_TotalEntryCost_Takeoff_Total;\n data[\n \"totals_TotalEntryCost_Bid_Direct\"\n ] = this.totals_TotalEntryCost_Bid_Direct;\n data[\n \"totals_TotalEntryCost_Bid_Indirect\"\n ] = this.totals_TotalEntryCost_Bid_Indirect;\n data[\n \"totals_TotalEntryCost_Bid_Total\"\n ] = this.totals_TotalEntryCost_Bid_Total;\n data[\"totals_BalMarkup_Bid\"] = this.totals_BalMarkup_Bid;\n data[\"totals_ActualMarkup_Bid\"] = this.totals_ActualMarkup_Bid;\n data[\"totals_BalancedBid_Bid\"] = this.totals_BalancedBid_Bid;\n data[\"totals_BidTotal_Bid\"] = this.totals_BidTotal_Bid;\n data[\"totals_AddonBondTotal\"] = this.totals_AddonBondTotal;\n data[\"totals_TotalEqp_Direct\"] = this.totals_TotalEqp_Direct;\n data[\"totals_TotalEqp_Indirect\"] = this.totals_TotalEqp_Indirect;\n data[\"totals_TotalEqp_Total\"] = this.totals_TotalEqp_Total;\n data[\"totals_Manhours_Direct\"] = this.totals_Manhours_Direct;\n data[\"totals_Manhours_Indirect\"] = this.totals_Manhours_Indirect;\n data[\"totals_Manhours_Total\"] = this.totals_Manhours_Total;\n data[\"totals_Addon_Cost\"] = this.totals_Addon_Cost;\n data[\"totals_Bond\"] = this.totals_Bond;\n data[\"totals_Addon_Markup\"] = this.totals_Addon_Markup;\n data[\"totals_Addon_Total\"] = this.totals_Addon_Total;\n data[\"totals_TotalCost_Takeoff\"] = this.totals_TotalCost_Takeoff;\n data[\"totals_Job_Duration\"] = this.totals_Job_Duration;\n data[\"totals_BalMarkup_Takeoff\"] = this.totals_BalMarkup_Takeoff;\n data[\"totals_ActualMarkup_Takeoff\"] = this.totals_ActualMarkup_Takeoff;\n data[\"totals_BalancedBid_Takeoff\"] = this.totals_BalancedBid_Takeoff;\n data[\"totals_PassThrough_Cost\"] = this.totals_PassThrough_Cost;\n data[\"totals_PassThrough_Adjustment\"] = this.totals_PassThrough_Adjustment;\n data[\"totals_PassThrough_Total\"] = this.totals_PassThrough_Total;\n data[\n \"totals_TotalCost_Bid_LessPassThrough\"\n ] = this.totals_TotalCost_Bid_LessPassThrough;\n data[\"totals_TotalCost_Bid\"] = this.totals_TotalCost_Bid;\n data[\"totals_Total_User_Adjustments\"] = this.totals_Total_User_Adjustments;\n data[\n \"totals_Total_User_Adjustments_Cost\"\n ] = this.totals_Total_User_Adjustments_Cost;\n data[\"totals_Desired_Bid\"] = this.totals_Desired_Bid;\n data[\"totals_Desired_Bid_Diff\"] = this.totals_Desired_Bid_Diff;\n data[\"totals_BidTotal_Takeoff\"] = this.totals_BidTotal_Takeoff;\n data[\n \"totals_TotalCost_Takeoff_LessPassThrough\"\n ] = this.totals_TotalCost_Takeoff_LessPassThrough;\n data[\n \"totals_MarkupPercentCost_Takeoff\"\n ] = this.totals_MarkupPercentCost_Takeoff;\n data[\"totals_MarkupPercentCost_Bid\"] = this.totals_MarkupPercentCost_Bid;\n data[\n \"totals_MarkupPercentSales_Takeoff\"\n ] = this.totals_MarkupPercentSales_Takeoff;\n data[\"totals_MarkupPercentSales_Bid\"] = this.totals_MarkupPercentSales_Bid;\n data[\n \"totals_TotalCost_Takeoff_LessPassThroughAndAdjustments\"\n ] = this.totals_TotalCost_Takeoff_LessPassThroughAndAdjustments;\n data[\n \"totals_TotalCost_Bid_LessPassThroughAndAdjustments\"\n ] = this.totals_TotalCost_Bid_LessPassThroughAndAdjustments;\n data[\n \"totals_TotalEntryCost_Bid_Spread_Indirect\"\n ] = this.totals_TotalEntryCost_Bid_Spread_Indirect;\n data[\n \"totals_AddonBond_Cost_Bid_Spread_Total\"\n ] = this.totals_AddonBond_Cost_Bid_Spread_Total;\n data[\"totals_TotalCost_Bid_Spread\"] = this.totals_TotalCost_Bid_Spread;\n data[\"totals_BalMarkup_Bid_Spread\"] = this.totals_BalMarkup_Bid_Spread;\n data[\n \"totals_ActualMarkup_Bid_Spread\"\n ] = this.totals_ActualMarkup_Bid_Spread;\n data[\"totals_Actv_User_Quan1\"] = this.totals_Actv_User_Quan1;\n data[\"totals_Actv_User_Quan2\"] = this.totals_Actv_User_Quan2;\n data[\"totals_Actv_User_Quan3\"] = this.totals_Actv_User_Quan3;\n data[\"totals_Actv_User_Quan4\"] = this.totals_Actv_User_Quan4;\n data[\"totals_Open_Biditems\"] = this.totals_Open_Biditems;\n data[\"totals_Minority_Goal_Percent\"] = this.totals_Minority_Goal_Percent;\n data[\"totals_Minority_Goal_Total\"] = this.totals_Minority_Goal_Total;\n data[\n \"totals_Minority_Current_Percent\"\n ] = this.totals_Minority_Current_Percent;\n data[\"totals_Minority_Current_Total\"] = this.totals_Minority_Current_Total;\n data[\"empId\"] = this.empId;\n return data;\n }\n}\n\nexport interface IEstimateFlattened {\n id: string;\n processedStatus: StatusCode;\n partitionId: string;\n lastModified: Date;\n lastProcessed?: Date | undefined;\n code?: string | undefined;\n name?: string | undefined;\n blobUrl?: string | undefined;\n description?: string | undefined;\n estimateVersion?: string | undefined;\n businessUnitCode?: string | undefined;\n isExcludedEstimate: boolean;\n isActiveEstimate: boolean;\n filters_Project_Name?: string | undefined;\n filters_Project_Number?: string | undefined;\n filters_Address?: string | undefined;\n filters_Latitude?: number | undefined;\n filters_Longitude?: number | undefined;\n filters_Status?: string | undefined;\n filters_Engineer?: string | undefined;\n filters_Resp_Estimator?: string | undefined;\n filters_Owner?: string | undefined;\n filters_Bid_Date?: Date | undefined;\n filters_Start_Date?: Date | undefined;\n filters_Review_Date?: Date | undefined;\n filters_Created_Date?: Date | undefined;\n filters_Modified_Date?: Date | undefined;\n filters_Modified_Time?: number | undefined;\n filters_Bid_Amount?: number | undefined;\n filters_Takeoff_Amount?: number | undefined;\n filters_Profit_Bidquan?: number | undefined;\n filters_Profit_Takeoff?: number | undefined;\n filters_Tot_Cost?: number | undefined;\n filters_Wc_State?: string | undefined;\n filters_Type_Work?: string | undefined;\n filters_Filter_1?: string | undefined;\n filters_Filter_2?: string | undefined;\n filters_Filter_3?: string | undefined;\n filters_Filter_4?: string | undefined;\n filters_Filter_5?: string | undefined;\n filters_Filter_6?: string | undefined;\n filters_User_Ascii1?: string | undefined;\n filters_User_Ascii2?: string | undefined;\n filters_User_Ascii3?: string | undefined;\n filters_User_Ascii4?: string | undefined;\n filters_User_Ascii5?: string | undefined;\n filters_User_Ascii6?: string | undefined;\n filters_User_Ascii7?: string | undefined;\n filters_User_Ascii8?: string | undefined;\n filters_User_Ascii9?: string | undefined;\n filters_User_Ascii10?: string | undefined;\n filters_User_Ascii11?: string | undefined;\n filters_User_Ascii12?: string | undefined;\n filters_User_Ascii13?: string | undefined;\n filters_User_Ascii14?: string | undefined;\n filters_User_Ascii15?: string | undefined;\n filters_User_Ascii16?: string | undefined;\n filters_User_Ascii17?: string | undefined;\n filters_User_Ascii18?: string | undefined;\n filters_User_Ascii19?: string | undefined;\n filters_User_Ascii20?: string | undefined;\n filters_User_Vendor1?: string | undefined;\n filters_User_Vendor2?: string | undefined;\n filters_User_Vendor3?: string | undefined;\n filters_User_Vendor4?: string | undefined;\n filters_User_Vendor5?: string | undefined;\n filters_User_Vendor6?: string | undefined;\n filters_User_Flag1?: string | undefined;\n filters_User_Flag2?: string | undefined;\n filters_User_Flag3?: string | undefined;\n filters_User_Flag4?: string | undefined;\n filters_User_Flag5?: string | undefined;\n filters_User_Flag6?: string | undefined;\n filters_User_Flag7?: string | undefined;\n filters_User_Flag8?: string | undefined;\n filters_User_Flag9?: string | undefined;\n filters_User_Flag10?: string | undefined;\n filters_User_Flag11?: string | undefined;\n filters_User_Flag12?: string | undefined;\n filters_User_Code1?: string | undefined;\n filters_User_Name2?: string | undefined;\n filters_User_Integer1?: number | undefined;\n filters_User_Integer2?: number | undefined;\n filters_User_Integer3?: number | undefined;\n filters_User_Integer4?: number | undefined;\n filters_User_Integer5?: number | undefined;\n filters_User_Number1?: number | undefined;\n filters_User_Number2?: number | undefined;\n filters_User_Number3?: number | undefined;\n filters_User_Number4?: number | undefined;\n filters_User_Number5?: number | undefined;\n filters_User_Number6?: number | undefined;\n filters_User_Number7?: number | undefined;\n filters_User_Number8?: number | undefined;\n filters_User_Number9?: number | undefined;\n filters_User_Number10?: number | undefined;\n filters_User_Number11?: number | undefined;\n filters_User_Number12?: number | undefined;\n filters_User_Number13?: number | undefined;\n filters_User_Number14?: number | undefined;\n filters_User_Number15?: number | undefined;\n filters_User_Number16?: number | undefined;\n filters_User_Number17?: number | undefined;\n filters_User_Number18?: number | undefined;\n filters_User_Number19?: number | undefined;\n filters_User_Number20?: number | undefined;\n filters_User_Perc1?: number | undefined;\n filters_User_Perc2?: number | undefined;\n filters_User_Def_Date?: Date | undefined;\n filters_User_Date2?: Date | undefined;\n filters_User_Date3?: Date | undefined;\n filters_User_Date4?: Date | undefined;\n filters_User_Date5?: Date | undefined;\n filters_User_Date6?: Date | undefined;\n filters_User_Date7?: Date | undefined;\n filters_User_Date8?: Date | undefined;\n filters_User_Date9?: Date | undefined;\n filters_User_Date10?: Date | undefined;\n filters_User_Date11?: Date | undefined;\n totals_BaseLabor_Direct: number;\n totals_BaseLabor_Indirect: number;\n totals_BaseLabor_Total: number;\n totals_Burden_Direct: number;\n totals_Burden_Indirect: number;\n totals_Burden_Total: number;\n totals_TotalLabor_Direct: number;\n totals_TotalLabor_Indirect: number;\n totals_TotalLabor_Total: number;\n totals_PermanentMaterial_Direct: number;\n totals_PermanentMaterial_Indirect: number;\n totals_PermanentMaterial_Total: number;\n totals_ConstructionMaterial_Direct: number;\n totals_ConstructionMaterial_Indirect: number;\n totals_ConstructionMaterial_Total: number;\n totals_Subcontract_Direct: number;\n totals_Subcontract_Indirect: number;\n totals_Subcontract_Total: number;\n totals_EquipmentOperatingExpense_Direct: number;\n totals_EquipmentOperatingExpense_Indirect: number;\n totals_EquipmentOperatingExpense_Total: number;\n totals_CompanyEquipment_Direct: number;\n totals_CompanyEquipment_Indirect: number;\n totals_CompanyEquipment_Total: number;\n totals_RentedEquipment_Direct: number;\n totals_RentedEquipment_Indirect: number;\n totals_RentedEquipment_Total: number;\n totals_Misc1_Direct: number;\n totals_Misc1_Indirect: number;\n totals_Misc1_Total: number;\n totals_Misc2_Direct: number;\n totals_Misc2_Indirect: number;\n totals_Misc2_Total: number;\n totals_Misc3_Direct: number;\n totals_Misc3_Indirect: number;\n totals_Misc3_Total: number;\n totals_TotalEntryCost_Takeoff_Direct: number;\n totals_TotalEntryCost_Takeoff_Indirect: number;\n totals_TotalEntryCost_Takeoff_Total: number;\n totals_TotalEntryCost_Bid_Direct: number;\n totals_TotalEntryCost_Bid_Indirect: number;\n totals_TotalEntryCost_Bid_Total: number;\n totals_BalMarkup_Bid: number;\n totals_ActualMarkup_Bid: number;\n totals_BalancedBid_Bid: number;\n totals_BidTotal_Bid: number;\n totals_AddonBondTotal: number;\n totals_TotalEqp_Direct: number;\n totals_TotalEqp_Indirect: number;\n totals_TotalEqp_Total: number;\n totals_Manhours_Direct: number;\n totals_Manhours_Indirect: number;\n totals_Manhours_Total: number;\n totals_Addon_Cost: number;\n totals_Bond: number;\n totals_Addon_Markup: number;\n totals_Addon_Total: number;\n totals_TotalCost_Takeoff: number;\n totals_Job_Duration: number;\n totals_BalMarkup_Takeoff: number;\n totals_ActualMarkup_Takeoff: number;\n totals_BalancedBid_Takeoff: number;\n totals_PassThrough_Cost: number;\n totals_PassThrough_Adjustment: number;\n totals_PassThrough_Total: number;\n totals_TotalCost_Bid_LessPassThrough: number;\n totals_TotalCost_Bid: number;\n totals_Total_User_Adjustments: number;\n totals_Total_User_Adjustments_Cost: number;\n totals_Desired_Bid: number;\n totals_Desired_Bid_Diff: number;\n totals_BidTotal_Takeoff: number;\n totals_TotalCost_Takeoff_LessPassThrough: number;\n totals_MarkupPercentCost_Takeoff: number;\n totals_MarkupPercentCost_Bid: number;\n totals_MarkupPercentSales_Takeoff: number;\n totals_MarkupPercentSales_Bid: number;\n totals_TotalCost_Takeoff_LessPassThroughAndAdjustments: number;\n totals_TotalCost_Bid_LessPassThroughAndAdjustments: number;\n totals_TotalEntryCost_Bid_Spread_Indirect: number;\n totals_AddonBond_Cost_Bid_Spread_Total: number;\n totals_TotalCost_Bid_Spread: number;\n totals_BalMarkup_Bid_Spread: number;\n totals_ActualMarkup_Bid_Spread: number;\n totals_Actv_User_Quan1: number;\n totals_Actv_User_Quan2: number;\n totals_Actv_User_Quan3: number;\n totals_Actv_User_Quan4: number;\n totals_Open_Biditems: number;\n totals_Minority_Goal_Percent: number;\n totals_Minority_Goal_Total: number;\n totals_Minority_Current_Percent: number;\n totals_Minority_Current_Total: number;\n empId?: string | undefined;\n}\n\nexport class ODataQueryOptionsOfEstimateFlattened extends ODataQueryOptions\n implements IODataQueryOptionsOfEstimateFlattened {\n ifMatch?: ETagOfEstimateFlattened | undefined;\n ifNoneMatch?: ETagOfEstimateFlattened | undefined;\n\n constructor(data?: IODataQueryOptionsOfEstimateFlattened) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n if (_data) {\n this.ifMatch = _data[\"ifMatch\"]\n ? ETagOfEstimateFlattened.fromJS(_data[\"ifMatch\"])\n : undefined;\n this.ifNoneMatch = _data[\"ifNoneMatch\"]\n ? ETagOfEstimateFlattened.fromJS(_data[\"ifNoneMatch\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): ODataQueryOptionsOfEstimateFlattened {\n data = typeof data === \"object\" ? data : {};\n let result = new ODataQueryOptionsOfEstimateFlattened();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"ifMatch\"] = this.ifMatch ? this.ifMatch.toJSON() : undefined;\n data[\"ifNoneMatch\"] = this.ifNoneMatch\n ? this.ifNoneMatch.toJSON()\n : undefined;\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IODataQueryOptionsOfEstimateFlattened\n extends IODataQueryOptions {\n ifMatch?: ETagOfEstimateFlattened | undefined;\n ifNoneMatch?: ETagOfEstimateFlattened | undefined;\n}\n\nexport class ETagOfEstimateFlattened extends ETag\n implements IETagOfEstimateFlattened {\n constructor(data?: IETagOfEstimateFlattened) {\n super(data);\n }\n\n init(_data?: any) {\n super.init(_data);\n }\n\n static fromJS(data: any): ETagOfEstimateFlattened {\n data = typeof data === \"object\" ? data : {};\n let result = new ETagOfEstimateFlattened();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n super.toJSON(data);\n return data;\n }\n}\n\nexport interface IETagOfEstimateFlattened extends IETag {}\n\nexport class ReportsDto implements IReportsDto {\n reports?: ReportViewModel[] | undefined;\n\n constructor(data?: IReportsDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"reports\"])) {\n this.reports = [] as any;\n for (let item of _data[\"reports\"])\n this.reports!.push(ReportViewModel.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): ReportsDto {\n data = typeof data === \"object\" ? data : {};\n let result = new ReportsDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.reports)) {\n data[\"reports\"] = [];\n for (let item of this.reports) data[\"reports\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IReportsDto {\n reports?: ReportViewModel[] | undefined;\n}\n\nexport class UniqueEstimateFilters implements IUniqueEstimateFilters {\n businessUnitCode?: string[] | undefined;\n filter1?: string[] | undefined;\n filter2?: string[] | undefined;\n filter3?: string[] | undefined;\n filter4?: string[] | undefined;\n filter5?: string[] | undefined;\n filter6?: string[] | undefined;\n estimator?: string[] | undefined;\n status?: string[] | undefined;\n owner?: string[] | undefined;\n wcState?: string[] | undefined;\n typeWork?: string[] | undefined;\n engineer?: string[] | undefined;\n projectName?: string[] | undefined;\n projectNumber?: string[] | undefined;\n\n constructor(data?: IUniqueEstimateFilters) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"businessUnitCode\"])) {\n this.businessUnitCode = [] as any;\n for (let item of _data[\"businessUnitCode\"])\n this.businessUnitCode!.push(item);\n }\n if (Array.isArray(_data[\"filter1\"])) {\n this.filter1 = [] as any;\n for (let item of _data[\"filter1\"]) this.filter1!.push(item);\n }\n if (Array.isArray(_data[\"filter2\"])) {\n this.filter2 = [] as any;\n for (let item of _data[\"filter2\"]) this.filter2!.push(item);\n }\n if (Array.isArray(_data[\"filter3\"])) {\n this.filter3 = [] as any;\n for (let item of _data[\"filter3\"]) this.filter3!.push(item);\n }\n if (Array.isArray(_data[\"filter4\"])) {\n this.filter4 = [] as any;\n for (let item of _data[\"filter4\"]) this.filter4!.push(item);\n }\n if (Array.isArray(_data[\"filter5\"])) {\n this.filter5 = [] as any;\n for (let item of _data[\"filter5\"]) this.filter5!.push(item);\n }\n if (Array.isArray(_data[\"filter6\"])) {\n this.filter6 = [] as any;\n for (let item of _data[\"filter6\"]) this.filter6!.push(item);\n }\n if (Array.isArray(_data[\"estimator\"])) {\n this.estimator = [] as any;\n for (let item of _data[\"estimator\"]) this.estimator!.push(item);\n }\n if (Array.isArray(_data[\"status\"])) {\n this.status = [] as any;\n for (let item of _data[\"status\"]) this.status!.push(item);\n }\n if (Array.isArray(_data[\"owner\"])) {\n this.owner = [] as any;\n for (let item of _data[\"owner\"]) this.owner!.push(item);\n }\n if (Array.isArray(_data[\"wcState\"])) {\n this.wcState = [] as any;\n for (let item of _data[\"wcState\"]) this.wcState!.push(item);\n }\n if (Array.isArray(_data[\"typeWork\"])) {\n this.typeWork = [] as any;\n for (let item of _data[\"typeWork\"]) this.typeWork!.push(item);\n }\n if (Array.isArray(_data[\"engineer\"])) {\n this.engineer = [] as any;\n for (let item of _data[\"engineer\"]) this.engineer!.push(item);\n }\n if (Array.isArray(_data[\"projectName\"])) {\n this.projectName = [] as any;\n for (let item of _data[\"projectName\"]) this.projectName!.push(item);\n }\n if (Array.isArray(_data[\"projectNumber\"])) {\n this.projectNumber = [] as any;\n for (let item of _data[\"projectNumber\"]) this.projectNumber!.push(item);\n }\n }\n }\n\n static fromJS(data: any): UniqueEstimateFilters {\n data = typeof data === \"object\" ? data : {};\n let result = new UniqueEstimateFilters();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.businessUnitCode)) {\n data[\"businessUnitCode\"] = [];\n for (let item of this.businessUnitCode)\n data[\"businessUnitCode\"].push(item);\n }\n if (Array.isArray(this.filter1)) {\n data[\"filter1\"] = [];\n for (let item of this.filter1) data[\"filter1\"].push(item);\n }\n if (Array.isArray(this.filter2)) {\n data[\"filter2\"] = [];\n for (let item of this.filter2) data[\"filter2\"].push(item);\n }\n if (Array.isArray(this.filter3)) {\n data[\"filter3\"] = [];\n for (let item of this.filter3) data[\"filter3\"].push(item);\n }\n if (Array.isArray(this.filter4)) {\n data[\"filter4\"] = [];\n for (let item of this.filter4) data[\"filter4\"].push(item);\n }\n if (Array.isArray(this.filter5)) {\n data[\"filter5\"] = [];\n for (let item of this.filter5) data[\"filter5\"].push(item);\n }\n if (Array.isArray(this.filter6)) {\n data[\"filter6\"] = [];\n for (let item of this.filter6) data[\"filter6\"].push(item);\n }\n if (Array.isArray(this.estimator)) {\n data[\"estimator\"] = [];\n for (let item of this.estimator) data[\"estimator\"].push(item);\n }\n if (Array.isArray(this.status)) {\n data[\"status\"] = [];\n for (let item of this.status) data[\"status\"].push(item);\n }\n if (Array.isArray(this.owner)) {\n data[\"owner\"] = [];\n for (let item of this.owner) data[\"owner\"].push(item);\n }\n if (Array.isArray(this.wcState)) {\n data[\"wcState\"] = [];\n for (let item of this.wcState) data[\"wcState\"].push(item);\n }\n if (Array.isArray(this.typeWork)) {\n data[\"typeWork\"] = [];\n for (let item of this.typeWork) data[\"typeWork\"].push(item);\n }\n if (Array.isArray(this.engineer)) {\n data[\"engineer\"] = [];\n for (let item of this.engineer) data[\"engineer\"].push(item);\n }\n if (Array.isArray(this.projectName)) {\n data[\"projectName\"] = [];\n for (let item of this.projectName) data[\"projectName\"].push(item);\n }\n if (Array.isArray(this.projectNumber)) {\n data[\"projectNumber\"] = [];\n for (let item of this.projectNumber) data[\"projectNumber\"].push(item);\n }\n return data;\n }\n}\n\nexport interface IUniqueEstimateFilters {\n businessUnitCode?: string[] | undefined;\n filter1?: string[] | undefined;\n filter2?: string[] | undefined;\n filter3?: string[] | undefined;\n filter4?: string[] | undefined;\n filter5?: string[] | undefined;\n filter6?: string[] | undefined;\n estimator?: string[] | undefined;\n status?: string[] | undefined;\n owner?: string[] | undefined;\n wcState?: string[] | undefined;\n typeWork?: string[] | undefined;\n engineer?: string[] | undefined;\n projectName?: string[] | undefined;\n projectNumber?: string[] | undefined;\n}\n\nexport class QuoteFolderSummaryDto implements IQuoteFolderSummaryDto {\n id!: string;\n folder!: string;\n description?: string | undefined;\n type?: string | undefined;\n estimatorInitials?: string | undefined;\n selectedVendor?: string | undefined;\n folderTotal!: number;\n hasPluggedPrices!: boolean;\n\n constructor(data?: IQuoteFolderSummaryDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.folder = _data[\"folder\"];\n this.description = _data[\"description\"];\n this.type = _data[\"type\"];\n this.estimatorInitials = _data[\"estimatorInitials\"];\n this.selectedVendor = _data[\"selectedVendor\"];\n this.folderTotal = _data[\"folderTotal\"];\n this.hasPluggedPrices = _data[\"hasPluggedPrices\"];\n }\n }\n\n static fromJS(data: any): QuoteFolderSummaryDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteFolderSummaryDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"folder\"] = this.folder;\n data[\"description\"] = this.description;\n data[\"type\"] = this.type;\n data[\"estimatorInitials\"] = this.estimatorInitials;\n data[\"selectedVendor\"] = this.selectedVendor;\n data[\"folderTotal\"] = this.folderTotal;\n data[\"hasPluggedPrices\"] = this.hasPluggedPrices;\n return data;\n }\n}\n\nexport interface IQuoteFolderSummaryDto {\n id: string;\n folder: string;\n description?: string | undefined;\n type?: string | undefined;\n estimatorInitials?: string | undefined;\n selectedVendor?: string | undefined;\n folderTotal: number;\n hasPluggedPrices: boolean;\n}\n\nexport class QuoteFolderDto implements IQuoteFolderDto {\n id!: string;\n quoteMasterId!: string;\n folder!: string;\n description?: string | undefined;\n type?: string | undefined;\n estimatorInitials?: string | undefined;\n notes?: string | undefined;\n breakout?: string | undefined;\n selectedVendor?: string | undefined;\n showBiditem?: string | undefined;\n showActivity?: string | undefined;\n showResource?: string | undefined;\n useSelfPerform?: string | undefined;\n totalAdditiveFactored!: number;\n totalAdditiveNonFactored!: number;\n totalNonAdditiveFactored!: number;\n totalNonAdditiveNonFactored!: number;\n updatedSelectedVendorTotal!: number;\n syncRequired!: boolean;\n folderTotal!: number;\n quoteItems!: QuoteItemDto[];\n quoteVendors!: QuoteVendorDto[];\n adHocAdjustmentItems!: QuoteItemDto[];\n\n constructor(data?: IQuoteFolderDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n if (!data) {\n this.quoteItems = [];\n this.quoteVendors = [];\n this.adHocAdjustmentItems = [];\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.quoteMasterId = _data[\"quoteMasterId\"];\n this.folder = _data[\"folder\"];\n this.description = _data[\"description\"];\n this.type = _data[\"type\"];\n this.estimatorInitials = _data[\"estimatorInitials\"];\n this.notes = _data[\"notes\"];\n this.breakout = _data[\"breakout\"];\n this.selectedVendor = _data[\"selectedVendor\"];\n this.showBiditem = _data[\"showBiditem\"];\n this.showActivity = _data[\"showActivity\"];\n this.showResource = _data[\"showResource\"];\n this.useSelfPerform = _data[\"useSelfPerform\"];\n this.totalAdditiveFactored = _data[\"totalAdditiveFactored\"];\n this.totalAdditiveNonFactored = _data[\"totalAdditiveNonFactored\"];\n this.totalNonAdditiveFactored = _data[\"totalNonAdditiveFactored\"];\n this.totalNonAdditiveNonFactored = _data[\"totalNonAdditiveNonFactored\"];\n this.updatedSelectedVendorTotal = _data[\"updatedSelectedVendorTotal\"];\n this.syncRequired = _data[\"syncRequired\"];\n this.folderTotal = _data[\"folderTotal\"];\n if (Array.isArray(_data[\"quoteItems\"])) {\n this.quoteItems = [] as any;\n for (let item of _data[\"quoteItems\"])\n this.quoteItems!.push(QuoteItemDto.fromJS(item));\n }\n if (Array.isArray(_data[\"quoteVendors\"])) {\n this.quoteVendors = [] as any;\n for (let item of _data[\"quoteVendors\"])\n this.quoteVendors!.push(QuoteVendorDto.fromJS(item));\n }\n if (Array.isArray(_data[\"adHocAdjustmentItems\"])) {\n this.adHocAdjustmentItems = [] as any;\n for (let item of _data[\"adHocAdjustmentItems\"])\n this.adHocAdjustmentItems!.push(QuoteItemDto.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): QuoteFolderDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteFolderDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"quoteMasterId\"] = this.quoteMasterId;\n data[\"folder\"] = this.folder;\n data[\"description\"] = this.description;\n data[\"type\"] = this.type;\n data[\"estimatorInitials\"] = this.estimatorInitials;\n data[\"notes\"] = this.notes;\n data[\"breakout\"] = this.breakout;\n data[\"selectedVendor\"] = this.selectedVendor;\n data[\"showBiditem\"] = this.showBiditem;\n data[\"showActivity\"] = this.showActivity;\n data[\"showResource\"] = this.showResource;\n data[\"useSelfPerform\"] = this.useSelfPerform;\n data[\"totalAdditiveFactored\"] = this.totalAdditiveFactored;\n data[\"totalAdditiveNonFactored\"] = this.totalAdditiveNonFactored;\n data[\"totalNonAdditiveFactored\"] = this.totalNonAdditiveFactored;\n data[\"totalNonAdditiveNonFactored\"] = this.totalNonAdditiveNonFactored;\n data[\"updatedSelectedVendorTotal\"] = this.updatedSelectedVendorTotal;\n data[\"syncRequired\"] = this.syncRequired;\n data[\"folderTotal\"] = this.folderTotal;\n if (Array.isArray(this.quoteItems)) {\n data[\"quoteItems\"] = [];\n for (let item of this.quoteItems) data[\"quoteItems\"].push(item.toJSON());\n }\n if (Array.isArray(this.quoteVendors)) {\n data[\"quoteVendors\"] = [];\n for (let item of this.quoteVendors)\n data[\"quoteVendors\"].push(item.toJSON());\n }\n if (Array.isArray(this.adHocAdjustmentItems)) {\n data[\"adHocAdjustmentItems\"] = [];\n for (let item of this.adHocAdjustmentItems)\n data[\"adHocAdjustmentItems\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IQuoteFolderDto {\n id: string;\n quoteMasterId: string;\n folder: string;\n description?: string | undefined;\n type?: string | undefined;\n estimatorInitials?: string | undefined;\n notes?: string | undefined;\n breakout?: string | undefined;\n selectedVendor?: string | undefined;\n showBiditem?: string | undefined;\n showActivity?: string | undefined;\n showResource?: string | undefined;\n useSelfPerform?: string | undefined;\n totalAdditiveFactored: number;\n totalAdditiveNonFactored: number;\n totalNonAdditiveFactored: number;\n totalNonAdditiveNonFactored: number;\n updatedSelectedVendorTotal: number;\n syncRequired: boolean;\n folderTotal: number;\n quoteItems: QuoteItemDto[];\n quoteVendors: QuoteVendorDto[];\n adHocAdjustmentItems: QuoteItemDto[];\n}\n\nexport class QuoteItemDto implements IQuoteItemDto {\n id!: string;\n quoteFolderId!: string;\n biditem!: string;\n activity!: string;\n resource!: string;\n plugPrice!: number;\n unit?: string | undefined;\n quantityAdditiveFactored!: number;\n quantityAdditiveNonFactored!: number;\n quantityNonAdditiveFactored!: number;\n quantityNonAdditiveNonFactored!: number;\n currency?: string | undefined;\n isSelfPerform?: string | undefined;\n selfAmount!: number;\n selectedVendor?: string | undefined;\n alternateSort?: string | undefined;\n alternateDescription?: string | undefined;\n addendumNumber?: string | undefined;\n actualPlug!: number;\n alternateQuantity!: number;\n unitCostInEstimate!: number;\n clientNo?: string | undefined;\n isAdhocAdjustmentItem!: boolean;\n syncRequired!: boolean;\n quotes!: QuoteDto[];\n\n constructor(data?: IQuoteItemDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n if (!data) {\n this.quotes = [];\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.quoteFolderId = _data[\"quoteFolderId\"];\n this.biditem = _data[\"biditem\"];\n this.activity = _data[\"activity\"];\n this.resource = _data[\"resource\"];\n this.plugPrice = _data[\"plugPrice\"];\n this.unit = _data[\"unit\"];\n this.quantityAdditiveFactored = _data[\"quantityAdditiveFactored\"];\n this.quantityAdditiveNonFactored = _data[\"quantityAdditiveNonFactored\"];\n this.quantityNonAdditiveFactored = _data[\"quantityNonAdditiveFactored\"];\n this.quantityNonAdditiveNonFactored =\n _data[\"quantityNonAdditiveNonFactored\"];\n this.currency = _data[\"currency\"];\n this.isSelfPerform = _data[\"isSelfPerform\"];\n this.selfAmount = _data[\"selfAmount\"];\n this.selectedVendor = _data[\"selectedVendor\"];\n this.alternateSort = _data[\"alternateSort\"];\n this.alternateDescription = _data[\"alternateDescription\"];\n this.addendumNumber = _data[\"addendumNumber\"];\n this.actualPlug = _data[\"actualPlug\"];\n this.alternateQuantity = _data[\"alternateQuantity\"];\n this.unitCostInEstimate = _data[\"unitCostInEstimate\"];\n this.clientNo = _data[\"clientNo\"];\n this.isAdhocAdjustmentItem = _data[\"isAdhocAdjustmentItem\"];\n this.syncRequired = _data[\"syncRequired\"];\n if (Array.isArray(_data[\"quotes\"])) {\n this.quotes = [] as any;\n for (let item of _data[\"quotes\"])\n this.quotes!.push(QuoteDto.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): QuoteItemDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteItemDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"quoteFolderId\"] = this.quoteFolderId;\n data[\"biditem\"] = this.biditem;\n data[\"activity\"] = this.activity;\n data[\"resource\"] = this.resource;\n data[\"plugPrice\"] = this.plugPrice;\n data[\"unit\"] = this.unit;\n data[\"quantityAdditiveFactored\"] = this.quantityAdditiveFactored;\n data[\"quantityAdditiveNonFactored\"] = this.quantityAdditiveNonFactored;\n data[\"quantityNonAdditiveFactored\"] = this.quantityNonAdditiveFactored;\n data[\n \"quantityNonAdditiveNonFactored\"\n ] = this.quantityNonAdditiveNonFactored;\n data[\"currency\"] = this.currency;\n data[\"isSelfPerform\"] = this.isSelfPerform;\n data[\"selfAmount\"] = this.selfAmount;\n data[\"selectedVendor\"] = this.selectedVendor;\n data[\"alternateSort\"] = this.alternateSort;\n data[\"alternateDescription\"] = this.alternateDescription;\n data[\"addendumNumber\"] = this.addendumNumber;\n data[\"actualPlug\"] = this.actualPlug;\n data[\"alternateQuantity\"] = this.alternateQuantity;\n data[\"unitCostInEstimate\"] = this.unitCostInEstimate;\n data[\"clientNo\"] = this.clientNo;\n data[\"isAdhocAdjustmentItem\"] = this.isAdhocAdjustmentItem;\n data[\"syncRequired\"] = this.syncRequired;\n if (Array.isArray(this.quotes)) {\n data[\"quotes\"] = [];\n for (let item of this.quotes) data[\"quotes\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IQuoteItemDto {\n id: string;\n quoteFolderId: string;\n biditem: string;\n activity: string;\n resource: string;\n plugPrice: number;\n unit?: string | undefined;\n quantityAdditiveFactored: number;\n quantityAdditiveNonFactored: number;\n quantityNonAdditiveFactored: number;\n quantityNonAdditiveNonFactored: number;\n currency?: string | undefined;\n isSelfPerform?: string | undefined;\n selfAmount: number;\n selectedVendor?: string | undefined;\n alternateSort?: string | undefined;\n alternateDescription?: string | undefined;\n addendumNumber?: string | undefined;\n actualPlug: number;\n alternateQuantity: number;\n unitCostInEstimate: number;\n clientNo?: string | undefined;\n isAdhocAdjustmentItem: boolean;\n syncRequired: boolean;\n quotes: QuoteDto[];\n}\n\nexport class QuoteDto implements IQuoteDto {\n id!: string;\n quoteItemId!: string;\n quoteVendorId!: string;\n quoteVendorCode!: string;\n plugIndicator?: string | undefined;\n previousPrice!: number;\n previousUnit?: string | undefined;\n quantityAdditiveFactored!: number;\n quantityAdditiveNonFactored!: number;\n quantityNonAdditiveFactored!: number;\n quantityNonAdditiveNonFactored!: number;\n totalAdditiveFactored!: number;\n totalAdditiveNonFactored!: number;\n totalNonAdditiveFactored!: number;\n totalNonAdditiveNonFactored!: number;\n quoteUnit?: string | undefined;\n quotePrice!: number;\n quoteCurrency?: string | undefined;\n lastModified!: Date;\n syncRequired!: boolean;\n\n constructor(data?: IQuoteDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.quoteItemId = _data[\"quoteItemId\"];\n this.quoteVendorId = _data[\"quoteVendorId\"];\n this.quoteVendorCode = _data[\"quoteVendorCode\"];\n this.plugIndicator = _data[\"plugIndicator\"];\n this.previousPrice = _data[\"previousPrice\"];\n this.previousUnit = _data[\"previousUnit\"];\n this.quantityAdditiveFactored = _data[\"quantityAdditiveFactored\"];\n this.quantityAdditiveNonFactored = _data[\"quantityAdditiveNonFactored\"];\n this.quantityNonAdditiveFactored = _data[\"quantityNonAdditiveFactored\"];\n this.quantityNonAdditiveNonFactored =\n _data[\"quantityNonAdditiveNonFactored\"];\n this.totalAdditiveFactored = _data[\"totalAdditiveFactored\"];\n this.totalAdditiveNonFactored = _data[\"totalAdditiveNonFactored\"];\n this.totalNonAdditiveFactored = _data[\"totalNonAdditiveFactored\"];\n this.totalNonAdditiveNonFactored = _data[\"totalNonAdditiveNonFactored\"];\n this.quoteUnit = _data[\"quoteUnit\"];\n this.quotePrice = _data[\"quotePrice\"];\n this.quoteCurrency = _data[\"quoteCurrency\"];\n this.lastModified = _data[\"lastModified\"]\n ? new Date(_data[\"lastModified\"].toString())\n : undefined;\n this.syncRequired = _data[\"syncRequired\"];\n }\n }\n\n static fromJS(data: any): QuoteDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"quoteItemId\"] = this.quoteItemId;\n data[\"quoteVendorId\"] = this.quoteVendorId;\n data[\"quoteVendorCode\"] = this.quoteVendorCode;\n data[\"plugIndicator\"] = this.plugIndicator;\n data[\"previousPrice\"] = this.previousPrice;\n data[\"previousUnit\"] = this.previousUnit;\n data[\"quantityAdditiveFactored\"] = this.quantityAdditiveFactored;\n data[\"quantityAdditiveNonFactored\"] = this.quantityAdditiveNonFactored;\n data[\"quantityNonAdditiveFactored\"] = this.quantityNonAdditiveFactored;\n data[\n \"quantityNonAdditiveNonFactored\"\n ] = this.quantityNonAdditiveNonFactored;\n data[\"totalAdditiveFactored\"] = this.totalAdditiveFactored;\n data[\"totalAdditiveNonFactored\"] = this.totalAdditiveNonFactored;\n data[\"totalNonAdditiveFactored\"] = this.totalNonAdditiveFactored;\n data[\"totalNonAdditiveNonFactored\"] = this.totalNonAdditiveNonFactored;\n data[\"quoteUnit\"] = this.quoteUnit;\n data[\"quotePrice\"] = this.quotePrice;\n data[\"quoteCurrency\"] = this.quoteCurrency;\n data[\"lastModified\"] = this.lastModified\n ? this.lastModified.toISOString()\n : undefined;\n data[\"syncRequired\"] = this.syncRequired;\n return data;\n }\n}\n\nexport interface IQuoteDto {\n id: string;\n quoteItemId: string;\n quoteVendorId: string;\n quoteVendorCode: string;\n plugIndicator?: string | undefined;\n previousPrice: number;\n previousUnit?: string | undefined;\n quantityAdditiveFactored: number;\n quantityAdditiveNonFactored: number;\n quantityNonAdditiveFactored: number;\n quantityNonAdditiveNonFactored: number;\n totalAdditiveFactored: number;\n totalAdditiveNonFactored: number;\n totalNonAdditiveFactored: number;\n totalNonAdditiveNonFactored: number;\n quoteUnit?: string | undefined;\n quotePrice: number;\n quoteCurrency?: string | undefined;\n lastModified: Date;\n syncRequired: boolean;\n}\n\nexport class QuoteVendorDto implements IQuoteVendorDto {\n id!: string;\n quoteFolderId!: string;\n code!: string;\n name?: string | undefined;\n totalAdditiveFactored!: number;\n totalAdditiveNonFactored!: number;\n totalNonAdditiveFactored!: number;\n totalNonAdditiveNonFactored!: number;\n plugAdditiveFactored!: number;\n plugAdditiveNonFactored!: number;\n plugNonAdditiveFactored!: number;\n plugNonAdditiveNonFactored!: number;\n adHocAdditiveFactored!: number;\n adHocAdditiveNonFactored!: number;\n adHocNonAdditiveFactored!: number;\n adHocNonAdditiveNonFactored!: number;\n vendorContact?: string | undefined;\n jobTitle?: string | undefined;\n firstName?: string | undefined;\n lastName?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n cellPhone?: string | undefined;\n fax?: string | undefined;\n address1?: string | undefined;\n address2?: string | undefined;\n address3?: string | undefined;\n city?: string | undefined;\n state?: string | undefined;\n zip?: string | undefined;\n bondable?: string | undefined;\n bondRate!: number;\n mobilizationAmount!: number;\n adjustmentPercent!: number;\n adjustmentAmount!: number;\n minorityStatuses?: MinorityClass[] | undefined;\n minority1?: MinorityClass | undefined;\n minority2?: MinorityClass | undefined;\n minority3?: MinorityClass | undefined;\n minority4?: MinorityClass | undefined;\n minority5?: MinorityClass | undefined;\n excluded?: string | undefined;\n notes?: string | undefined;\n pluggedAmount!: number;\n quotedAmount!: number;\n totalAdditive!: number;\n syncRequired!: boolean;\n lastModified!: Date;\n totalAdjustments!: number;\n vendorTotal!: number;\n\n constructor(data?: IQuoteVendorDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.quoteFolderId = _data[\"quoteFolderId\"];\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.totalAdditiveFactored = _data[\"totalAdditiveFactored\"];\n this.totalAdditiveNonFactored = _data[\"totalAdditiveNonFactored\"];\n this.totalNonAdditiveFactored = _data[\"totalNonAdditiveFactored\"];\n this.totalNonAdditiveNonFactored = _data[\"totalNonAdditiveNonFactored\"];\n this.plugAdditiveFactored = _data[\"plugAdditiveFactored\"];\n this.plugAdditiveNonFactored = _data[\"plugAdditiveNonFactored\"];\n this.plugNonAdditiveFactored = _data[\"plugNonAdditiveFactored\"];\n this.plugNonAdditiveNonFactored = _data[\"plugNonAdditiveNonFactored\"];\n this.adHocAdditiveFactored = _data[\"adHocAdditiveFactored\"];\n this.adHocAdditiveNonFactored = _data[\"adHocAdditiveNonFactored\"];\n this.adHocNonAdditiveFactored = _data[\"adHocNonAdditiveFactored\"];\n this.adHocNonAdditiveNonFactored = _data[\"adHocNonAdditiveNonFactored\"];\n this.vendorContact = _data[\"vendorContact\"];\n this.jobTitle = _data[\"jobTitle\"];\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.email = _data[\"email\"];\n this.phone = _data[\"phone\"];\n this.cellPhone = _data[\"cellPhone\"];\n this.fax = _data[\"fax\"];\n this.address1 = _data[\"address1\"];\n this.address2 = _data[\"address2\"];\n this.address3 = _data[\"address3\"];\n this.city = _data[\"city\"];\n this.state = _data[\"state\"];\n this.zip = _data[\"zip\"];\n this.bondable = _data[\"bondable\"];\n this.bondRate = _data[\"bondRate\"];\n this.mobilizationAmount = _data[\"mobilizationAmount\"];\n this.adjustmentPercent = _data[\"adjustmentPercent\"];\n this.adjustmentAmount = _data[\"adjustmentAmount\"];\n if (Array.isArray(_data[\"minorityStatuses\"])) {\n this.minorityStatuses = [] as any;\n for (let item of _data[\"minorityStatuses\"])\n this.minorityStatuses!.push(MinorityClass.fromJS(item));\n }\n this.minority1 = _data[\"minority1\"]\n ? MinorityClass.fromJS(_data[\"minority1\"])\n : undefined;\n this.minority2 = _data[\"minority2\"]\n ? MinorityClass.fromJS(_data[\"minority2\"])\n : undefined;\n this.minority3 = _data[\"minority3\"]\n ? MinorityClass.fromJS(_data[\"minority3\"])\n : undefined;\n this.minority4 = _data[\"minority4\"]\n ? MinorityClass.fromJS(_data[\"minority4\"])\n : undefined;\n this.minority5 = _data[\"minority5\"]\n ? MinorityClass.fromJS(_data[\"minority5\"])\n : undefined;\n this.excluded = _data[\"excluded\"];\n this.notes = _data[\"notes\"];\n this.pluggedAmount = _data[\"pluggedAmount\"];\n this.quotedAmount = _data[\"quotedAmount\"];\n this.totalAdditive = _data[\"totalAdditive\"];\n this.syncRequired = _data[\"syncRequired\"];\n this.lastModified = _data[\"lastModified\"]\n ? new Date(_data[\"lastModified\"].toString())\n : undefined;\n this.totalAdjustments = _data[\"totalAdjustments\"];\n this.vendorTotal = _data[\"vendorTotal\"];\n }\n }\n\n static fromJS(data: any): QuoteVendorDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteVendorDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"quoteFolderId\"] = this.quoteFolderId;\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"totalAdditiveFactored\"] = this.totalAdditiveFactored;\n data[\"totalAdditiveNonFactored\"] = this.totalAdditiveNonFactored;\n data[\"totalNonAdditiveFactored\"] = this.totalNonAdditiveFactored;\n data[\"totalNonAdditiveNonFactored\"] = this.totalNonAdditiveNonFactored;\n data[\"plugAdditiveFactored\"] = this.plugAdditiveFactored;\n data[\"plugAdditiveNonFactored\"] = this.plugAdditiveNonFactored;\n data[\"plugNonAdditiveFactored\"] = this.plugNonAdditiveFactored;\n data[\"plugNonAdditiveNonFactored\"] = this.plugNonAdditiveNonFactored;\n data[\"adHocAdditiveFactored\"] = this.adHocAdditiveFactored;\n data[\"adHocAdditiveNonFactored\"] = this.adHocAdditiveNonFactored;\n data[\"adHocNonAdditiveFactored\"] = this.adHocNonAdditiveFactored;\n data[\"adHocNonAdditiveNonFactored\"] = this.adHocNonAdditiveNonFactored;\n data[\"vendorContact\"] = this.vendorContact;\n data[\"jobTitle\"] = this.jobTitle;\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"email\"] = this.email;\n data[\"phone\"] = this.phone;\n data[\"cellPhone\"] = this.cellPhone;\n data[\"fax\"] = this.fax;\n data[\"address1\"] = this.address1;\n data[\"address2\"] = this.address2;\n data[\"address3\"] = this.address3;\n data[\"city\"] = this.city;\n data[\"state\"] = this.state;\n data[\"zip\"] = this.zip;\n data[\"bondable\"] = this.bondable;\n data[\"bondRate\"] = this.bondRate;\n data[\"mobilizationAmount\"] = this.mobilizationAmount;\n data[\"adjustmentPercent\"] = this.adjustmentPercent;\n data[\"adjustmentAmount\"] = this.adjustmentAmount;\n if (Array.isArray(this.minorityStatuses)) {\n data[\"minorityStatuses\"] = [];\n for (let item of this.minorityStatuses)\n data[\"minorityStatuses\"].push(item.toJSON());\n }\n data[\"minority1\"] = this.minority1\n ? this.minority1.toJSON()\n : undefined;\n data[\"minority2\"] = this.minority2\n ? this.minority2.toJSON()\n : undefined;\n data[\"minority3\"] = this.minority3\n ? this.minority3.toJSON()\n : undefined;\n data[\"minority4\"] = this.minority4\n ? this.minority4.toJSON()\n : undefined;\n data[\"minority5\"] = this.minority5\n ? this.minority5.toJSON()\n : undefined;\n data[\"excluded\"] = this.excluded;\n data[\"notes\"] = this.notes;\n data[\"pluggedAmount\"] = this.pluggedAmount;\n data[\"quotedAmount\"] = this.quotedAmount;\n data[\"totalAdditive\"] = this.totalAdditive;\n data[\"syncRequired\"] = this.syncRequired;\n data[\"lastModified\"] = this.lastModified\n ? this.lastModified.toISOString()\n : undefined;\n data[\"totalAdjustments\"] = this.totalAdjustments;\n data[\"vendorTotal\"] = this.vendorTotal;\n return data;\n }\n}\n\nexport interface IQuoteVendorDto {\n id: string;\n quoteFolderId: string;\n code: string;\n name?: string | undefined;\n totalAdditiveFactored: number;\n totalAdditiveNonFactored: number;\n totalNonAdditiveFactored: number;\n totalNonAdditiveNonFactored: number;\n plugAdditiveFactored: number;\n plugAdditiveNonFactored: number;\n plugNonAdditiveFactored: number;\n plugNonAdditiveNonFactored: number;\n adHocAdditiveFactored: number;\n adHocAdditiveNonFactored: number;\n adHocNonAdditiveFactored: number;\n adHocNonAdditiveNonFactored: number;\n vendorContact?: string | undefined;\n jobTitle?: string | undefined;\n firstName?: string | undefined;\n lastName?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n cellPhone?: string | undefined;\n fax?: string | undefined;\n address1?: string | undefined;\n address2?: string | undefined;\n address3?: string | undefined;\n city?: string | undefined;\n state?: string | undefined;\n zip?: string | undefined;\n bondable?: string | undefined;\n bondRate: number;\n mobilizationAmount: number;\n adjustmentPercent: number;\n adjustmentAmount: number;\n minorityStatuses?: MinorityClass[] | undefined;\n minority1?: MinorityClass | undefined;\n minority2?: MinorityClass | undefined;\n minority3?: MinorityClass | undefined;\n minority4?: MinorityClass | undefined;\n minority5?: MinorityClass | undefined;\n excluded?: string | undefined;\n notes?: string | undefined;\n pluggedAmount: number;\n quotedAmount: number;\n totalAdditive: number;\n syncRequired: boolean;\n lastModified: Date;\n totalAdjustments: number;\n vendorTotal: number;\n}\n\nexport class MinorityClass implements IMinorityClass {\n code?: string | undefined;\n percent!: number;\n certificateNumber?: string | undefined;\n\n constructor(data?: IMinorityClass) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.percent = _data[\"percent\"];\n this.certificateNumber = _data[\"certificateNumber\"];\n }\n }\n\n static fromJS(data: any): MinorityClass {\n data = typeof data === \"object\" ? data : {};\n let result = new MinorityClass();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"percent\"] = this.percent;\n data[\"certificateNumber\"] = this.certificateNumber;\n return data;\n }\n}\n\nexport interface IMinorityClass {\n code?: string | undefined;\n percent: number;\n certificateNumber?: string | undefined;\n}\n\nexport class QuoteMasterDto implements IQuoteMasterDto {\n id!: string;\n estimateId!: string;\n adjustToBidQuantity?: string | undefined;\n syncRequired!: boolean;\n quoteFolders!: QuoteFolderDto[];\n\n constructor(data?: IQuoteMasterDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n if (!data) {\n this.quoteFolders = [];\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.estimateId = _data[\"estimateId\"];\n this.adjustToBidQuantity = _data[\"adjustToBidQuantity\"];\n this.syncRequired = _data[\"syncRequired\"];\n if (Array.isArray(_data[\"quoteFolders\"])) {\n this.quoteFolders = [] as any;\n for (let item of _data[\"quoteFolders\"])\n this.quoteFolders!.push(QuoteFolderDto.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): QuoteMasterDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteMasterDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"estimateId\"] = this.estimateId;\n data[\"adjustToBidQuantity\"] = this.adjustToBidQuantity;\n data[\"syncRequired\"] = this.syncRequired;\n if (Array.isArray(this.quoteFolders)) {\n data[\"quoteFolders\"] = [];\n for (let item of this.quoteFolders)\n data[\"quoteFolders\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IQuoteMasterDto {\n id: string;\n estimateId: string;\n adjustToBidQuantity?: string | undefined;\n syncRequired: boolean;\n quoteFolders: QuoteFolderDto[];\n}\n\nexport class GenericResponse implements IGenericResponse {\n success!: boolean;\n errorMessage?: string | undefined;\n\n constructor(data?: IGenericResponse) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.success = _data[\"success\"];\n this.errorMessage = _data[\"errorMessage\"];\n }\n }\n\n static fromJS(data: any): GenericResponse {\n data = typeof data === \"object\" ? data : {};\n let result = new GenericResponse();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"success\"] = this.success;\n data[\"errorMessage\"] = this.errorMessage;\n return data;\n }\n}\n\nexport interface IGenericResponse {\n success: boolean;\n errorMessage?: string | undefined;\n}\n\nexport class AcceptQuoteDto implements IAcceptQuoteDto {\n estimateId!: string;\n vendorCode!: string;\n prices!: QuotePriceDto[];\n adhocAdjustments!: QuoteAdhocAdjustmentDto[];\n notes!: QuoteVendorNotesDto[];\n\n constructor(data?: IAcceptQuoteDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n if (!data) {\n this.prices = [];\n this.adhocAdjustments = [];\n this.notes = [];\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.estimateId = _data[\"estimateId\"];\n this.vendorCode = _data[\"vendorCode\"];\n if (Array.isArray(_data[\"prices\"])) {\n this.prices = [] as any;\n for (let item of _data[\"prices\"])\n this.prices!.push(QuotePriceDto.fromJS(item));\n }\n if (Array.isArray(_data[\"adhocAdjustments\"])) {\n this.adhocAdjustments = [] as any;\n for (let item of _data[\"adhocAdjustments\"])\n this.adhocAdjustments!.push(QuoteAdhocAdjustmentDto.fromJS(item));\n }\n if (Array.isArray(_data[\"notes\"])) {\n this.notes = [] as any;\n for (let item of _data[\"notes\"])\n this.notes!.push(QuoteVendorNotesDto.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): AcceptQuoteDto {\n data = typeof data === \"object\" ? data : {};\n let result = new AcceptQuoteDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"estimateId\"] = this.estimateId;\n data[\"vendorCode\"] = this.vendorCode;\n if (Array.isArray(this.prices)) {\n data[\"prices\"] = [];\n for (let item of this.prices) data[\"prices\"].push(item.toJSON());\n }\n if (Array.isArray(this.adhocAdjustments)) {\n data[\"adhocAdjustments\"] = [];\n for (let item of this.adhocAdjustments)\n data[\"adhocAdjustments\"].push(item.toJSON());\n }\n if (Array.isArray(this.notes)) {\n data[\"notes\"] = [];\n for (let item of this.notes) data[\"notes\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IAcceptQuoteDto {\n estimateId: string;\n vendorCode: string;\n prices: QuotePriceDto[];\n adhocAdjustments: QuoteAdhocAdjustmentDto[];\n notes: QuoteVendorNotesDto[];\n}\n\nexport class QuotePriceDto implements IQuotePriceDto {\n quoteItemId!: string;\n quoteFolderId!: string;\n quotePrice!: number;\n\n constructor(data?: IQuotePriceDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.quoteItemId = _data[\"quoteItemId\"];\n this.quoteFolderId = _data[\"quoteFolderId\"];\n this.quotePrice = _data[\"quotePrice\"];\n }\n }\n\n static fromJS(data: any): QuotePriceDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuotePriceDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"quoteItemId\"] = this.quoteItemId;\n data[\"quoteFolderId\"] = this.quoteFolderId;\n data[\"quotePrice\"] = this.quotePrice;\n return data;\n }\n}\n\nexport interface IQuotePriceDto {\n quoteItemId: string;\n quoteFolderId: string;\n quotePrice: number;\n}\n\nexport class QuoteAdhocAdjustmentDto implements IQuoteAdhocAdjustmentDto {\n id!: string;\n quoteFolderId!: string;\n description?: string | undefined;\n total!: number;\n\n constructor(data?: IQuoteAdhocAdjustmentDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.quoteFolderId = _data[\"quoteFolderId\"];\n this.description = _data[\"description\"];\n this.total = _data[\"total\"];\n }\n }\n\n static fromJS(data: any): QuoteAdhocAdjustmentDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteAdhocAdjustmentDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"quoteFolderId\"] = this.quoteFolderId;\n data[\"description\"] = this.description;\n data[\"total\"] = this.total;\n return data;\n }\n}\n\nexport interface IQuoteAdhocAdjustmentDto {\n id: string;\n quoteFolderId: string;\n description?: string | undefined;\n total: number;\n}\n\nexport class QuoteVendorNotesDto implements IQuoteVendorNotesDto {\n quoteFolderId!: string;\n notes?: string | undefined;\n\n constructor(data?: IQuoteVendorNotesDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.quoteFolderId = _data[\"quoteFolderId\"];\n this.notes = _data[\"notes\"];\n }\n }\n\n static fromJS(data: any): QuoteVendorNotesDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteVendorNotesDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"quoteFolderId\"] = this.quoteFolderId;\n data[\"notes\"] = this.notes;\n return data;\n }\n}\n\nexport interface IQuoteVendorNotesDto {\n quoteFolderId: string;\n notes?: string | undefined;\n}\n\nexport class EstimateSyncStatusDto implements IEstimateSyncStatusDto {\n estimateId!: string;\n lastSyncedPrices!: Date;\n\n constructor(data?: IEstimateSyncStatusDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.estimateId = _data[\"estimateId\"];\n this.lastSyncedPrices = _data[\"lastSyncedPrices\"];\n }\n }\n\n static fromJS(data: any): EstimateSyncStatusDto {\n data = typeof data === \"object\" ? data : {};\n let result = new EstimateSyncStatusDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"estimateId\"] = this.estimateId;\n data[\"lastSyncedPrices\"] = this.lastSyncedPrices;\n\n return data;\n }\n}\nexport interface IEstimateSyncStatusDto {\n estimateId: string;\n lastSyncedPrices: Date;\n}\nexport class QuoteVendorSummaryDto implements IQuoteVendorSummaryDto {\n id!: string;\n quoteFolderId!: string;\n code!: string;\n name?: string | undefined;\n vendorContact?: string | undefined;\n jobTitle?: string | undefined;\n firstName?: string | undefined;\n lastName?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n cellPhone?: string | undefined;\n fax?: string | undefined;\n address1?: string | undefined;\n address2?: string | undefined;\n address3?: string | undefined;\n city?: string | undefined;\n state?: string | undefined;\n zip?: string | undefined;\n adjustmentPercent!: number;\n adjustmentAmount!: number;\n minorityStatuses?: MinorityClass[] | undefined;\n pluggedAmount!: number;\n quotedAmount!: number;\n totalAdditive!: number;\n\n constructor(data?: IQuoteVendorSummaryDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.quoteFolderId = _data[\"quoteFolderId\"];\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.vendorContact = _data[\"vendorContact\"];\n this.jobTitle = _data[\"jobTitle\"];\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.email = _data[\"email\"];\n this.phone = _data[\"phone\"];\n this.cellPhone = _data[\"cellPhone\"];\n this.fax = _data[\"fax\"];\n this.address1 = _data[\"address1\"];\n this.address2 = _data[\"address2\"];\n this.address3 = _data[\"address3\"];\n this.city = _data[\"city\"];\n this.state = _data[\"state\"];\n this.zip = _data[\"zip\"];\n this.adjustmentPercent = _data[\"adjustmentPercent\"];\n this.adjustmentAmount = _data[\"adjustmentAmount\"];\n if (Array.isArray(_data[\"minorityStatuses\"])) {\n this.minorityStatuses = [] as any;\n for (let item of _data[\"minorityStatuses\"])\n this.minorityStatuses!.push(MinorityClass.fromJS(item));\n }\n this.pluggedAmount = _data[\"pluggedAmount\"];\n this.quotedAmount = _data[\"quotedAmount\"];\n this.totalAdditive = _data[\"totalAdditive\"];\n }\n }\n\n static fromJS(data: any): QuoteVendorSummaryDto {\n data = typeof data === \"object\" ? data : {};\n let result = new QuoteVendorSummaryDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"quoteFolderId\"] = this.quoteFolderId;\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"vendorContact\"] = this.vendorContact;\n data[\"jobTitle\"] = this.jobTitle;\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"email\"] = this.email;\n data[\"phone\"] = this.phone;\n data[\"cellPhone\"] = this.cellPhone;\n data[\"fax\"] = this.fax;\n data[\"address1\"] = this.address1;\n data[\"address2\"] = this.address2;\n data[\"address3\"] = this.address3;\n data[\"city\"] = this.city;\n data[\"state\"] = this.state;\n data[\"zip\"] = this.zip;\n data[\"adjustmentPercent\"] = this.adjustmentPercent;\n data[\"adjustmentAmount\"] = this.adjustmentAmount;\n if (Array.isArray(this.minorityStatuses)) {\n data[\"minorityStatuses\"] = [];\n for (let item of this.minorityStatuses)\n data[\"minorityStatuses\"].push(item.toJSON());\n }\n data[\"pluggedAmount\"] = this.pluggedAmount;\n data[\"quotedAmount\"] = this.quotedAmount;\n data[\"totalAdditive\"] = this.totalAdditive;\n return data;\n }\n}\n\nexport interface IQuoteVendorSummaryDto {\n id: string;\n quoteFolderId: string;\n code: string;\n name?: string | undefined;\n vendorContact?: string | undefined;\n jobTitle?: string | undefined;\n firstName?: string | undefined;\n lastName?: string | undefined;\n email?: string | undefined;\n phone?: string | undefined;\n cellPhone?: string | undefined;\n fax?: string | undefined;\n address1?: string | undefined;\n address2?: string | undefined;\n address3?: string | undefined;\n city?: string | undefined;\n state?: string | undefined;\n zip?: string | undefined;\n adjustmentPercent: number;\n adjustmentAmount: number;\n minorityStatuses?: MinorityClass[] | undefined;\n pluggedAmount: number;\n quotedAmount: number;\n totalAdditive: number;\n}\n\nexport interface FileResponse {\n data: Blob;\n status: number;\n fileName?: string;\n headers?: { [name: string]: any };\n}\n\nexport class SwaggerException extends Error {\n message: string;\n status: number;\n response: string;\n headers: { [key: string]: any };\n result: any;\n\n constructor(\n message: string,\n status: number,\n response: string,\n headers: { [key: string]: any },\n result: any\n ) {\n super();\n\n this.message = message;\n this.status = status;\n this.response = response;\n this.headers = headers;\n this.result = result;\n }\n\n protected isSwaggerException = true;\n\n static isSwaggerException(obj: any): obj is SwaggerException {\n return obj.isSwaggerException === true;\n }\n}\n\nfunction throwException(\n message: string,\n status: number,\n response: string,\n headers: { [key: string]: any },\n result?: any\n): any {\n if (result !== null && result !== undefined) throw result;\n else throw new SwaggerException(message, status, response, headers, null);\n}\n","import { Checkbox } from \"hcss-components\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport Modal from \"core/components/modals\";\nimport { SchemaField } from \"api\";\nimport { strings } from \"localization\";\nimport { constantSections } from \"modules/projects\";\nimport { useUserAndCompanyLicense } from \"modules/account\";\n\nexport interface FiltersSelectProps {\n show: boolean;\n onHide: () => void;\n selection: { [key: string]: boolean };\n onChange: (newFilters: { [key: string]: boolean }) => void;\n fieldsBySection: Array<{\n name: string;\n id: string;\n fields: SchemaField[];\n }>;\n activeFilters: string[];\n}\n\nexport const FilterSelect: React.FunctionComponent = ({\n fieldsBySection,\n show,\n onHide,\n selection,\n onChange,\n activeFilters\n}) => {\n const { companyLicense } = useUserAndCompanyLicense();\n\n return (\n \n
\n
    \n {fieldsBySection.map(section => {\n const filteredSections = constantSections.filter(\n s => s !== \"operations\" && s !== \"quickPrice\"\n );\n if (filteredSections.includes(section.id)) return null;\n if (section.id === \"operations\")\n section.name = strings.projects.heavyJob.title;\n const isHJSectionInLimitedCompany =\n companyLicense.isLimitedLicense && section.id == \"operations\";\n if (section.id === \"quickPrice\")\n section.name = strings.projects.quickPricing.title;\n const isQPSectionInLimitedCompany =\n companyLicense.isLimitedLicense && section.id == \"quickPrice\";\n return (\n \n \n {section.name}\n {isHJSectionInLimitedCompany && (\n
    \n {strings.projects.heavyJob.limitedPreConDescription}\n
    \n )}\n {isQPSectionInLimitedCompany && (\n
    \n {\n strings.projects.quickPricing\n .limitedDescriptionColumnChooser\n }\n
    \n )}\n {section.fields.map(field => {\n return (\n
    \n \n onChange({\n ...selection,\n [field.id]: (e.target as HTMLInputElement).checked\n })\n }\n disabled={\n activeFilters.includes(field.id) ||\n isHJSectionInLimitedCompany ||\n isQPSectionInLimitedCompany\n }\n >\n {field.name}\n \n
    \n );\n })}\n
    \n
\n );\n })}\n \n \n \n );\n};\n\nconst BlockCheckbox = styled(Checkbox)`\n display: inline-block;\n`;\n\nconst SectionColumnList = styled.div`\n break-inside: avoid;\n`;\n\nconst SectionLabel = styled.label`\n margin-top: 16px;\n`;\n","import {\n addDoc,\n collection,\n getDocs,\n getFirestore,\n query,\n where\n} from \"firebase/firestore\";\nimport { firebaseApp } from \"../../../firebase-app\";\nimport { isUndefined, omitBy } from \"lodash-es\";\nimport { CommunicationLog, CommunicationLogEntity } from \"core\";\n\nconst db = getFirestore(firebaseApp);\n\nexport const CommunicationLogRepo = {\n getLogs: async (companyId: string, estimateId: string) => {\n const logs: CommunicationLogEntity[] = [];\n const q = query(\n collection(db, \"communicationLogs\"),\n where(\"companyId\", \"==\", companyId),\n where(\"estimateId\", \"==\", estimateId)\n );\n\n try {\n const snap = await getDocs(q);\n for (const doc of snap.docs) {\n const data = doc.data() as CommunicationLog;\n logs.push({ ...data, id: doc.id });\n }\n } catch (error) {\n console.error(error);\n }\n\n return logs;\n },\n\n getLogsForVendor: async (\n companyId: string,\n estimateId: string,\n vendorCode: string\n ) => {\n const logs: CommunicationLogEntity[] = [];\n\n const q = query(\n collection(db, \"communicationLogs\"),\n where(\"companyId\", \"==\", companyId),\n where(\"estimateId\", \"==\", estimateId),\n where(\"vendorCode\", \"==\", vendorCode)\n );\n\n try {\n const snap = await getDocs(q);\n for (const doc of snap.docs) {\n const data = doc.data() as CommunicationLog;\n logs.push({ ...data, id: doc.id });\n }\n } catch (error) {\n console.error(error);\n }\n\n return logs;\n },\n\n saveLogRecord: async (record: CommunicationLog) => {\n const ref = collection(db, \"communicationLogs\");\n\n try {\n const doc = omitBy(record, isUndefined);\n await addDoc(ref, doc);\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n },\n\n subscribe: (companyId: string, estimateId?: string, projectId?: string) => {\n const whereClauses = [];\n whereClauses.push(where(\"companyId\", \"==\", companyId));\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n if (projectId) {\n whereClauses.push(where(\"projectId\", \"==\", projectId));\n }\n\n const q = query(collection(db, \"communicationLogs\"), ...whereClauses);\n return q;\n }\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\n\ninterface BadgeProps {\n type: \"success\" | \"danger\" | \"warning\" | \"info\";\n children?: React.ReactChild;\n style?: React.CSSProperties;\n}\nexport const Badge = ({ children, type, style }: BadgeProps) => {\n return (\n \n {children}\n \n );\n};\n\nconst ContentWrapper = styled.span`\n &.badge-info {\n color: #004085;\n background-color: #cce5ff;\n border-color: #b8daff;\n }\n\n &.badge-success {\n color: #155724;\n background-color: #d4edda;\n border-color: #c3e6cb;\n }\n\n &.badge-warning {\n color: #856404;\n background-color: #fff3cd;\n border-color: #ffeeba;\n }\n\n &.badge-danger {\n color: #721c24;\n background-color: #f8d7da;\n border-color: #f5c6cb;\n }\n`;\n","// This product includes color specifications and designs developed by Cynthia Brewer (http://colorbrewer.org/).\n// JavaScript specs as packaged in the D3 library (d3js.org). Please see license at http://colorbrewer.org/export/LICENSE.txt\nexport const colorbrewer = {\n YlGn: {\n 3: [\"#f7fcb9\", \"#addd8e\", \"#31a354\"],\n 4: [\"#ffffcc\", \"#c2e699\", \"#78c679\", \"#238443\"],\n 5: [\"#ffffcc\", \"#c2e699\", \"#78c679\", \"#31a354\", \"#006837\"],\n 6: [\"#ffffcc\", \"#d9f0a3\", \"#addd8e\", \"#78c679\", \"#31a354\", \"#006837\"],\n 7: [\"#ffffcc\", \"#d9f0a3\", \"#addd8e\", \"#78c679\", \"#41ab5d\", \"#238443\", \"#005a32\"],\n 8: [\"#ffffe5\", \"#f7fcb9\", \"#d9f0a3\", \"#addd8e\", \"#78c679\", \"#41ab5d\", \"#238443\", \"#005a32\"],\n 9: [\"#ffffe5\", \"#f7fcb9\", \"#d9f0a3\", \"#addd8e\", \"#78c679\", \"#41ab5d\", \"#238443\", \"#006837\", \"#004529\"]\n }, YlGnBu: {\n 3: [\"#edf8b1\", \"#7fcdbb\", \"#2c7fb8\"],\n 4: [\"#ffffcc\", \"#a1dab4\", \"#41b6c4\", \"#225ea8\"],\n 5: [\"#ffffcc\", \"#a1dab4\", \"#41b6c4\", \"#2c7fb8\", \"#253494\"],\n 6: [\"#ffffcc\", \"#c7e9b4\", \"#7fcdbb\", \"#41b6c4\", \"#2c7fb8\", \"#253494\"],\n 7: [\"#ffffcc\", \"#c7e9b4\", \"#7fcdbb\", \"#41b6c4\", \"#1d91c0\", \"#225ea8\", \"#0c2c84\"],\n 8: [\"#ffffd9\", \"#edf8b1\", \"#c7e9b4\", \"#7fcdbb\", \"#41b6c4\", \"#1d91c0\", \"#225ea8\", \"#0c2c84\"],\n 9: [\"#ffffd9\", \"#edf8b1\", \"#c7e9b4\", \"#7fcdbb\", \"#41b6c4\", \"#1d91c0\", \"#225ea8\", \"#253494\", \"#081d58\"]\n }, GnBu: {\n 3: [\"#e0f3db\", \"#a8ddb5\", \"#43a2ca\"],\n 4: [\"#f0f9e8\", \"#bae4bc\", \"#7bccc4\", \"#2b8cbe\"],\n 5: [\"#f0f9e8\", \"#bae4bc\", \"#7bccc4\", \"#43a2ca\", \"#0868ac\"],\n 6: [\"#f0f9e8\", \"#ccebc5\", \"#a8ddb5\", \"#7bccc4\", \"#43a2ca\", \"#0868ac\"],\n 7: [\"#f0f9e8\", \"#ccebc5\", \"#a8ddb5\", \"#7bccc4\", \"#4eb3d3\", \"#2b8cbe\", \"#08589e\"],\n 8: [\"#f7fcf0\", \"#e0f3db\", \"#ccebc5\", \"#a8ddb5\", \"#7bccc4\", \"#4eb3d3\", \"#2b8cbe\", \"#08589e\"],\n 9: [\"#f7fcf0\", \"#e0f3db\", \"#ccebc5\", \"#a8ddb5\", \"#7bccc4\", \"#4eb3d3\", \"#2b8cbe\", \"#0868ac\", \"#084081\"]\n }, BuGn: {\n 3: [\"#e5f5f9\", \"#99d8c9\", \"#2ca25f\"],\n 4: [\"#edf8fb\", \"#b2e2e2\", \"#66c2a4\", \"#238b45\"],\n 5: [\"#edf8fb\", \"#b2e2e2\", \"#66c2a4\", \"#2ca25f\", \"#006d2c\"],\n 6: [\"#edf8fb\", \"#ccece6\", \"#99d8c9\", \"#66c2a4\", \"#2ca25f\", \"#006d2c\"],\n 7: [\"#edf8fb\", \"#ccece6\", \"#99d8c9\", \"#66c2a4\", \"#41ae76\", \"#238b45\", \"#005824\"],\n 8: [\"#f7fcfd\", \"#e5f5f9\", \"#ccece6\", \"#99d8c9\", \"#66c2a4\", \"#41ae76\", \"#238b45\", \"#005824\"],\n 9: [\"#f7fcfd\", \"#e5f5f9\", \"#ccece6\", \"#99d8c9\", \"#66c2a4\", \"#41ae76\", \"#238b45\", \"#006d2c\", \"#00441b\"]\n }, PuBuGn: {\n 3: [\"#ece2f0\", \"#a6bddb\", \"#1c9099\"],\n 4: [\"#f6eff7\", \"#bdc9e1\", \"#67a9cf\", \"#02818a\"],\n 5: [\"#f6eff7\", \"#bdc9e1\", \"#67a9cf\", \"#1c9099\", \"#016c59\"],\n 6: [\"#f6eff7\", \"#d0d1e6\", \"#a6bddb\", \"#67a9cf\", \"#1c9099\", \"#016c59\"],\n 7: [\"#f6eff7\", \"#d0d1e6\", \"#a6bddb\", \"#67a9cf\", \"#3690c0\", \"#02818a\", \"#016450\"],\n 8: [\"#fff7fb\", \"#ece2f0\", \"#d0d1e6\", \"#a6bddb\", \"#67a9cf\", \"#3690c0\", \"#02818a\", \"#016450\"],\n 9: [\"#fff7fb\", \"#ece2f0\", \"#d0d1e6\", \"#a6bddb\", \"#67a9cf\", \"#3690c0\", \"#02818a\", \"#016c59\", \"#014636\"]\n }, PuBu: {\n 3: [\"#ece7f2\", \"#a6bddb\", \"#2b8cbe\"],\n 4: [\"#f1eef6\", \"#bdc9e1\", \"#74a9cf\", \"#0570b0\"],\n 5: [\"#f1eef6\", \"#bdc9e1\", \"#74a9cf\", \"#2b8cbe\", \"#045a8d\"],\n 6: [\"#f1eef6\", \"#d0d1e6\", \"#a6bddb\", \"#74a9cf\", \"#2b8cbe\", \"#045a8d\"],\n 7: [\"#f1eef6\", \"#d0d1e6\", \"#a6bddb\", \"#74a9cf\", \"#3690c0\", \"#0570b0\", \"#034e7b\"],\n 8: [\"#fff7fb\", \"#ece7f2\", \"#d0d1e6\", \"#a6bddb\", \"#74a9cf\", \"#3690c0\", \"#0570b0\", \"#034e7b\"],\n 9: [\"#fff7fb\", \"#ece7f2\", \"#d0d1e6\", \"#a6bddb\", \"#74a9cf\", \"#3690c0\", \"#0570b0\", \"#045a8d\", \"#023858\"]\n }, BuPu: {\n 3: [\"#e0ecf4\", \"#9ebcda\", \"#8856a7\"],\n 4: [\"#edf8fb\", \"#b3cde3\", \"#8c96c6\", \"#88419d\"],\n 5: [\"#edf8fb\", \"#b3cde3\", \"#8c96c6\", \"#8856a7\", \"#810f7c\"],\n 6: [\"#edf8fb\", \"#bfd3e6\", \"#9ebcda\", \"#8c96c6\", \"#8856a7\", \"#810f7c\"],\n 7: [\"#edf8fb\", \"#bfd3e6\", \"#9ebcda\", \"#8c96c6\", \"#8c6bb1\", \"#88419d\", \"#6e016b\"],\n 8: [\"#f7fcfd\", \"#e0ecf4\", \"#bfd3e6\", \"#9ebcda\", \"#8c96c6\", \"#8c6bb1\", \"#88419d\", \"#6e016b\"],\n 9: [\"#f7fcfd\", \"#e0ecf4\", \"#bfd3e6\", \"#9ebcda\", \"#8c96c6\", \"#8c6bb1\", \"#88419d\", \"#810f7c\", \"#4d004b\"]\n }, RdPu: {\n 3: [\"#fde0dd\", \"#fa9fb5\", \"#c51b8a\"],\n 4: [\"#feebe2\", \"#fbb4b9\", \"#f768a1\", \"#ae017e\"],\n 5: [\"#feebe2\", \"#fbb4b9\", \"#f768a1\", \"#c51b8a\", \"#7a0177\"],\n 6: [\"#feebe2\", \"#fcc5c0\", \"#fa9fb5\", \"#f768a1\", \"#c51b8a\", \"#7a0177\"],\n 7: [\"#feebe2\", \"#fcc5c0\", \"#fa9fb5\", \"#f768a1\", \"#dd3497\", \"#ae017e\", \"#7a0177\"],\n 8: [\"#fff7f3\", \"#fde0dd\", \"#fcc5c0\", \"#fa9fb5\", \"#f768a1\", \"#dd3497\", \"#ae017e\", \"#7a0177\"],\n 9: [\"#fff7f3\", \"#fde0dd\", \"#fcc5c0\", \"#fa9fb5\", \"#f768a1\", \"#dd3497\", \"#ae017e\", \"#7a0177\", \"#49006a\"]\n }, PuRd: {\n 3: [\"#e7e1ef\", \"#c994c7\", \"#dd1c77\"],\n 4: [\"#f1eef6\", \"#d7b5d8\", \"#df65b0\", \"#ce1256\"],\n 5: [\"#f1eef6\", \"#d7b5d8\", \"#df65b0\", \"#dd1c77\", \"#980043\"],\n 6: [\"#f1eef6\", \"#d4b9da\", \"#c994c7\", \"#df65b0\", \"#dd1c77\", \"#980043\"],\n 7: [\"#f1eef6\", \"#d4b9da\", \"#c994c7\", \"#df65b0\", \"#e7298a\", \"#ce1256\", \"#91003f\"],\n 8: [\"#f7f4f9\", \"#e7e1ef\", \"#d4b9da\", \"#c994c7\", \"#df65b0\", \"#e7298a\", \"#ce1256\", \"#91003f\"],\n 9: [\"#f7f4f9\", \"#e7e1ef\", \"#d4b9da\", \"#c994c7\", \"#df65b0\", \"#e7298a\", \"#ce1256\", \"#980043\", \"#67001f\"]\n }, OrRd: {\n 3: [\"#fee8c8\", \"#fdbb84\", \"#e34a33\"],\n 4: [\"#fef0d9\", \"#fdcc8a\", \"#fc8d59\", \"#d7301f\"],\n 5: [\"#fef0d9\", \"#fdcc8a\", \"#fc8d59\", \"#e34a33\", \"#b30000\"],\n 6: [\"#fef0d9\", \"#fdd49e\", \"#fdbb84\", \"#fc8d59\", \"#e34a33\", \"#b30000\"],\n 7: [\"#fef0d9\", \"#fdd49e\", \"#fdbb84\", \"#fc8d59\", \"#ef6548\", \"#d7301f\", \"#990000\"],\n 8: [\"#fff7ec\", \"#fee8c8\", \"#fdd49e\", \"#fdbb84\", \"#fc8d59\", \"#ef6548\", \"#d7301f\", \"#990000\"],\n 9: [\"#fff7ec\", \"#fee8c8\", \"#fdd49e\", \"#fdbb84\", \"#fc8d59\", \"#ef6548\", \"#d7301f\", \"#b30000\", \"#7f0000\"]\n }, YlOrRd: {\n 3: [\"#ffeda0\", \"#feb24c\", \"#f03b20\"],\n 4: [\"#ffffb2\", \"#fecc5c\", \"#fd8d3c\", \"#e31a1c\"],\n 5: [\"#ffffb2\", \"#fecc5c\", \"#fd8d3c\", \"#f03b20\", \"#bd0026\"],\n 6: [\"#ffffb2\", \"#fed976\", \"#feb24c\", \"#fd8d3c\", \"#f03b20\", \"#bd0026\"],\n 7: [\"#ffffb2\", \"#fed976\", \"#feb24c\", \"#fd8d3c\", \"#fc4e2a\", \"#e31a1c\", \"#b10026\"],\n 8: [\"#ffffcc\", \"#ffeda0\", \"#fed976\", \"#feb24c\", \"#fd8d3c\", \"#fc4e2a\", \"#e31a1c\", \"#b10026\"],\n 9: [\"#ffffcc\", \"#ffeda0\", \"#fed976\", \"#feb24c\", \"#fd8d3c\", \"#fc4e2a\", \"#e31a1c\", \"#bd0026\", \"#800026\"]\n }, YlOrBr: {\n 3: [\"#fff7bc\", \"#fec44f\", \"#d95f0e\"],\n 4: [\"#ffffd4\", \"#fed98e\", \"#fe9929\", \"#cc4c02\"],\n 5: [\"#ffffd4\", \"#fed98e\", \"#fe9929\", \"#d95f0e\", \"#993404\"],\n 6: [\"#ffffd4\", \"#fee391\", \"#fec44f\", \"#fe9929\", \"#d95f0e\", \"#993404\"],\n 7: [\"#ffffd4\", \"#fee391\", \"#fec44f\", \"#fe9929\", \"#ec7014\", \"#cc4c02\", \"#8c2d04\"],\n 8: [\"#ffffe5\", \"#fff7bc\", \"#fee391\", \"#fec44f\", \"#fe9929\", \"#ec7014\", \"#cc4c02\", \"#8c2d04\"],\n 9: [\"#ffffe5\", \"#fff7bc\", \"#fee391\", \"#fec44f\", \"#fe9929\", \"#ec7014\", \"#cc4c02\", \"#993404\", \"#662506\"]\n }, Purples: {\n 3: [\"#efedf5\", \"#bcbddc\", \"#756bb1\"],\n 4: [\"#f2f0f7\", \"#cbc9e2\", \"#9e9ac8\", \"#6a51a3\"],\n 5: [\"#f2f0f7\", \"#cbc9e2\", \"#9e9ac8\", \"#756bb1\", \"#54278f\"],\n 6: [\"#f2f0f7\", \"#dadaeb\", \"#bcbddc\", \"#9e9ac8\", \"#756bb1\", \"#54278f\"],\n 7: [\"#f2f0f7\", \"#dadaeb\", \"#bcbddc\", \"#9e9ac8\", \"#807dba\", \"#6a51a3\", \"#4a1486\"],\n 8: [\"#fcfbfd\", \"#efedf5\", \"#dadaeb\", \"#bcbddc\", \"#9e9ac8\", \"#807dba\", \"#6a51a3\", \"#4a1486\"],\n 9: [\"#fcfbfd\", \"#efedf5\", \"#dadaeb\", \"#bcbddc\", \"#9e9ac8\", \"#807dba\", \"#6a51a3\", \"#54278f\", \"#3f007d\"]\n }, Blues: {\n 3: [\"#deebf7\", \"#9ecae1\", \"#3182bd\"],\n 4: [\"#eff3ff\", \"#bdd7e7\", \"#6baed6\", \"#2171b5\"],\n 5: [\"#eff3ff\", \"#bdd7e7\", \"#6baed6\", \"#3182bd\", \"#08519c\"],\n 6: [\"#eff3ff\", \"#c6dbef\", \"#9ecae1\", \"#6baed6\", \"#3182bd\", \"#08519c\"],\n 7: [\"#eff3ff\", \"#c6dbef\", \"#9ecae1\", \"#6baed6\", \"#4292c6\", \"#2171b5\", \"#084594\"],\n 8: [\"#f7fbff\", \"#deebf7\", \"#c6dbef\", \"#9ecae1\", \"#6baed6\", \"#4292c6\", \"#2171b5\", \"#084594\"],\n 9: [\"#f7fbff\", \"#deebf7\", \"#c6dbef\", \"#9ecae1\", \"#6baed6\", \"#4292c6\", \"#2171b5\", \"#08519c\", \"#08306b\"]\n }, Greens: {\n 3: [\"#e5f5e0\", \"#a1d99b\", \"#31a354\"],\n 4: [\"#edf8e9\", \"#bae4b3\", \"#74c476\", \"#238b45\"],\n 5: [\"#edf8e9\", \"#bae4b3\", \"#74c476\", \"#31a354\", \"#006d2c\"],\n 6: [\"#edf8e9\", \"#c7e9c0\", \"#a1d99b\", \"#74c476\", \"#31a354\", \"#006d2c\"],\n 7: [\"#edf8e9\", \"#c7e9c0\", \"#a1d99b\", \"#74c476\", \"#41ab5d\", \"#238b45\", \"#005a32\"],\n 8: [\"#f7fcf5\", \"#e5f5e0\", \"#c7e9c0\", \"#a1d99b\", \"#74c476\", \"#41ab5d\", \"#238b45\", \"#005a32\"],\n 9: [\"#f7fcf5\", \"#e5f5e0\", \"#c7e9c0\", \"#a1d99b\", \"#74c476\", \"#41ab5d\", \"#238b45\", \"#006d2c\", \"#00441b\"]\n }, Oranges: {\n 3: [\"#fee6ce\", \"#fdae6b\", \"#e6550d\"],\n 4: [\"#feedde\", \"#fdbe85\", \"#fd8d3c\", \"#d94701\"],\n 5: [\"#feedde\", \"#fdbe85\", \"#fd8d3c\", \"#e6550d\", \"#a63603\"],\n 6: [\"#feedde\", \"#fdd0a2\", \"#fdae6b\", \"#fd8d3c\", \"#e6550d\", \"#a63603\"],\n 7: [\"#feedde\", \"#fdd0a2\", \"#fdae6b\", \"#fd8d3c\", \"#f16913\", \"#d94801\", \"#8c2d04\"],\n 8: [\"#fff5eb\", \"#fee6ce\", \"#fdd0a2\", \"#fdae6b\", \"#fd8d3c\", \"#f16913\", \"#d94801\", \"#8c2d04\"],\n 9: [\"#fff5eb\", \"#fee6ce\", \"#fdd0a2\", \"#fdae6b\", \"#fd8d3c\", \"#f16913\", \"#d94801\", \"#a63603\", \"#7f2704\"]\n }, Reds: {\n 3: [\"#fee0d2\", \"#fc9272\", \"#de2d26\"],\n 4: [\"#fee5d9\", \"#fcae91\", \"#fb6a4a\", \"#cb181d\"],\n 5: [\"#fee5d9\", \"#fcae91\", \"#fb6a4a\", \"#de2d26\", \"#a50f15\"],\n 6: [\"#fee5d9\", \"#fcbba1\", \"#fc9272\", \"#fb6a4a\", \"#de2d26\", \"#a50f15\"],\n 7: [\"#fee5d9\", \"#fcbba1\", \"#fc9272\", \"#fb6a4a\", \"#ef3b2c\", \"#cb181d\", \"#99000d\"],\n 8: [\"#fff5f0\", \"#fee0d2\", \"#fcbba1\", \"#fc9272\", \"#fb6a4a\", \"#ef3b2c\", \"#cb181d\", \"#99000d\"],\n 9: [\"#fff5f0\", \"#fee0d2\", \"#fcbba1\", \"#fc9272\", \"#fb6a4a\", \"#ef3b2c\", \"#cb181d\", \"#a50f15\", \"#67000d\"]\n }, Greys: {\n 3: [\"#f0f0f0\", \"#bdbdbd\", \"#636363\"],\n 4: [\"#f7f7f7\", \"#cccccc\", \"#969696\", \"#525252\"],\n 5: [\"#f7f7f7\", \"#cccccc\", \"#969696\", \"#636363\", \"#252525\"],\n 6: [\"#f7f7f7\", \"#d9d9d9\", \"#bdbdbd\", \"#969696\", \"#636363\", \"#252525\"],\n 7: [\"#f7f7f7\", \"#d9d9d9\", \"#bdbdbd\", \"#969696\", \"#737373\", \"#525252\", \"#252525\"],\n 8: [\"#ffffff\", \"#f0f0f0\", \"#d9d9d9\", \"#bdbdbd\", \"#969696\", \"#737373\", \"#525252\", \"#252525\"],\n 9: [\"#ffffff\", \"#f0f0f0\", \"#d9d9d9\", \"#bdbdbd\", \"#969696\", \"#737373\", \"#525252\", \"#252525\", \"#000000\"]\n }, PuOr: {\n 3: [\"#f1a340\", \"#f7f7f7\", \"#998ec3\"],\n 4: [\"#e66101\", \"#fdb863\", \"#b2abd2\", \"#5e3c99\"],\n 5: [\"#e66101\", \"#fdb863\", \"#f7f7f7\", \"#b2abd2\", \"#5e3c99\"],\n 6: [\"#b35806\", \"#f1a340\", \"#fee0b6\", \"#d8daeb\", \"#998ec3\", \"#542788\"],\n 7: [\"#b35806\", \"#f1a340\", \"#fee0b6\", \"#f7f7f7\", \"#d8daeb\", \"#998ec3\", \"#542788\"],\n 8: [\"#b35806\", \"#e08214\", \"#fdb863\", \"#fee0b6\", \"#d8daeb\", \"#b2abd2\", \"#8073ac\", \"#542788\"],\n 9: [\"#b35806\", \"#e08214\", \"#fdb863\", \"#fee0b6\", \"#f7f7f7\", \"#d8daeb\", \"#b2abd2\", \"#8073ac\", \"#542788\"],\n 10: [\"#7f3b08\", \"#b35806\", \"#e08214\", \"#fdb863\", \"#fee0b6\", \"#d8daeb\", \"#b2abd2\", \"#8073ac\", \"#542788\", \"#2d004b\"],\n 11: [\"#7f3b08\", \"#b35806\", \"#e08214\", \"#fdb863\", \"#fee0b6\", \"#f7f7f7\", \"#d8daeb\", \"#b2abd2\", \"#8073ac\", \"#542788\", \"#2d004b\"]\n }, BrBG: {\n 3: [\"#d8b365\", \"#f5f5f5\", \"#5ab4ac\"],\n 4: [\"#a6611a\", \"#dfc27d\", \"#80cdc1\", \"#018571\"],\n 5: [\"#a6611a\", \"#dfc27d\", \"#f5f5f5\", \"#80cdc1\", \"#018571\"],\n 6: [\"#8c510a\", \"#d8b365\", \"#f6e8c3\", \"#c7eae5\", \"#5ab4ac\", \"#01665e\"],\n 7: [\"#8c510a\", \"#d8b365\", \"#f6e8c3\", \"#f5f5f5\", \"#c7eae5\", \"#5ab4ac\", \"#01665e\"],\n 8: [\"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\"],\n 9: [\"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#f5f5f5\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\"],\n 10: [\"#543005\", \"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\", \"#003c30\"],\n 11: [\"#543005\", \"#8c510a\", \"#bf812d\", \"#dfc27d\", \"#f6e8c3\", \"#f5f5f5\", \"#c7eae5\", \"#80cdc1\", \"#35978f\", \"#01665e\", \"#003c30\"]\n }, PRGn: {\n 3: [\"#af8dc3\", \"#f7f7f7\", \"#7fbf7b\"],\n 4: [\"#7b3294\", \"#c2a5cf\", \"#a6dba0\", \"#008837\"],\n 5: [\"#7b3294\", \"#c2a5cf\", \"#f7f7f7\", \"#a6dba0\", \"#008837\"],\n 6: [\"#762a83\", \"#af8dc3\", \"#e7d4e8\", \"#d9f0d3\", \"#7fbf7b\", \"#1b7837\"],\n 7: [\"#762a83\", \"#af8dc3\", \"#e7d4e8\", \"#f7f7f7\", \"#d9f0d3\", \"#7fbf7b\", \"#1b7837\"],\n 8: [\"#762a83\", \"#9970ab\", \"#c2a5cf\", \"#e7d4e8\", \"#d9f0d3\", \"#a6dba0\", \"#5aae61\", \"#1b7837\"],\n 9: [\"#762a83\", \"#9970ab\", \"#c2a5cf\", \"#e7d4e8\", \"#f7f7f7\", \"#d9f0d3\", \"#a6dba0\", \"#5aae61\", \"#1b7837\"],\n 10: [\"#40004b\", \"#762a83\", \"#9970ab\", \"#c2a5cf\", \"#e7d4e8\", \"#d9f0d3\", \"#a6dba0\", \"#5aae61\", \"#1b7837\", \"#00441b\"],\n 11: [\"#40004b\", \"#762a83\", \"#9970ab\", \"#c2a5cf\", \"#e7d4e8\", \"#f7f7f7\", \"#d9f0d3\", \"#a6dba0\", \"#5aae61\", \"#1b7837\", \"#00441b\"]\n }, PiYG: {\n 3: [\"#e9a3c9\", \"#f7f7f7\", \"#a1d76a\"],\n 4: [\"#d01c8b\", \"#f1b6da\", \"#b8e186\", \"#4dac26\"],\n 5: [\"#d01c8b\", \"#f1b6da\", \"#f7f7f7\", \"#b8e186\", \"#4dac26\"],\n 6: [\"#c51b7d\", \"#e9a3c9\", \"#fde0ef\", \"#e6f5d0\", \"#a1d76a\", \"#4d9221\"],\n 7: [\"#c51b7d\", \"#e9a3c9\", \"#fde0ef\", \"#f7f7f7\", \"#e6f5d0\", \"#a1d76a\", \"#4d9221\"],\n 8: [\"#c51b7d\", \"#de77ae\", \"#f1b6da\", \"#fde0ef\", \"#e6f5d0\", \"#b8e186\", \"#7fbc41\", \"#4d9221\"],\n 9: [\"#c51b7d\", \"#de77ae\", \"#f1b6da\", \"#fde0ef\", \"#f7f7f7\", \"#e6f5d0\", \"#b8e186\", \"#7fbc41\", \"#4d9221\"],\n 10: [\"#8e0152\", \"#c51b7d\", \"#de77ae\", \"#f1b6da\", \"#fde0ef\", \"#e6f5d0\", \"#b8e186\", \"#7fbc41\", \"#4d9221\", \"#276419\"],\n 11: [\"#8e0152\", \"#c51b7d\", \"#de77ae\", \"#f1b6da\", \"#fde0ef\", \"#f7f7f7\", \"#e6f5d0\", \"#b8e186\", \"#7fbc41\", \"#4d9221\", \"#276419\"]\n }, RdBu: {\n 3: [\"#ef8a62\", \"#f7f7f7\", \"#67a9cf\"],\n 4: [\"#ca0020\", \"#f4a582\", \"#92c5de\", \"#0571b0\"],\n 5: [\"#ca0020\", \"#f4a582\", \"#f7f7f7\", \"#92c5de\", \"#0571b0\"],\n 6: [\"#b2182b\", \"#ef8a62\", \"#fddbc7\", \"#d1e5f0\", \"#67a9cf\", \"#2166ac\"],\n 7: [\"#b2182b\", \"#ef8a62\", \"#fddbc7\", \"#f7f7f7\", \"#d1e5f0\", \"#67a9cf\", \"#2166ac\"],\n 8: [\"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\"],\n 9: [\"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#f7f7f7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\"],\n 10: [\"#67001f\", \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\", \"#053061\"],\n 11: [\"#67001f\", \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#f7f7f7\", \"#d1e5f0\", \"#92c5de\", \"#4393c3\", \"#2166ac\", \"#053061\"]\n }, RdGy: {\n 3: [\"#ef8a62\", \"#ffffff\", \"#999999\"],\n 4: [\"#ca0020\", \"#f4a582\", \"#bababa\", \"#404040\"],\n 5: [\"#ca0020\", \"#f4a582\", \"#ffffff\", \"#bababa\", \"#404040\"],\n 6: [\"#b2182b\", \"#ef8a62\", \"#fddbc7\", \"#e0e0e0\", \"#999999\", \"#4d4d4d\"],\n 7: [\"#b2182b\", \"#ef8a62\", \"#fddbc7\", \"#ffffff\", \"#e0e0e0\", \"#999999\", \"#4d4d4d\"],\n 8: [\"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#e0e0e0\", \"#bababa\", \"#878787\", \"#4d4d4d\"],\n 9: [\"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#ffffff\", \"#e0e0e0\", \"#bababa\", \"#878787\", \"#4d4d4d\"],\n 10: [\"#67001f\", \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#e0e0e0\", \"#bababa\", \"#878787\", \"#4d4d4d\", \"#1a1a1a\"],\n 11: [\"#67001f\", \"#b2182b\", \"#d6604d\", \"#f4a582\", \"#fddbc7\", \"#ffffff\", \"#e0e0e0\", \"#bababa\", \"#878787\", \"#4d4d4d\", \"#1a1a1a\"]\n }, RdYlBu: {\n 3: [\"#fc8d59\", \"#ffffbf\", \"#91bfdb\"],\n 4: [\"#d7191c\", \"#fdae61\", \"#abd9e9\", \"#2c7bb6\"],\n 5: [\"#d7191c\", \"#fdae61\", \"#ffffbf\", \"#abd9e9\", \"#2c7bb6\"],\n 6: [\"#d73027\", \"#fc8d59\", \"#fee090\", \"#e0f3f8\", \"#91bfdb\", \"#4575b4\"],\n 7: [\"#d73027\", \"#fc8d59\", \"#fee090\", \"#ffffbf\", \"#e0f3f8\", \"#91bfdb\", \"#4575b4\"],\n 8: [\"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\"],\n 9: [\"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#ffffbf\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\"],\n 10: [\"#a50026\", \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\", \"#313695\"],\n 11: [\"#a50026\", \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee090\", \"#ffffbf\", \"#e0f3f8\", \"#abd9e9\", \"#74add1\", \"#4575b4\", \"#313695\"]\n }, Spectral: {\n 3: [\"#fc8d59\", \"#ffffbf\", \"#99d594\"],\n 4: [\"#d7191c\", \"#fdae61\", \"#abdda4\", \"#2b83ba\"],\n 5: [\"#d7191c\", \"#fdae61\", \"#ffffbf\", \"#abdda4\", \"#2b83ba\"],\n 6: [\"#d53e4f\", \"#fc8d59\", \"#fee08b\", \"#e6f598\", \"#99d594\", \"#3288bd\"],\n 7: [\"#d53e4f\", \"#fc8d59\", \"#fee08b\", \"#ffffbf\", \"#e6f598\", \"#99d594\", \"#3288bd\"],\n 8: [\"#d53e4f\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#e6f598\", \"#abdda4\", \"#66c2a5\", \"#3288bd\"],\n 9: [\"#d53e4f\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#ffffbf\", \"#e6f598\", \"#abdda4\", \"#66c2a5\", \"#3288bd\"],\n 10: [\"#9e0142\", \"#d53e4f\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#e6f598\", \"#abdda4\", \"#66c2a5\", \"#3288bd\", \"#5e4fa2\"],\n 11: [\"#9e0142\", \"#d53e4f\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#ffffbf\", \"#e6f598\", \"#abdda4\", \"#66c2a5\", \"#3288bd\", \"#5e4fa2\"]\n }, RdYlGn: {\n 3: [\"#fc8d59\", \"#ffffbf\", \"#91cf60\"],\n 4: [\"#d7191c\", \"#fdae61\", \"#a6d96a\", \"#1a9641\"],\n 5: [\"#d7191c\", \"#fdae61\", \"#ffffbf\", \"#a6d96a\", \"#1a9641\"],\n 6: [\"#d73027\", \"#fc8d59\", \"#fee08b\", \"#d9ef8b\", \"#91cf60\", \"#1a9850\"],\n 7: [\"#d73027\", \"#fc8d59\", \"#fee08b\", \"#ffffbf\", \"#d9ef8b\", \"#91cf60\", \"#1a9850\"],\n 8: [\"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#d9ef8b\", \"#a6d96a\", \"#66bd63\", \"#1a9850\"],\n 9: [\"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#ffffbf\", \"#d9ef8b\", \"#a6d96a\", \"#66bd63\", \"#1a9850\"],\n 10: [\"#a50026\", \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#d9ef8b\", \"#a6d96a\", \"#66bd63\", \"#1a9850\", \"#006837\"],\n 11: [\"#a50026\", \"#d73027\", \"#f46d43\", \"#fdae61\", \"#fee08b\", \"#ffffbf\", \"#d9ef8b\", \"#a6d96a\", \"#66bd63\", \"#1a9850\", \"#006837\"]\n }, Accent: {\n 3: [\"#7fc97f\", \"#beaed4\", \"#fdc086\"],\n 4: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\"],\n 5: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\", \"#386cb0\"],\n 6: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\", \"#386cb0\", \"#f0027f\"],\n 7: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\", \"#386cb0\", \"#f0027f\", \"#bf5b17\"],\n 8: [\"#7fc97f\", \"#beaed4\", \"#fdc086\", \"#ffff99\", \"#386cb0\", \"#f0027f\", \"#bf5b17\", \"#666666\"]\n }, Dark2: {\n 3: [\"#1b9e77\", \"#d95f02\", \"#7570b3\"],\n 4: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\"],\n 5: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\", \"#66a61e\"],\n 6: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\", \"#66a61e\", \"#e6ab02\"],\n 7: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\", \"#66a61e\", \"#e6ab02\", \"#a6761d\"],\n 8: [\"#1b9e77\", \"#d95f02\", \"#7570b3\", \"#e7298a\", \"#66a61e\", \"#e6ab02\", \"#a6761d\", \"#666666\"]\n }, Paired: {\n 3: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\"],\n 4: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\"],\n 5: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\"],\n 6: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\"],\n 7: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\"],\n 8: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\"],\n 9: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\"],\n 10: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\", \"#6a3d9a\"],\n 11: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\", \"#6a3d9a\", \"#ffff99\"],\n 12: [\"#a6cee3\", \"#1f78b4\", \"#b2df8a\", \"#33a02c\", \"#fb9a99\", \"#e31a1c\", \"#fdbf6f\", \"#ff7f00\", \"#cab2d6\", \"#6a3d9a\", \"#ffff99\", \"#b15928\"]\n }, Pastel1: {\n 3: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\"],\n 4: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\"],\n 5: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\"],\n 6: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\", \"#ffffcc\"],\n 7: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\", \"#ffffcc\", \"#e5d8bd\"],\n 8: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\", \"#ffffcc\", \"#e5d8bd\", \"#fddaec\"],\n 9: [\"#fbb4ae\", \"#b3cde3\", \"#ccebc5\", \"#decbe4\", \"#fed9a6\", \"#ffffcc\", \"#e5d8bd\", \"#fddaec\", \"#f2f2f2\"]\n }, Pastel2: {\n 3: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\"],\n 4: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\"],\n 5: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\", \"#e6f5c9\"],\n 6: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\", \"#e6f5c9\", \"#fff2ae\"],\n 7: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\", \"#e6f5c9\", \"#fff2ae\", \"#f1e2cc\"],\n 8: [\"#b3e2cd\", \"#fdcdac\", \"#cbd5e8\", \"#f4cae4\", \"#e6f5c9\", \"#fff2ae\", \"#f1e2cc\", \"#cccccc\"]\n }, Set1: {\n 3: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\"],\n 4: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\"],\n 5: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\"],\n 6: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\", \"#ffff33\"],\n 7: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\", \"#ffff33\", \"#a65628\"],\n 8: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\", \"#ffff33\", \"#a65628\", \"#f781bf\"],\n 9: [\"#e41a1c\", \"#377eb8\", \"#4daf4a\", \"#984ea3\", \"#ff7f00\", \"#ffff33\", \"#a65628\", \"#f781bf\", \"#999999\"]\n }, Set2: {\n 3: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\"],\n 4: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\"],\n 5: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\", \"#a6d854\"],\n 6: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\", \"#a6d854\", \"#ffd92f\"],\n 7: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\", \"#a6d854\", \"#ffd92f\", \"#e5c494\"],\n 8: [\"#66c2a5\", \"#fc8d62\", \"#8da0cb\", \"#e78ac3\", \"#a6d854\", \"#ffd92f\", \"#e5c494\", \"#b3b3b3\"]\n }, Set3: {\n 3: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\"],\n 4: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\"],\n 5: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\"],\n 6: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\"],\n 7: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\"],\n 8: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\"],\n 9: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#d9d9d9\"],\n 10: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#d9d9d9\", \"#bc80bd\"],\n 11: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#d9d9d9\", \"#bc80bd\", \"#ccebc5\"],\n 12: [\"#8dd3c7\", \"#ffffb3\", \"#bebada\", \"#fb8072\", \"#80b1d3\", \"#fdb462\", \"#b3de69\", \"#fccde5\", \"#d9d9d9\", \"#bc80bd\", \"#ccebc5\", \"#ffed6f\"]\n }\n};","import {\n collection,\n deleteDoc,\n doc,\n getDoc,\n getDocs,\n getFirestore,\n query,\n setDoc,\n where\n} from \"firebase/firestore\";\nimport axios from \"axios\";\nimport config from \"../../../config\";\nimport { firebaseApp } from \"../../../firebase-app\";\nimport { isUndefined, omitBy, omit } from \"lodash-es\";\nimport { MasterProposal, MasterProposalEntity } from \"core\";\n\nconst db = getFirestore(firebaseApp);\nconst collectionId = \"masterProposals\";\n\nexport const MasterProposalRepo = {\n generateId: () => {\n return doc(collection(db, collectionId)).id;\n },\n\n getById: async (id: string) => {\n const ref = doc(collection(db, collectionId), id);\n\n try {\n const snap = await getDoc(ref);\n const data = snap.data() as MasterProposal;\n const entity: MasterProposalEntity = { ...data, id: ref.id };\n return entity;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n },\n\n /**\n * CompanyId or Email is required for filtering purposes.\n * CompanyId takes precendence.\n */\n getByRequestId: async (\n requestId: string,\n companyId?: string,\n email?: string\n ) => {\n const whereClauses = [];\n whereClauses.push(where(\"requestId\", \"==\", requestId));\n\n if (companyId) {\n whereClauses.push(where(\"companyId\", \"==\", companyId));\n } else if (email) {\n whereClauses.push(where(\"email\", \"==\", email));\n } else {\n throw new Error(\"Invalid Arguments: companyId or email is required.\");\n }\n\n try {\n const q = query(collection(db, collectionId), ...whereClauses);\n const snap = await getDocs(q);\n if (snap.docs.length === 0) {\n return undefined;\n }\n\n if (snap.docs.length > 1) {\n console.warn(\"Invalid state, taking first.\");\n }\n\n const doc = snap.docs[0];\n const data = doc.data() as MasterProposal;\n const entity: MasterProposalEntity = { ...data, id: doc.id };\n return entity;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n },\n\n getAll: async (companyId: string, estimateId?: string) => {\n const proposals: MasterProposalEntity[] = [];\n\n const whereClauses = [];\n whereClauses.push(where(\"companyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n try {\n const q = query(collection(db, collectionId), ...whereClauses);\n const snap = await getDocs(q);\n for (const doc of snap.docs) {\n const data = doc.data() as MasterProposal;\n proposals.push({ ...data, id: doc.id });\n }\n } catch (error) {\n console.error(error);\n }\n\n return proposals;\n },\n\n subscribe: (companyId: string, estimateId?: string) => {\n const whereClauses = [];\n whereClauses.push(where(\"companyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n const q = query(collection(db, collectionId), ...whereClauses);\n return q;\n },\n\n save: async (proposal: MasterProposalEntity) => {\n const id = proposal.id;\n const ref = doc(collection(db, collectionId), id);\n\n try {\n let doc = omitBy(proposal, isUndefined);\n doc = omit(doc, [\"id\"]);\n await setDoc(ref, doc);\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n },\n\n delete: async (proposal: MasterProposalEntity, token: string) => {\n const deleteFile = async (fileId: string) => {\n await axios.delete(config.endpoints.SMARTDRIVE + \"Files\", {\n headers: {\n Authorization: \"Bearer \" + token\n },\n params: {\n appId: config.keys.SMARTDRIVEAPPID,\n Id: fileId\n }\n });\n };\n\n const ref = doc(collection(db, collectionId), proposal.id);\n\n try {\n const promises = proposal.attachments.map(a => deleteFile(a.id));\n promises.push(deleteDoc(ref));\n await Promise.all(promises);\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n }\n};\n","import { useState, useEffect } from \"react\";\n\n// Our hook\nexport function useDebounce(value: T, delay: number) {\n // State and setters for debounced value\n const [debouncedValue, setDebouncedValue] = useState(value);\n\n useEffect(() => {\n // Set debouncedValue to value (passed in) after the specified delay\n const handler = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Return a cleanup function that will be called every time ...\n // ... useEffect is re-called. useEffect will only be re-called ...\n // ... if value changes (see the inputs array below).\n // This is how we prevent debouncedValue from changing if value is ...\n // ... changed within the delay period. Timeout gets cleared and restarted.\n // To put it in context, if the user is typing within our app's ...\n // ... search box, we don't want the debouncedValue to update until ...\n // ... they've stopped typing for more than 500ms.\n return () => {\n clearTimeout(handler);\n };\n }, [delay, value]); // ... need to be able to change that dynamically. // You could also add the \"delay\" var to inputs array if you ... // Only re-call effect if value changes\n\n return debouncedValue;\n}\n","import { useEffect } from \"react\";\n\nexport function useDebouncedEffect(\n fn: React.EffectCallback,\n deps: React.DependencyList | undefined,\n delay: number\n) {\n useEffect(() => {\n let destructor: ReturnType;\n\n const handler = setTimeout(() => {\n destructor = fn();\n }, delay);\n\n return () => {\n clearTimeout(handler);\n\n if (destructor?.call) {\n destructor();\n }\n };\n }, [delay, ...(deps ?? [])]);\n}\n","import axios, { AxiosInstance, AxiosPromise } from \"axios\";\nimport { JobCostTypeCostDto, JobDto } from \".\";\n\nexport default class HeavyJobApi {\n apiVersion = 1;\n baseUrl = `/api/v${this.apiVersion}`;\n instance: AxiosInstance;\n\n constructor(token: string) {\n const instance = axios.create({\n baseURL: this.baseUrl\n });\n\n // Set the AUTH token for any request\n instance.interceptors.request.use(config => {\n const auth = token ? `Bearer ${token}` : \"\";\n config.headers.common.Authorization = auth;\n return config;\n });\n\n instance.interceptors.response.use(\n response => response,\n error => {\n console.error(error);\n return Promise.reject(error);\n }\n );\n\n this.instance = instance;\n }\n\n getJobs = (businessUnitId: string): AxiosPromise => {\n return this.instance.get(`/businessUnits/${businessUnitId}/jobs`);\n };\n\n getJobCostTypeCosts = (\n businessUnitId: string,\n jobIds: string[] = []\n ): AxiosPromise => {\n const query = new URLSearchParams();\n\n jobIds.forEach(id => query.append(\"jobIds\", id));\n\n return this.instance.get(\n `/businessUnits/${businessUnitId}/jobs/metrics?${query.toString()}`\n );\n };\n}\n","import { ProjectDetailsReportRequestDto } from \"api/GeneratedClients/precon\";\nimport HeavyJobApi from \"api/HeavyJobApi\";\nimport RestApi from \"api/RestApi\";\nimport axios, { AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport { WithId } from \"core\";\nimport { strings } from \"localization\";\nimport { PreConId, getPreConIdField } from \"modules/schemas/selectors\";\nimport {\n call,\n debounce,\n delay,\n put,\n select,\n take,\n takeEvery,\n takeLatest\n} from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport { LinkedEstimate, trueUpCompletedProjectIdString } from \".\";\nimport { Project, ProjectValidationErrorDto } from \"../../api\";\nimport {\n apiSagaFactory,\n getSelectedBusinessUnitIdSaga,\n getTokenSaga\n} from \"../../api/api-saga-factory\";\nimport * as notify from \"../../core/components/notify\";\nimport { LOCAL_PROJECT_ID } from \"./components/NewProjectLink\";\nimport {\n StateSlice,\n UndoEstimateLinkingState,\n UndoEstimateLinkingStatus,\n actions,\n selectors\n} from \"./state\";\nimport {\n QuickPriceSheetCreateDto,\n QuickPriceSheetReadDto\n} from \"./components/quick-pricing/models/quick-price-sheet.model\";\n\nexport class ProjectsApi {\n instance: AxiosInstance;\n businessUnitId: string;\n\n constructor(accessToken: string, businessUnitId: string) {\n this.instance = axios.create();\n this.instance.interceptors.request.use(config => {\n config.headers.Authorization = `Bearer ${accessToken}`;\n return config;\n });\n this.businessUnitId = businessUnitId;\n }\n unlinkEstimateFromProject = (\n projectId: string,\n projectEstimateId: string\n ) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/projects/${projectId}/unlinkEstimateFromProject/${projectEstimateId}`;\n return this.instance.post(url);\n };\n\n unlinkEstimatesFromProject = (\n projectId: string,\n projectEstimateId: string[]\n ) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/projects/${projectId}/unlinkEstimatesFromProject`;\n return this.instance.post(url, projectEstimateId);\n };\n\n linkEstimatesToProject = (\n projectId: string,\n projectEstimates: LinkedEstimate[]\n ) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/projects/${projectId}/linkEstimatesToProject`;\n return this.instance.post(url, projectEstimates);\n };\n\n getLastPreConIdAndReserveNext = () => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/projects/getLastPreConIdAndReserveNextId`;\n return this.instance.get(url);\n };\n\n discardReservedPreConId = (preConId: string) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/projects/discardReservedPreConId/${preConId}`;\n return this.instance.post(url);\n };\n\n getLastPreConId = () => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/projects/lastPreConId`;\n return this.instance.get(url);\n };\n\n getProjectDetailsReport = (\n projectId: string,\n body: ProjectDetailsReportRequestDto\n ) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/reports/projects/${projectId}/projectDetails`;\n const options = {\n responseType: \"blob\",\n method: \"POST\",\n url: url,\n headers: {\n Accept: \"application/pdf\"\n },\n data: body\n } as AxiosRequestConfig;\n return this.instance.request(options);\n };\n}\n\nconst genericSagas = apiSagaFactory({\n isBusinessUnitApi: true,\n apiPath: \"/projects\",\n stateKey: \"projects\",\n onLoadSuccess: actions.loadProjects.success,\n onLoadFail: actions.loadProjects.failure,\n onLoadedAllRecords: actions.loadedAllRecords,\n onLoadedFirstPage: actions.loadedFirstPage\n});\n\nfunction* saveProject(\n action:\n | ActionType\n | ActionType\n) {\n const isNewProject = action.type === \"PROJECTS/SAVENEW_REQUEST\";\n const originalProject = action.payload.project as WithId;\n const setGoToProject = action.payload.setGoToProject;\n const resetForm = action.payload.resetForm;\n const post = isNewProject || !originalProject.id;\n const silent = action.payload.meta?.silent;\n const preConIdField = yield select(getPreConIdField);\n try {\n const api: RestApi = yield call(genericSagas.getApi);\n if (action.payload.project.fields[\"preconId\"])\n action.payload.project.fields[\n \"preconId\"\n ] = trueUpCompletedProjectIdString(\n action.payload.project.fields[\"preconId\"]\n );\n const data = yield call(\n [api, post ? api.create : api.update],\n action.payload.project\n );\n const project = data.data as WithId;\n yield put(actions.saveProject.success(project));\n yield put(actions.deleteLocallyCreatedProject(LOCAL_PROJECT_ID));\n if (resetForm) {\n resetForm({ values: project.fields });\n }\n if (!silent)\n originalProject.id\n ? notify.save(originalProject.fields.name)\n : notify.add(originalProject.fields.name);\n if (post && setGoToProject) {\n setGoToProject(project.id);\n }\n const warnings: {\n message: string;\n fieldName: string;\n warningValue: string;\n }[] = project.warnings ?? [];\n\n warnings.forEach(warning => {\n const key = warning.message as keyof typeof strings.projects.warnings.titles;\n const title =\n strings.projects.warnings.titles[key] ||\n strings.projects.warnings.titles.default;\n notify.warning(\n title,\n strings.formatString(\n //@ts-ignore\n strings.projects.warnings.messages[warning.message],\n warning.fieldName,\n warning.warningValue\n ) as string\n );\n });\n } catch (error) {\n console.error(error);\n yield put(actions.saveProject.failure({ error, project: originalProject }));\n try {\n if (error.response.status === 409) {\n notify.error(\n `${preConIdField[\"name\"]}: ${originalProject.fields?.[\"preconId\"]?.[\"completedString\"]} already exists.`\n );\n } else {\n const apiError = error.response.data\n .errors as ProjectValidationErrorDto[];\n const localizedErrorLookup = strings.import.errors\n .fieldsValidation as Record;\n const errorMessages = apiError.map(e => {\n const { message, fieldName, invalidValue } = e;\n const errorMessage = localizedErrorLookup[message];\n return strings.formatString(\n errorMessage,\n JSON.stringify(invalidValue),\n fieldName\n ) as string;\n });\n\n if (errorMessages && errorMessages.length && errorMessages.length > 0) {\n notify.error(\n `Error Saving ${originalProject.fields.name}`,\n errorMessages.join(\" \")\n );\n } else {\n notify.error(\n `Error Saving ${originalProject.fields.name}`,\n error.response.data.message\n );\n }\n }\n } catch {\n notify.error(`Error Saving ${originalProject.fields.name}`);\n }\n }\n}\n\nfunction* deleteProject(\n action: ActionType\n) {\n try {\n const api: RestApi = yield call(genericSagas.getApi);\n yield call([api, api.delete], action.payload);\n yield put(actions.deleteProject.success(action.payload));\n notify.remove(\"Project\");\n } catch (error) {\n console.error(error);\n yield put(actions.deleteProject.failure(error));\n }\n}\n\nfunction* deleteProjects(\n action: ActionType\n) {\n try {\n const api: RestApi = yield call(genericSagas.getApi);\n const response = yield call([api, api.deleteRange], action.payload);\n const data = response.data;\n yield put(actions.deleteProjects.success(data.success));\n if (data.success.length)\n notify.remove(`${response.data.success.length} Project(s)`);\n if (data.failed.length)\n notify.error(\n strings\n .formatString(strings.projects.errors.bulkDelete, data.failed.length)\n .toString()\n );\n } catch (error) {\n console.error(error);\n yield put(actions.deleteProjects.failure(error));\n notify.error(\n strings\n .formatString(strings.projects.errors.bulkDelete, action.payload.length)\n .toString()\n );\n }\n}\n\nfunction* linkEstimatesToProject(\n action:\n | ActionType\n | ActionType\n) {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const projectId = action.payload.projectId;\n const project = yield select(\n (state: StateSlice) => state.projects.workingCopy[projectId]\n );\n\n const projectEstimates = project.fields.estimates;\n const silent = action.payload.meta?.silent;\n const api = new ProjectsApi(token, businessUnitId);\n try {\n const response = yield call(\n api.linkEstimatesToProject,\n projectId,\n projectEstimates\n );\n const updatedProject: WithId = response.data;\n yield put(actions.linkEstimatesToProject.success(updatedProject));\n if (!silent) {\n notify.save(updatedProject.fields.name);\n }\n } catch (error) {\n console.error(error);\n yield put(\n actions.linkEstimatesToProject.failure({ error, projectId: projectId })\n );\n notify.error(`Error linking estimates to project ${project.fields.name}`);\n }\n}\nfunction* unlinkEstimateFromProject(\n action: ActionType\n) {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const projectId = action.payload.projectId;\n const estimateId = action.payload.estimateId;\n const projectName = action.payload.projectName;\n\n const estimate = yield select(\n (state: StateSlice) => state.estimates.original[estimateId]\n );\n\n const silent = action.payload.meta?.silent;\n const api = new ProjectsApi(token, businessUnitId);\n try {\n const response = yield call(\n api.unlinkEstimateFromProject,\n projectId,\n estimateId\n );\n const updatedProject: WithId = response.data;\n yield put(actions.unlinkEstimateFromProject.success(updatedProject));\n if (!silent) {\n notify.success(\n `${projectName} Saved! - ${estimate.values.code} estimate unlinked successfully`\n );\n }\n } catch (error) {\n console.error(error);\n yield put(\n actions.unlinkEstimateFromProject.failure({ error, projectId: projectId })\n );\n notify.error(`Failed to unlink ${estimate.values.code} estimate`);\n }\n}\n\nfunction* waitForUndoState(...statuses: UndoEstimateLinkingStatus[]) {\n while (true) {\n const undoState: UndoEstimateLinkingState = yield select(\n selectors.getUndoEstimatesLinkingState\n );\n\n if (undoState.status && statuses.includes(undoState.status)) {\n return undoState;\n }\n\n yield take(\"*\");\n }\n}\nfunction* undoEstimatesLinking(\n action: ActionType\n) {\n let undoState: UndoEstimateLinkingState = yield select(\n selectors.getUndoEstimatesLinkingState\n );\n\n const allowedStatuses = [\n UndoEstimateLinkingStatus.Ready,\n UndoEstimateLinkingStatus.OptimisticallyReady,\n UndoEstimateLinkingStatus.Fails\n ];\n if (!undoState.status || !allowedStatuses.includes(undoState.status)) {\n return;\n } else if (\n undoState.status === UndoEstimateLinkingStatus.OptimisticallyReady\n ) {\n undoState = yield waitForUndoState(\n UndoEstimateLinkingStatus.Ready,\n UndoEstimateLinkingStatus.Fails\n );\n }\n\n if (undoState.projectId && undoState.linkedEstimatesIds?.length) {\n yield put(\n actions.unlinkEstimatesFromProject.request({\n projectId: undoState.projectId,\n estimateIds: undoState.linkedEstimatesIds,\n meta: {\n errorNotification:\n strings.projects.estimateMapping.errors\n .errorDuringUndoLinkingNotification\n }\n })\n );\n }\n}\n\nfunction* unlinkEstamesFromProject(projectId: string, estimateIds: string[]) {\n const token = yield* getTokenSaga();\n const businessUnitId = yield* getSelectedBusinessUnitIdSaga();\n let error;\n const api = new ProjectsApi(token, businessUnitId);\n const maxRetryCount = 5;\n for (let retryCount = 0; retryCount < maxRetryCount; retryCount++) {\n try {\n const apiResponse = yield call(\n api.unlinkEstimatesFromProject,\n projectId,\n estimateIds\n );\n\n return apiResponse.data as WithId;\n } catch (err) {\n error = err;\n if (retryCount < maxRetryCount - 1) {\n yield delay(300);\n }\n }\n }\n\n throw error;\n}\n\nfunction* unlinkEstimatesFromProject(\n action: ActionType\n) {\n const projectId = action.payload.projectId;\n const estimateIds = action.payload.estimateIds;\n\n try {\n const updatedProject = yield* unlinkEstamesFromProject(\n projectId,\n estimateIds\n );\n\n yield put(actions.unlinkEstimatesFromProject.success(updatedProject));\n } catch (error) {\n console.error(error);\n yield put(\n actions.unlinkEstimatesFromProject.failure({\n error: error as Error,\n projectId: projectId\n })\n );\n if (action.payload.meta?.errorNotification) {\n notify.error(action.payload.meta?.errorNotification);\n }\n }\n}\n\nfunction* loadHJJobs() {\n try {\n const token = yield call(getTokenSaga);\n const selectedBUId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new HeavyJobApi(token);\n const response = yield call(api.getJobs, selectedBUId);\n yield put(actions.loadHJJobs.success(response.data));\n } catch (error) {\n console.error(error);\n yield put(actions.loadHJJobs.failure(error));\n }\n}\n\nfunction* loadHJJobCostTypeCostsWithRetry(jobIds?: string[]) {\n const token = yield* getTokenSaga();\n const businessUnitId = yield* getSelectedBusinessUnitIdSaga();\n let error;\n const api = new HeavyJobApi(token);\n const maxRetryCount = 5;\n for (let retryCount = 0; retryCount < maxRetryCount; retryCount++) {\n try {\n const response = yield call(\n api.getJobCostTypeCosts,\n businessUnitId,\n jobIds\n );\n\n return response.data;\n } catch (err) {\n error = err;\n if (retryCount < maxRetryCount - 1) {\n yield delay(300 * (3 ^ retryCount));\n }\n }\n }\n\n throw error;\n}\n\nfunction* loadHJJobCostTypeCosts(\n action: ActionType\n) {\n try {\n const data = yield* loadHJJobCostTypeCostsWithRetry(action.payload.jobIds);\n\n yield put(actions.loadHJJobCostTypeCosts.success(data));\n } catch (error) {\n console.error(error);\n yield put(actions.loadHJJobCostTypeCosts.failure(error));\n }\n}\n\nexport const sagas = [\n takeLatest(getType(actions.loadProjects.request), genericSagas.load),\n takeEvery(getType(actions.saveProject.request), saveProject),\n takeEvery(getType(actions.saveNewProject.request), saveProject),\n takeEvery(getType(actions.deleteProject.request), deleteProject),\n takeEvery(getType(actions.deleteProjects.request), deleteProjects),\n takeEvery(\n getType(actions.linkEstimateToProject.request),\n linkEstimatesToProject\n ),\n takeEvery(\n getType(actions.linkEstimatesToProject.request),\n linkEstimatesToProject\n ),\n takeEvery(\n getType(actions.unlinkEstimateFromProject.request),\n unlinkEstimateFromProject\n ),\n takeEvery(\n getType(actions.unlinkEstimatesFromProject.request),\n unlinkEstimatesFromProject\n ),\n takeEvery(getType(actions.loadHJJobs.request), loadHJJobs),\n debounce(500, actions.undoEstimatesLinking, undoEstimatesLinking),\n takeEvery(\n getType(actions.loadHJJobCostTypeCosts.request),\n loadHJJobCostTypeCosts\n )\n];\n","export enum MessageStatus {\n Draft,\n Sent\n}\n\nexport enum QuoteOrigin {\n Sub,\n GC\n}\n\nexport enum QuoteTotalType {\n QuoteAmount,\n PluggedAmount,\n Adjustments\n}\n\nexport enum AuthenticationMethod {\n None,\n OneClickLink,\n HcssCredentials\n}\n\nexport enum VendorProposalStatus {\n Sent,\n Received,\n Responded\n}\n\nexport enum VendorSolicitationStatus {\n SentToSub,\n SubAccepted,\n SubRejected,\n SentToGC,\n GCApproved,\n GCIgnored,\n GCManuallyEntered,\n SyncedToHeavyBid\n}\n\nexport type SolicitationDashboardFilter = VendorSolicitationStatus | \"draft\";\n\nexport enum VendorSolicitationFilter {\n All,\n New,\n Approved,\n Rejected,\n Pending\n}\n\nexport enum QuoteAdjustmentType {\n Dollar,\n Percent\n}\n\nexport enum MessageType {\n Initial = 0,\n Addendum = 1,\n FollowUp = 2,\n Response = 3\n}\n\nexport enum CommunicationAction {\n SentInitialSolicitationInvite,\n SentFollowupSolicitationInvite,\n SentAddendumSolicitationInvite,\n SubAcceptedInvite,\n SubRejectedInvite,\n SubSubmittedPrices,\n GCReviewedPrices,\n GCRejectedPrices,\n MadePhoneCall,\n ReceivedPhoneCall,\n SentEmail,\n ReceivedEmail,\n SentFax,\n ReceivedFax,\n SentMail,\n ReceivedMail,\n InPersonMeeting,\n GCEnteredPricesOnSubsBehalf,\n GCReconsideredPrices,\n GCManuallyEnteredPrices,\n GCQueuedForSync,\n GCReconsideredManuallyEnteredPrices\n}\n\nexport enum ExpandableContentStatus {\n expanded = \"expanded\",\n expanding = \"expanding\",\n collapsed = \"collapsed\",\n collapsing = \"collapsing\"\n}\n\nexport enum UserType {\n HcssSubscription,\n Subcontractor,\n Guest\n}\n\nexport enum SharedResourceType {\n VendorSolicitation,\n VendorProposal\n}\n\nexport enum DataSyncPreferences {\n Neither = \"Neither\",\n ProjectTracking = \"Project Tracking\",\n HeavyBid = \"HeavyBid\"\n}\n\nexport enum FeatureFlag {\n LinkToHeavyJob = \"LinkToHeavyJob\",\n ManagedByCompanyAdminField = \"ManagedByCompanyAdminFields\",\n TableField = \"TableField\",\n LanguageSelector = \"LanguageSelector\",\n FrontEndEmailSubscription = \"FrontEndEmailSubscription\",\n HeavyBidCodeColumn = \"HeavyBidCodeColumn\",\n NewQuoteManagement = \"NewQuoteManagement\",\n TakeoffsField = \"TakeoffsField\",\n QuickPricingPhase1 = \"QuickPricingPhase1\",\n QuickPricingPhase2 = \"QuickPricingPhase2\"\n}\n\nexport enum LinkedHeavyJobColumnName {\n Description = \"description\",\n Budgeted = \"cost.budgeted\",\n Expected = \"cost.expected\",\n Actual = \"cost.actual\",\n Variance = \"cost.variance\"\n}\n\nexport enum ContactImportName {\n CompanyCode = \"companyCode\",\n CompanyName = \"companyName\",\n CompanyWebsite = \"companyWebsite\",\n CompanyType = \"companyType\",\n CompanyNotes = \"companyNotes\",\n FirstName = \"firstName\",\n LastName = \"lastName\",\n Title = \"title\",\n Email = \"email\",\n CellNumber = \"cellNumber\",\n PhoneNumber = \"phoneNumber\",\n Notes = \"notes\",\n Nickname = \"nickname\",\n AddressLine1 = \"addressline1\",\n AddressLine2 = \"addressline2\",\n City = \"city\",\n StateProvince = \"stateProvince\",\n PostalCode = \"postalCode\",\n CountryRegion = \"countryRegion\",\n VendorLocationId = \"vendorLocationId\"\n}\n\nexport enum ContactListColumnName {\n FirstName = \"firstName\",\n LastName = \"lastName\",\n Title = \"title\",\n EmailAddress = \"emailAddress\",\n CellPhoneNumber = \"cellPhoneNumber\",\n PhoneNumber = \"phoneNumber\",\n IsMainContact = \"isMainContact\",\n Location = \"location\",\n Scope = \"scope\",\n Notes = \"note\"\n}\n\nexport enum ExportFileType {\n Csv = \"CSV\",\n Excel = \"EXCEL\"\n}\n\nexport enum NylasSyncState {\n InvalidCredentials = \"invalid-credentials\",\n SyncError = \"sync-error\",\n Stopped = \"stopped\",\n Exception = \"exception\",\n Invalid = \"invalid\"\n}\n","export const paths = {\n base: \"/projects\",\n calendar: \"/projects/calendar\",\n new: \"/projects/create\",\n duplicate: \"/projects/copy/:id\",\n detail: \"/projects/:id\",\n setup: \"/projects/setup\",\n setupHBIntegration: \"/projects/setup/heavybid\",\n subscriptionSetup: \"/projects/setup/subscription\",\n import: \"/projects/import\",\n importProjects: \"/projects/import-projects\",\n importBidResults: \"/projects/import-bid-results\",\n estimateMapping: \"/projects/estimate-mapping\",\n proposalCreate: \"/projects/:id/proposals/create\",\n proposal: \"/projects/proposals/:proposalId\",\n quickPrice: {\n payItemLibrary: \"/projects/:id/quick-price/pay-item-library\",\n estimateHistory: \"/projects/:id/quick-price/estimate-history\",\n payItemLibraryDetail:\n \"/projects/:id/quick-price/pay-item-library/:quickPriceId\",\n estimateHistoryDetail:\n \"/projects/:id/quick-price/estimate-history/:quickPriceId\"\n },\n payItemLibrary: \"/projects/setup/pay-item-library\"\n};\n","import React, { MouseEventHandler, ReactNode } from \"react\";\nimport { error } from \"core\";\nimport { Button, Icon } from \"hcss-components\";\nimport { strings } from \"localization\";\n\nexport function enableSandboxMode() {\n window.localStorage.setItem(\"sandbox\", \"true\");\n window.location.reload();\n}\n\nexport function disableSandbox() {\n window.localStorage.removeItem(\"sandbox\");\n window.location.reload();\n}\n\nexport function resetSandbox() {\n window.localStorage.removeItem(\"sandbox-data\");\n window.localStorage.removeItem(\"sandbox-config\");\n window.localStorage.removeItem(\n \"37682b0b-f27f-42b9-83e4-1b086a72716f-projectdetails-sections-collapsed\"\n );\n window.location.reload();\n}\n\nexport function disableCallbackInSandbox(cb: () => void) {\n const sandboxEnabled = isSandboxEnabled();\n if (sandboxEnabled) {\n return () => {\n error(\"Feature disabled\");\n };\n } else return cb;\n}\n\nexport const isSandboxEnabled = () => {\n const isSandboxEnabled = localStorage.getItem(\"sandbox\");\n return isSandboxEnabled === \"true\";\n};\n\nexport interface SandboxGuardProps {\n children: ReactNode;\n}\n\nexport const DisableInSandbox = ({ children }: SandboxGuardProps) => {\n const sandboxEnabled = isSandboxEnabled();\n return sandboxEnabled ? (\n
\n {children}\n
\n ) : (\n <>{children}\n );\n};\n\nexport const EnableInSandbox = ({ children }: SandboxGuardProps) => {\n const sandboxEnabled = isSandboxEnabled();\n return sandboxEnabled ? <>{children} : null;\n};\n\nexport const HideInSandbox = ({ children }: SandboxGuardProps) => {\n const sandboxEnabled = isSandboxEnabled();\n return sandboxEnabled ? null : <>{children};\n};\n\nconst onClickCapture: MouseEventHandler = e => {\n e.preventDefault();\n e.stopPropagation();\n error(\"Feature disabled\");\n};\n\nexport const DisableSandboxButton = () => {\n return (\n \n \n \n );\n};\nexport const EnableSandboxButton = () => {\n return (\n \n \n \n );\n};\nexport const ResetSandboxButton = () => {\n return (\n \n \n {\" \"}\n {strings.errorBoundary.sandbox.resetButton}\n \n \n );\n};\n\nexport const SandboxToggleButton = () => {\n return (\n <>\n \n \n \n );\n};\n","import React, { SetStateAction, Dispatch } from \"react\";\nimport { Modal, Button, notify, Icon } from \"hcss-components\";\nimport { FormGroup, TextField } from \"@mui/material\";\nimport { Form, Formik, FormikProps } from \"formik\";\nimport { useHistory } from \"react-router-dom\";\nimport {\n actions as contactsActions,\n selectors as contactsSelectors\n} from \"modules/contacts\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n Address,\n CommunicationMethod,\n IAddress,\n IVendorDtoV1Response,\n VendorDtoV1Response\n} from \"api/GeneratedClients/ContactsClient\";\nimport * as Yup from \"yup\";\nimport styled from \"styled-components\";\nimport MuiGrid from \"@mui/material/Grid\";\nimport { strings } from \"localization\";\n\nexport enum CreateCompanyMode {\n Stay,\n Redirect\n}\n\ninterface HandlerProps {\n code: string;\n companyName: string;\n formik: FormikProps<{ code: string; companyName: string }>;\n}\nexport const AddVendorModal = () => {\n const history = useHistory();\n const dispatch = useDispatch();\n const showModal = useSelector(contactsSelectors.getShowModal);\n const vendorCodeList = useSelector(contactsSelectors.getVendorCodeList);\n\n const onCancelHandler = () => {\n dispatch(contactsActions.setShowModal(false));\n };\n const onSaveHandler = ({ code, companyName, formik }: HandlerProps) => {\n code = code ? code.toUpperCase() : code;\n formik\n .validateForm(formik.values)\n .then(values => {\n const isNoValidationErrors = Object.keys(values).length === 0;\n if (isNoValidationErrors) {\n dispatch(\n contactsActions.createVendor.request({\n vendor: initializeVendor(code, companyName),\n history: history,\n mode: CreateCompanyMode.Stay\n })\n );\n }\n })\n .catch(e => console.log(e));\n };\n\n const onSaveAndEditHandler = ({\n code,\n companyName,\n formik\n }: HandlerProps) => {\n code = code ? code.toUpperCase() : code;\n formik\n .validateForm(formik.values)\n .then(values => {\n const isNoValidationErrors = Object.keys(values).length === 0;\n if (isNoValidationErrors) {\n dispatch(\n contactsActions.createVendor.request({\n vendor: initializeVendor(code, companyName),\n history: history,\n mode: CreateCompanyMode.Redirect\n })\n );\n }\n })\n .catch(e => console.log(e));\n };\n\n const YupValidationSchema = Yup.object({\n code: Yup.string()\n .required(\"Code is required\")\n .test(\n \"duplicate-code-not-allowed\",\n \"Duplicate Code is not allowed\",\n value => {\n value = value ? value.toUpperCase() : value;\n return !vendorCodeList.includes(value);\n }\n )\n });\n\n return (\n {}}\n show={showModal}\n >\n {}}\n >\n {formik => (\n
\n \n
\n \n \n \n {strings.contactManagement.addCompanyModal.title}\n \n \n \n {\n onCancelHandler();\n }}\n >\n ×\n \n \n \n
\n \n \n \n \n \n \n \n \n \n onCancelHandler()}\n >\n \n {strings.contactManagement.addCompanyModal.cancel}\n \n \n \n onSaveHandler({ ...formik.values, formik })}\n >\n \n {strings.contactManagement.addCompanyModal.save}\n \n \n onSaveAndEditHandler({ ...formik.values, formik })\n }\n >\n \n {strings.contactManagement.addCompanyModal.saveAnd}\n \n {strings.contactManagement.addCompanyModal.Edit}\n \n \n \n \n \n )}\n \n \n );\n};\n\nconst initializeVendor = (code: string, companyName: string) => {\n const vendor: IVendorDtoV1Response = {\n id: \"\",\n code: code,\n name: companyName,\n type: undefined,\n primaryAddress: initializeAddress(),\n alternateAddress: initializeAddress(),\n phoneNumber: \"\",\n faxNumber: \"\",\n webAddress: \"\",\n region: undefined,\n communicationMethod: CommunicationMethod.None,\n isBonded: false,\n bondRate: 0,\n note: \"\",\n minorityStatuses: [],\n products: [],\n contacts: []\n };\n return new VendorDtoV1Response(vendor);\n};\n\nconst initializeAddress = () => {\n const address: IAddress = {\n addressLine1: \"\",\n addressLine2: \"\",\n building: \"\",\n city: \"\",\n stateProvince: \"\",\n countryRegion: \"\",\n postalCode: \"\"\n };\n return new Address(address);\n};\nconst TimesButton = styled.button`\n button.close {\n color: \"Black\")};\n opacity: 0.4;\n font-size: 28px;\n :hover {\n opacity: 0.9;\n }\n}\n`;\n","/* tslint:disable */\n/* eslint-disable */\n//----------------------\n// \n// Generated using the NSwag toolchain v13.0.6.0 (NJsonSchema v10.0.23.0 (Newtonsoft.Json v11.0.0.0)) (http://NSwag.org)\n// \n//----------------------\n// ReSharper disable InconsistentNaming\n\nimport { EstimateIntegrationDto } from \"./GeneratedClients/insights\";\n\nexport class AuthClient {\n constructor(private accessToken: string) { }\n\n transformHttpRequestOptions(options: RequestInit): Promise {\n if (options.headers) {\n options.headers = new Headers(options.headers);\n options.headers.set(\"Authorization\", \"Bearer \" + this.accessToken);\n }\n\n return Promise.resolve(options);\n }\n}\n\nexport class PreConClientBase {\n constructor(private authClient: AuthClient) { }\n transformOptions(options: RequestInit): Promise {\n return this.authClient\n ? this.authClient.transformHttpRequestOptions(options)\n : Promise.resolve(options);\n }\n}\n\nexport interface SchemaField {\n id: string;\n name: string;\n type: SchemaFieldType;\n config: { [key: string]: any };\n readOnly: boolean;\n required: boolean;\n adminOnly?: boolean;\n companyAdminOnly?: boolean;\n standard: boolean;\n protected: boolean;\n hiddenInTable: boolean;\n hiddenInForm: boolean;\n hiddenInEdit?: boolean;\n lookup: boolean;\n isLockable: boolean;\n characterLengthLimited: boolean;\n useDefaultValue: boolean;\n defaultValue?: any;\n}\n\nexport type TableFieldRowSchema = Pick\n\nexport enum SchemaFieldType {\n ShortText = 0,\n LongText = 1,\n Date = 2,\n List = 3,\n States = 4,\n Custom = 5,\n Boolean = 6,\n Number = 7,\n Currency = 8,\n DateTime = 9,\n Estimates = 10,\n BidResults = 11,\n Links = 12,\n PhoneNumber = 13,\n Checklist = 14,\n Location = 15,\n MultiSelectList = 16,\n PreConId = 17,\n Company = 18,\n Contact = 19,\n HJJob = 20,\n Table = 21,\n Calculated = 22,\n Takeoffs = 23,\n QuickPriceSheet = 24\n}\n\nexport interface HeavyBidProjectResponse {\n projects?: any[] | undefined;\n continuationToken?: string | undefined;\n}\n\nexport interface QueryOptions {\n orderBy?: UriOrderBy | undefined;\n continuationToken?: string | undefined;\n top?: number;\n filters?: string | undefined;\n search?: DynamicSearchOptions | undefined;\n}\n\nexport interface UriOrderBy {\n fieldId?: string | undefined;\n ascending?: boolean;\n}\n\nexport interface DynamicSearchOptions {\n fields?: string | undefined;\n value?: string | undefined;\n}\n\nexport interface SignalRChanges {\n companyId: string;\n changes: { [key: string]: string[] };\n}\n\nexport interface PermissionsDto {\n userPermissions: UserPermissionsDto[];\n companyPermissions: PreConPermissions;\n}\n\nexport interface UserPermissionsDto {\n id: string;\n firstName?: string | undefined;\n lastName?: string | undefined;\n username?: string | undefined;\n userRole?: string | undefined;\n isAddEdit: boolean;\n isContactAddEdit: boolean;\n isHeavyBidNumbers: boolean;\n isAdmin: boolean;\n hasEstimateInsights: boolean;\n preConUser?: boolean;\n credentialsAdmin?: boolean;\n}\n\nexport interface PreConPermissions {\n admin: boolean;\n write: boolean;\n contactWrite?: boolean;\n heavyBidNumbers: boolean;\n estimateInsights: boolean;\n}\n\nexport interface BaseEntity {\n id?: string | undefined;\n lastModified?: Date;\n dateCreated?: Date;\n lastModifiedByUserId?: string | undefined;\n lastModifiedByClientId?: string;\n lastModifiedBySystemUser?: boolean;\n deleted?: boolean;\n archived?: boolean;\n}\n\nexport interface CompanyEntity extends BaseEntity {\n companyId?: string | undefined;\n cosmosEntityName?: string | undefined;\n}\n\nexport interface UserEntity extends CompanyEntity {\n userId?: string | undefined;\n}\n\nexport interface Calendar extends UserEntity {\n viewId?: string | undefined;\n lastPing?: Date | undefined;\n token?: string | undefined;\n accountId?: string | undefined;\n calendarId?: string | undefined;\n isNylas?: boolean | undefined;\n}\n\nexport interface CosmosPagedResultsOfCalendar {\n results?: Calendar[] | undefined;\n nextPageToken?: string | undefined;\n hasNextPage?: boolean;\n}\n\nexport interface FeatureFlag {\n key: string;\n active: boolean;\n}\n\nexport interface ConfigurationSettings {\n featureFlags: FeatureFlag[];\n}\n\nexport interface CosmosPagedResultsOfEstimate {\n results?: EstimateEntity[] | undefined;\n nextPageToken?: string | undefined;\n hasNextPage?: boolean;\n}\n\nexport interface EstimateEntity extends CompanyEntity {\n values: EstimateIntegrationDto;\n}\n\nexport interface UpdateEstimateDto {\n estimateId: string;\n companyId: string;\n}\n\nexport interface OAuthInfoModel {\n email?: string | undefined;\n needsRefresh: boolean;\n}\n\nexport interface SendEmailViaModel {\n sendVia: SendEmailVia;\n}\n\nexport enum SendEmailVia {\n Mailgun = \"Mailgun\",\n SMTP = \"SMTP\",\n OAuth = \"OAuth\"\n}\n\nexport interface SettingsModel {\n businessUnitId?: string;\n info?: SMTPInfoModel | undefined;\n}\n\nexport interface SMTPInfoModel {\n smtpServer?: string | undefined;\n smtpPort: number;\n smtpUser?: string | undefined;\n smtpPassword?: string | undefined;\n}\n\nexport interface FieldMetadata {\n isLocked: boolean;\n filterValues: string[];\n}\nexport interface Project extends CompanyEntity {\n /**\n * Optional - The location Id (HeavyJob) that linked to the project.\n */\n locationId?: string | undefined;\n fields: { [key: string]: any };\n fieldsMetadata?: { [key: string]: FieldMetadata };\n warnings?: any[];\n}\n\nexport interface CosmosPagedResultsOfProject {\n results?: Project[] | undefined;\n nextPageToken?: string | undefined;\n hasNextPage?: boolean;\n}\n\nexport interface Schema extends CompanyEntity {\n fields: { [key: string]: SchemaField };\n sections: { [key: string]: SchemaSection };\n orderedSections: string[];\n schemaName: string;\n dataSyncPreference?: string;\n}\n\nexport interface SchemaSection {\n id: string;\n name: string;\n fields: string[];\n}\n\nexport interface CosmosPagedResultsOfSchema {\n results?: Schema[] | undefined;\n nextPageToken?: string | undefined;\n hasNextPage?: boolean;\n}\n\nexport interface SolicitationPreviewModel {\n mapping?: FolderVendorMap[] | undefined;\n}\n\nexport interface FolderVendorMap {\n folderId?: string | undefined;\n vendorCodes?: string[] | undefined;\n}\n\nexport interface SendSolicitationModel {\n businessUnitId: string;\n method: SendEmailVia2;\n subject: string;\n vendorSolicitationIds: string[];\n}\n\nexport enum SendEmailVia2 {\n Mailgun = 0,\n SMTP = 1,\n OAuth = 2\n}\n\nexport interface CurrentUser {\n companyId: string;\n businessUnitId: string;\n userId: string;\n businessUnitName: string;\n firstName: string;\n lastName: string;\n role: string;\n companyName: string;\n email: string;\n accessToken: string;\n firebaseAccessToken: string;\n preConEnabledForCompany: boolean;\n preConEnabledForUser: boolean;\n isAdmin: boolean;\n isAddEdit: boolean;\n}\n\nexport interface UserPreferences extends UserEntity {\n tablePreferences?: { [key: string]: UserTablePreferences } | undefined;\n tutorials?: Tutorials | undefined;\n region?: string | undefined;\n}\n\nexport interface UserTablePreferences {\n id: string;\n selectedView: string;\n}\n\nexport interface Tutorials {\n projectsList?: boolean;\n}\n\nexport interface View extends CompanyEntity {\n id: string;\n schemaId: string;\n viewSchemaId?: string;\n viewType?: ViewType;\n name: string;\n grouping: SchemaViewGrouping[];\n subGroupBy?: Record[];\n columnSummaries: ColumnSummary[];\n sorting: SchemaViewSorting[];\n hiddenColumns: string[];\n displayedColumns: string[];\n ordering: string[];\n filters: { [key: string]: SchemaViewFilter };\n coloringColumnName?: string | undefined;\n mapActive?: boolean;\n satelliteMapStyleActive?: boolean;\n listActive?: boolean;\n calendarActive?: boolean;\n chartsActive?: boolean;\n chartConfigs: { [key: string]: any }[];\n chartConfig: { [key: string]: any };\n layout?: { [key: string]: any };\n calendarConfig?: { [key: string]: any };\n createdByUserId?: string;\n isPublic: boolean;\n}\n\nexport enum ViewType {\n Basic,\n OldBidResults,\n NewBidResults\n}\n\nexport interface ColumnSummary {\n columnName: string;\n type: SummaryType;\n}\n\nenum SummaryType {\n Sum = \"sumDefaultZero\",\n Avg = \"avgNoNulls\",\n Count = \"count\"\n}\n\nexport interface SchemaViewGrouping {\n columnName: string;\n}\n\nexport interface SchemaViewSorting {\n columnName: string;\n direction: string;\n}\n\nexport interface SchemaViewFilter {\n columnName: string;\n filterOperation?: FilterOperation;\n value?: any | undefined;\n config?: any;\n}\n\nexport enum FilterOperation {\n Contains = 0,\n GreaterThan = 1,\n GreaterThanOrEqualTo = 2,\n LessThan = 3,\n LessThanOrEqualTo = 4,\n Between = 5,\n StartsWith = 6,\n EndsWith = 7,\n Any = 8,\n None = 9,\n Equals = 10,\n NotEquals = 11\n}\n\nexport interface CosmosPagedResultsOfView {\n results?: View[] | undefined;\n nextPageToken?: string | undefined;\n hasNextPage?: boolean;\n}\n\nexport interface FileResponse {\n data: Blob;\n status: number;\n fileName?: string;\n headers?: { [name: string]: any };\n}\n\nexport interface LocationDto {\n id: string;\n description: string;\n associatedProducts: string;\n businessUnitId: string;\n code: string;\n locationTypeId: number;\n isDeleted: boolean;\n}\n\nexport interface JobDto {\n id: string;\n code: string;\n description: string;\n businessUnitId: string;\n status: string;\n latitude: number | null;\n longitude: number | null;\n startofpayweek: string;\n truckingCostTypeId: string;\n jobNote: string;\n relatedEstimateCodes: string[];\n address1: string;\n address2: string;\n city: string;\n state: string;\n zip: string;\n country: string;\n}\n\nexport interface Amounts {\n actual: number\n expected: number;\n budgeted: number;\n variance: number;\n}\n\nexport interface JobCostType {\n id: string;\n type: string;\n description: string;\n cost: Amounts;\n hours: Amounts;\n}\n\nexport interface JobCostTypeCostDto {\n jobId: string;\n jobCode: string;\n jobStatus: string;\n costTypes: JobCostType[];\n}\n\nexport interface ProjectValidationErrorDto {\n fieldId: string;\n fieldName: string;\n message: string;\n invalidValue: unknown;\n}\n\nexport interface ProjectValidationWarningDto {\n fieldId: string;\n message: string;\n warningValue: unknown;\n}\n\nexport interface ProjectValidationResultDto {\n entry: Project;\n errors: ProjectValidationErrorDto[];\n warnings: ProjectValidationWarningDto[];\n index: number;\n}\n","import {\n BusinessUnitReadDto,\n CredentialsUserDto,\n EmailSubscriptionTemplatesDto\n} from \"api/GeneratedClients/precon\";\nimport produce from \"immer\";\nimport {\n ActionType,\n createAction,\n createAsyncAction,\n getType\n} from \"typesafe-actions\";\nimport {\n ValidationResult,\n validateSubscription\n} from \"./common/validation-helper\";\n\nexport interface Subscription {\n id: string;\n name?: string;\n description?: string;\n emailSubject?: string;\n status: SubscriptionStatus;\n viewIds: string[];\n recipientIds: string[];\n settings: SubscriptionSettings;\n}\n\nexport enum SubscriptionStatus {\n PENDING = 0,\n ACTIVE,\n PAUSED,\n STOPPED\n}\n\nexport type DayOfWeek =\n | \"sunday\"\n | \"monday\"\n | \"tuesday\"\n | \"wednesday\"\n | \"thursday\"\n | \"friday\"\n | \"saturday\";\nexport interface SubscriptionSettings {\n scheduledTimes: Partial>;\n timeZoneId: string;\n}\n\nexport const STATE_KEY = \"emailSubscriptions\";\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\nexport interface State {\n projectTemplates: EmailSubscriptionTemplatesDto;\n recipients: CredentialsUserDto[];\n businessUnits: BusinessUnitReadDto[];\n workingCopies: Subscription[];\n originals: Subscription[];\n isLoading: boolean;\n errors: string[];\n}\nexport type SubscriptionActions = ActionType;\n\nexport const actions = {\n // ASYNC ACTIONS\n loadDataForSubscriptionPage: createAsyncAction(\n \"SUBSCRIPTIONS/LOAD_DATA_REQUEST\",\n \"SUBSCRIPTIONS/LOAD_DATA_SUCCESS\",\n \"SUBSCRIPTIONS/LOAD_DATA_FAILURE\"\n )(),\n\n loadSubscriptions: createAsyncAction(\n \"SUBSCRIPTIONS/LOAD_REQUEST\",\n \"SUBSCRIPTIONS/LOAD_SUCCESS\",\n \"SUBSCRIPTIONS/LOAD_FAILURE\"\n )(),\n\n loadTemplates: createAsyncAction(\n \"SUBSCRIPTIONS/LOAD_PROJECT_TEMPLATES_REQUEST\",\n \"SUBSCRIPTIONS/LOAD_PROJECT_TEMPLATES_SUCCESS\",\n \"SUBSCRIPTIONS/LOAD_PROJECT_TEMPLATES_FAILURE\"\n )(),\n\n loadRecipients: createAsyncAction(\n \"SUBSCRIPTIONS/LOAD_RECIPIENTS_REQUEST\",\n \"SUBSCRIPTIONS/LOAD_RECIPIENTS_SUCCESS\",\n \"SUBSCRIPTIONS/LOAD_RECIPIENTS_FAILURE\"\n )(),\n\n loadBusinessUnits: createAsyncAction(\n \"SUBSCRIPTIONS/LOAD_BUSINESS_UNITS_REQUEST\",\n \"SUBSCRIPTIONS/LOAD_BUSINESS_UNITS_SUCCESS\",\n \"SUBSCRIPTIONS/LOAD_BUSINESS_UNITS_FAILURE\"\n )(),\n\n saveSubscription: createAsyncAction(\n \"SUBSCRIPTIONS/SAVE_REQUEST\",\n \"SUBSCRIPTIONS/SAVE_SUCCESS\",\n \"SUBSCRIPTIONS/SAVE_FAILURE\"\n )<\n {\n subscription: Subscription;\n setPristineSubscription: React.Dispatch<\n React.SetStateAction\n >;\n setValidationResult: React.Dispatch<\n React.SetStateAction\n >;\n isNewSubscription: boolean;\n },\n Subscription,\n { error: Error }\n >(),\n\n pauseSubscription: createAsyncAction(\n \"SUBSCRIPTIONS/PAUSE_REQUEST\",\n \"SUBSCRIPTIONS/PAUSE_SUCCESS\",\n \"SUBSCRIPTIONS/PAUSE_FAILURE\"\n )<\n {\n subscriptionId: string;\n },\n void,\n { error: Error }\n >(),\n\n resumeSubscription: createAsyncAction(\n \"SUBSCRIPTIONS/RESUME_REQUEST\",\n \"SUBSCRIPTIONS/RESUME_SUCCESS\",\n \"SUBSCRIPTIONS/RESUME_FAILURE\"\n )<\n {\n subscriptionId: string;\n },\n void,\n { error: Error }\n >(),\n\n deleteSubscription: createAsyncAction(\n \"SUBSCRIPTIONS/DELETE_REQUEST\",\n \"SUBSCRIPTIONS/DELETE_SUCCESS\",\n \"SUBSCRIPTIONS/DELETE_FAILURE\"\n )<\n { deletingSubscription: Subscription },\n { deletingId: string },\n { error: Error }\n >(),\n addNewSubscription: createAction(\"SUBSCRIPTIONS/ADD_NEW\", resolve => {\n return (newSubscription: Subscription) => resolve(newSubscription);\n }),\n updateSubscription: createAction(\"SUBSCRIPTIONS/UPDATE\", resolve => {\n return (\n newSubscription: Subscription,\n setValidationResult: React.Dispatch<\n React.SetStateAction\n >\n ) => resolve({ newSubscription, setValidationResult });\n }),\n removeSubscription: createAction(\"SUBSCRIPTIONS/REMOVE\", resolve => {\n return (deletingId: string) => resolve(deletingId);\n }),\n resetToOriginals: createAction(\n \"SUBSCRIPTIONS/RESET_TO_ORIGINALS\",\n resolve => {\n return () => resolve();\n }\n ),\n updateStatus: createAction(\"SUBSCRIPTIONS/UPDATE_STATUS\", resolve => {\n return (subscriptionId: string, status: SubscriptionStatus) =>\n resolve({ subscriptionId, status });\n })\n};\n\nconst initialState: State = {\n projectTemplates: {\n hiddenTemplates: [],\n visibleTemplates: []\n },\n recipients: [],\n businessUnits: [],\n workingCopies: [],\n originals: [],\n isLoading: false,\n errors: []\n};\n\nexport const reducer = (state = initialState, action: SubscriptionActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.loadSubscriptions.request):\n draft.isLoading = true;\n break;\n\n case getType(actions.loadDataForSubscriptionPage.failure):\n case getType(actions.loadSubscriptions.failure):\n case getType(actions.loadTemplates.failure):\n case getType(actions.loadRecipients.failure):\n case getType(actions.loadBusinessUnits.failure):\n case getType(actions.saveSubscription.failure):\n case getType(actions.deleteSubscription.failure):\n const { error } = action.payload;\n draft.isLoading = false;\n draft.errors.push(`Error: ${error}`);\n break;\n\n case getType(actions.loadSubscriptions.success):\n draft.workingCopies = action.payload;\n draft.originals = action.payload;\n draft.isLoading = false;\n break;\n\n case getType(actions.loadTemplates.success):\n draft.projectTemplates = action.payload;\n break;\n\n case getType(actions.loadRecipients.success):\n draft.recipients = action.payload;\n break;\n\n case getType(actions.loadBusinessUnits.success):\n draft.businessUnits = action.payload;\n break;\n\n case getType(actions.saveSubscription.success):\n const savedSub = action.payload;\n draft.workingCopies = draft.workingCopies.map(sub => {\n if (sub.id === savedSub.id) return savedSub;\n return sub;\n });\n draft.originals = draft.workingCopies;\n draft.isLoading = false;\n break;\n\n case getType(actions.deleteSubscription.success):\n const deletingId = action.payload.deletingId;\n draft.workingCopies = draft.workingCopies.filter(\n sub => sub.id !== deletingId\n );\n draft.originals = draft.originals.filter(sub => sub.id !== deletingId);\n break;\n\n case getType(actions.addNewSubscription):\n const newSub = action.payload;\n draft.workingCopies.unshift(newSub);\n break;\n\n case getType(actions.removeSubscription): {\n const deletingId = action.payload;\n draft.workingCopies = draft.workingCopies.filter(\n copy => copy.id !== deletingId\n );\n break;\n }\n\n case getType(actions.updateSubscription):\n const updatedSub = action.payload.newSubscription;\n const setValidationResult = action.payload.setValidationResult;\n draft.workingCopies = draft.workingCopies.map(sub => {\n const { isFieldValid, fieldErrorMessages } = validateSubscription(\n updatedSub,\n draft.workingCopies.filter(sub => sub.id !== updatedSub.id),\n state.recipients\n );\n setValidationResult({\n isFieldValid,\n fieldErrorMessages\n });\n if (sub.id === updatedSub.id) return updatedSub;\n return sub;\n });\n break;\n case getType(actions.resetToOriginals):\n draft.workingCopies = draft.originals;\n break;\n case getType(actions.updateStatus):\n draft.workingCopies = draft.workingCopies.map(sub => {\n if (sub.id === action.payload.subscriptionId)\n return { ...sub, status: action.payload.status };\n return sub;\n });\n break;\n }\n });\n};\n\nexport type SelectorState = StateSlice;\n\n// Selectors\nconst getProjectTemplates = ({ emailSubscriptions }: SelectorState) =>\n emailSubscriptions.projectTemplates;\nconst getRecipients = ({ emailSubscriptions }: SelectorState) =>\n emailSubscriptions.recipients;\nconst getBusinessUnits = ({ emailSubscriptions }: SelectorState) =>\n emailSubscriptions.businessUnits;\nconst getSubscriptions = ({ emailSubscriptions }: SelectorState) =>\n emailSubscriptions.workingCopies;\nconst getPristineSubscriptions = ({ emailSubscriptions }: SelectorState) =>\n emailSubscriptions.originals;\nconst getErrors = ({ emailSubscriptions }: SelectorState) =>\n emailSubscriptions.errors;\nconst getIsLoading = ({ emailSubscriptions }: SelectorState) =>\n emailSubscriptions.isLoading;\n\nexport const selectors = {\n getProjectTemplates,\n getRecipients,\n getBusinessUnits,\n getSubscriptions,\n getPristineSubscriptions,\n getErrors,\n getIsLoading\n};\n","import * as account from \"modules/account\";\nimport appconfig from \"config\";\nimport axios, { AxiosInstance } from \"axios\";\nimport {\n call,\n put,\n select,\n takeLatest,\n takeEvery,\n all\n} from \"redux-saga/effects\";\nimport { getType, ActionType } from \"typesafe-actions\";\nimport {\n actions,\n selectors,\n DatabasePartition,\n UtilizedActivityCodebookCode,\n UtilizedActivityCodebookCodeDetail,\n UnusedActivity,\n MissingActivity,\n SystemBackup\n} from \"./state\";\nimport {\n ActivityFormulaDto,\n ActivityTotal,\n Estimate,\n QuoteFolderDto,\n UniqueEstimateFilters\n} from \"api/GeneratedClients/insights\";\nimport { WithId, IJsonPatchDocument, patchDocument } from \"core\";\nimport {\n actions as schemaActions,\n selectors as schemaSelectors\n} from \"modules/schemas\";\nimport { Schema } from \"api\";\nimport { flatten, uniqBy } from \"lodash-es\";\nimport * as notify from \"../../core/components/notify\";\nimport { determineFilterKeyForLabelKey } from \"./utils\";\nimport { strings } from \"localization\";\nimport { GetDateValues } from \"./hooks/use-codebooks-daterange\";\n\n// We decided to go with this page size because when we have < 3000 estimates, loading sequentially with 500 estimate/call is faster than doing it in parallel.\n// We will load estimate in parallel (6 request at a time 500*6 = 3000) if the total estimate is > 3000.\nconst ESTIMATE_PAGE_SIZE = 500;\nconst CODEBOOK_PAGE_SIZE = 1000;\nconst CODEBOOK_MAX_PAGES = 15;\nexport class EstimatesApi {\n instance: AxiosInstance;\n businessUnitId: string;\n\n constructor(accessToken: string, businessUnitId: string) {\n this.instance = axios.create();\n this.instance.interceptors.request.use(config => {\n config.headers.Authorization = `Bearer ${accessToken}`;\n return config;\n });\n this.businessUnitId = businessUnitId;\n }\n\n getEstimates = (top: number, skip: number) => {\n return this.instance.get(\n `${appconfig.endpoints.HBINSIGHTS}/api/v2/hbprecon/businessunits/${this.businessUnitId}/estimates?$top=${top}&$skip=${skip}&$orderby=LastModified desc&includeExcludedEstimates=true&$count=true`\n );\n };\n\n getLinkedEstimates = (ids: string[]) => {\n const filterString = `Id in (${ids.join(\", \")})`;\n return this.instance.get(\n `${appconfig.endpoints.HBINSIGHTS}/api/v2/hbprecon/businessunits/${this.businessUnitId}/estimates?$filter=${filterString}&includeDeletedEstimates=false&includeExcludedEstimates=true`\n );\n };\n\n getEstimatesForIds = (ids: string[]) => {\n const filterString = `Id in (${ids.join(\", \")})`;\n return this.instance.get(\n `${appconfig.endpoints.HBINSIGHTS}/api/v2/integration/businessunits/${this.businessUnitId}/estimates?$filter=${filterString}&includeDeletedEstimates=true&includeExcludedEstimates=true`\n );\n };\n\n getHeavybidPartitions = () => {\n return this.instance.get(\n `/api/v1/businessUnits/${this.businessUnitId}/heavybid/registrations`\n );\n };\n\n getActivityCodebookLastProcessed = () => {\n const url = `${appconfig.endpoints.HBINSIGHTS}/api/v2/integration/businessUnits/${this.businessUnitId}/systembackups/activitycodebook/lastprocessed`;\n return this.instance.get(url);\n };\n\n getActivityCodebookUnused = (\n limit: number,\n cursor: string,\n beginDate?: string,\n endDate?: string\n ) => {\n let url = `${\n appconfig.endpoints.HBINSIGHTS\n }/api/v2/integration/businessUnits/${\n this.businessUnitId\n }/activitycodebook/unused?beginDate=${beginDate ?? \"\"}&endDate=${\n endDate ?? \"\"\n }&limit=${limit}`;\n if (cursor !== \"\") url += `&cursor=${cursor}`;\n return this.instance.get(url);\n };\n\n getActivityCodebookMissing = (\n limit: number,\n cursor: string,\n beginDate?: string,\n endDate?: string\n ) => {\n let url = `${\n appconfig.endpoints.HBINSIGHTS\n }/api/v2/integration/businessUnits/${\n this.businessUnitId\n }/activitycodebook/missing?beginDate=${beginDate ?? \"\"}&endDate=${\n endDate ?? \"\"\n }&limit=${limit}`;\n if (cursor !== \"\") url += `&cursor=${cursor}`;\n return this.instance.get(url);\n };\n\n getActivityCodebookUtilized = (\n limit: number,\n cursor: string,\n beginDate?: string,\n endDate?: string\n ) => {\n let url = `${\n appconfig.endpoints.HBINSIGHTS\n }/api/v2/integration/businessUnits/${\n this.businessUnitId\n }/activitycodebook/utilized?beginDate=${beginDate ?? \"\"}&endDate=${\n endDate ?? \"\"\n }&limit=${limit}`;\n if (cursor !== \"\") url += `&cursor=${cursor}`;\n return this.instance.get(url);\n };\n\n getActivityCodebookUtilizedDetails = (\n partitionId: string,\n activityCode: string,\n beginDate?: string,\n endDate?: string\n ) => {\n const url = `${\n appconfig.endpoints.HBINSIGHTS\n }/api/v2/integration/businessUnits/${\n this.businessUnitId\n }/activitycodebook/modified/${partitionId}/${activityCode}?beginDate=${\n beginDate ?? \"\"\n }&endDate=${endDate ?? \"\"}`;\n return this.instance.get(url);\n };\n\n getQuoteFolders = (estimateId?: string) => {\n let url = `${appconfig.endpoints.HBINSIGHTS}/api/v1/quoteFolders`;\n if (estimateId) {\n url += `?estimateId=${estimateId}`;\n }\n return this.instance.get(url);\n };\n\n getEstimateFilters = () => {\n const url = `${appconfig.endpoints.HBINSIGHTS}/api/v2/integration/businessUnits/${this.businessUnitId}/metadata/filters`;\n return this.instance.get<{ data: UniqueEstimateFilters }>(url);\n };\n\n getActivityTotals = (formulas: ActivityFormulaDto[]) => {\n const url = `${appconfig.endpoints.HBINSIGHTS}/api/v2/integration/businessunits/${this.businessUnitId}/totals/activities`;\n return this.instance.post(url, formulas);\n };\n\n getUserDefinedLabels = () => {\n const url = `${appconfig.endpoints.HBINSIGHTS}/api/v2/integration/businessunits/${this.businessUnitId}/metadata/userDefinedLabels`;\n return this.instance.get>(url);\n };\n\n patchEstimate = (estimateId: string, patchDocument: IJsonPatchDocument) => {\n return this.instance.patch(\n `${appconfig.endpoints.HBINSIGHTS}/api/v2/integration/businessunits/${this.businessUnitId}/estimates/${estimateId}`,\n patchDocument\n );\n };\n\n getHiddenEstimateIds = () => {\n return this.instance.get(\n `/api/v1/businessUnits/${this.businessUnitId}/hiddenEstimateIds`\n );\n };\n\n patchHiddenEstimateIds = (patchIds: string[]) => {\n return this.instance.patch(\n `/api/v1/businessUnits/${this.businessUnitId}/hiddenEstimateIds`,\n patchIds\n );\n };\n}\n\nfunction* loadHeavybidDivisions() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(api.getHeavybidPartitions);\n yield put(actions.loadHeavybidDivisions.success(response.data));\n }\n } catch (error) {\n yield put(actions.loadHeavybidDivisions.failure(error));\n }\n}\n\nfunction* loadActivityCodebookUnused() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n const dateRangeStr = window.localStorage.getItem(\"codebooks-date-range\");\n const dateRange = dateRangeStr\n ? GetDateValues(JSON.parse(dateRangeStr))\n : GetDateValues();\n\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n let hasNextPage = true;\n let cursor = \"\";\n let pageNumber = 0;\n while (hasNextPage) {\n if (pageNumber >= CODEBOOK_MAX_PAGES) {\n yield put(\n actions.loadActivityCodebookUnused.failure({ overflow: true })\n );\n return;\n }\n const pageSize =\n pageNumber < 5 ? CODEBOOK_PAGE_SIZE : CODEBOOK_PAGE_SIZE * 5;\n const response = yield call(\n api.getActivityCodebookUnused,\n pageSize,\n cursor,\n dateRange.from?.toISOString(),\n dateRange.to?.toISOString()\n );\n const data = response.data;\n yield put(actions.loadActivityCodebookUnused.success(data.data));\n cursor = data.nextCursor;\n hasNextPage = !!cursor;\n pageNumber++;\n }\n }\n } catch (error) {\n yield put(\n actions.loadActivityCodebookUnused.failure({ axiosError: error })\n );\n }\n}\nfunction* loadLastProcessedActivityCodebooks() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(api.getActivityCodebookLastProcessed);\n yield put(\n actions.loadLastProcessedActivityCodebooks.success(response.data)\n );\n }\n } catch (error) {\n yield put(actions.loadLastProcessedActivityCodebooks.failure(error));\n }\n}\n\nfunction* loadActivityCodebookMissing() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n const dateRangeStr = window.localStorage.getItem(\"codebooks-date-range\");\n const dateRange = dateRangeStr\n ? GetDateValues(JSON.parse(dateRangeStr))\n : GetDateValues();\n\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n let hasNextPage = true;\n let cursor = \"\";\n let pageNumber = 0;\n while (hasNextPage) {\n if (pageNumber >= CODEBOOK_MAX_PAGES) {\n yield put(\n actions.loadActivityCodebookMissing.failure({ overflow: true })\n );\n return;\n }\n const pageSize =\n pageNumber < 5 ? CODEBOOK_PAGE_SIZE : CODEBOOK_PAGE_SIZE * 5;\n const response = yield call(\n api.getActivityCodebookMissing,\n pageSize,\n cursor,\n dateRange.from?.toISOString(),\n dateRange.to?.toISOString()\n );\n const responseData = response.data;\n yield put(\n actions.loadActivityCodebookMissing.success(responseData.data)\n );\n cursor = responseData.nextCursor;\n hasNextPage = !!cursor;\n pageNumber++;\n }\n }\n } catch (error) {\n console.log(error);\n yield put(\n actions.loadActivityCodebookMissing.failure({ axiosError: error })\n );\n }\n}\n\nfunction* loadActivityCodebookUtilized() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n const dateRangeStr = window.localStorage.getItem(\"codebooks-date-range\");\n const dateRange = dateRangeStr\n ? GetDateValues(JSON.parse(dateRangeStr))\n : GetDateValues();\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n let hasNextPage = true;\n let cursor = \"\";\n let pageNumber = 0;\n while (hasNextPage) {\n if (pageNumber >= CODEBOOK_MAX_PAGES) {\n yield put(\n actions.loadActivityCodebookUtilized.failure({ overflow: true })\n );\n return;\n }\n const pageSize =\n pageNumber < 5 ? CODEBOOK_PAGE_SIZE : CODEBOOK_PAGE_SIZE * 5;\n const response = yield call(\n api.getActivityCodebookUtilized,\n pageSize,\n cursor,\n dateRange.from?.toISOString(),\n dateRange.to?.toISOString()\n );\n const data = response.data;\n yield put(actions.loadActivityCodebookUtilized.success(data.data));\n cursor = data.nextCursor;\n hasNextPage = !!cursor;\n pageNumber++;\n }\n }\n } catch (error) {\n yield put(\n actions.loadActivityCodebookUtilized.failure({ axiosError: error })\n );\n }\n}\n\nfunction* loadActivityCodebookUtilizedDetails(\n action: ActionType\n) {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n const dateRangeStr = window.localStorage.getItem(\"codebooks-date-range\");\n const dateRange = dateRangeStr\n ? GetDateValues(JSON.parse(dateRangeStr))\n : GetDateValues();\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(\n api.getActivityCodebookUtilizedDetails,\n action.payload.partitionId,\n action.payload.activityCode,\n dateRange.from?.toISOString(),\n dateRange.to?.toISOString()\n );\n yield put(\n actions.loadActivityCodebookUtilizedDetails.success(response.data.data)\n );\n }\n } catch (error) {\n notify.error(\"Error fetching modifications.\");\n yield put(actions.loadActivityCodebookUtilizedDetails.failure(error));\n }\n}\n\nfunction* saveEstimate(\n action: ActionType\n) {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n const id = action.payload.id;\n if (action.payload.values) {\n try {\n if (hcssToken && businessUnitId) {\n const patch = patchDocument(action.payload.values);\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(api.patchEstimate, id, patch);\n const updatedEstimate: WithId = response.data;\n yield put(\n actions.saveEstimate.success({\n id: updatedEstimate.id,\n values: updatedEstimate\n })\n );\n notify.save(action.payload.code);\n }\n } catch (error) {\n notify.error(\n `Error Saving ${action.payload.code}`,\n `${error?.response?.data?.message}`\n );\n console.error(error);\n yield put(actions.saveEstimate.failure({ id, error }));\n }\n }\n}\n\nfunction* loadEstimatesInitial() {\n yield put(actions.loadEstimates.request());\n}\n\nfunction* onSchemaSave(\n action: ActionType\n) {\n const { schemaName } = action.payload;\n if (schemaName === \"estimateReporting\")\n yield put(actions.loadActivityTotals.request());\n}\n\nfunction* updateEstimates(\n action: ActionType\n) {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(\n api.getEstimatesForIds,\n action.payload.map(est => est.estimateId)\n );\n const data = response.data;\n const updatedEstimates: WithId[] = data.data;\n yield put(\n actions.updateEstimates.success(\n updatedEstimates.map(est => ({\n values: est,\n id: est.id\n })) || []\n )\n );\n\n yield all(\n updatedEstimates.map(est => call(loadQuoteFoldersForEstimate, est.id))\n );\n }\n } catch (error) {\n console.error(error);\n yield put(actions.loadEstimates.failure(error));\n }\n}\n\nfunction* loadEstimates() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n let hasNextPage = true;\n let skip = 0;\n while (hasNextPage) {\n const response = yield call(api.getEstimates, ESTIMATE_PAGE_SIZE, skip);\n const data = response.data;\n let estimates: WithId[] = data.data;\n if (response.status === 204) {\n estimates = [];\n }\n yield put(\n actions.loadEstimates.success(\n estimates.map(estimate => ({\n values: estimate,\n id: estimate.id\n })) || []\n )\n );\n hasNextPage = estimates.length === ESTIMATE_PAGE_SIZE;\n skip = data.nextSkipValue;\n if (data.count > 3000) {\n const newTop = Math.floor((data.count - ESTIMATE_PAGE_SIZE) / 6);\n const skips = [0, 1, 2, 3, 4, 5].map(\n s => s * newTop + ESTIMATE_PAGE_SIZE\n );\n const results = yield all([\n call(api.getEstimates, newTop, skips[0]),\n call(api.getEstimates, newTop, skips[1]),\n call(api.getEstimates, newTop, skips[2]),\n call(api.getEstimates, newTop, skips[3]),\n call(api.getEstimates, newTop, skips[4]),\n call(api.getEstimates, newTop, skips[5])\n ]);\n const estimates: WithId[] = flatten(\n results.map(r => r.data.data)\n );\n yield put(\n actions.loadEstimates.success(\n estimates.map(estimate => ({\n values: estimate,\n id: estimate.id\n })) || []\n )\n );\n break;\n }\n }\n yield put(actions.setLoading({ loading: false }));\n }\n } catch (error) {\n console.error(error);\n yield put(actions.loadEstimates.failure(error));\n yield put(actions.loadedAllEstimates());\n }\n}\n\nfunction* loadQuoteFoldersForEstimate(estimateId: string) {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(api.getQuoteFolders, estimateId);\n const data = response.data;\n const quoteFolders: QuoteFolderDto[] = data;\n yield put(actions.loadQuoteFolders.success(quoteFolders));\n }\n } catch (error) {\n console.error(error);\n yield put(actions.loadQuoteFolders.failure(error));\n }\n}\n\nfunction* loadActivityTotals() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n\n const formulas: ActivityFormulaDto[] = yield select(\n schemaSelectors.getBrokenOutActivityTotalFieldsSimple\n );\n\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(api.getActivityTotals, formulas);\n const { data } = response;\n yield put(actions.loadActivityTotals.success([data, formulas]));\n yield put(actions.loadedAllEstimates());\n }\n } catch (error) {\n console.error(error);\n yield put(actions.loadActivityTotals.failure(error));\n yield put(actions.loadedAllEstimates());\n }\n}\n\nfunction* loadQuoteFolders() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(api.getQuoteFolders);\n const data = response.data;\n const quoteFolders: QuoteFolderDto[] = data;\n yield put(actions.loadQuoteFolders.success(quoteFolders));\n }\n } catch (error) {\n console.error(error);\n yield put(actions.loadQuoteFolders.failure(error));\n }\n}\n\nfunction* updateQuoteFolderList(\n action: ActionType\n) {\n // reading from store because this could triggered by an estimate update\n const allQuoteFolders: Record = yield select(\n selectors.getQuoteFolders\n );\n const listValues = uniqBy(\n Object.values(allQuoteFolders),\n qf => qf.folder\n ).map(qf => ({ display: qf.folder, value: qf.folder }));\n\n const schemas: Record> = yield select(\n schemaSelectors.getSchemaHash\n );\n\n yield put(\n schemaActions.saveSchemaField(schemas.quoteDashboard.id, {\n ...schemas.quoteDashboard.fields.quoteFolders,\n config: { listValues }\n })\n );\n}\n\nfunction* loadEstimateFilters() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(api.getEstimateFilters);\n const { data } = response.data;\n const estimateFilters: UniqueEstimateFilters = data;\n\n yield put(actions.loadEstimateFilters.success(estimateFilters));\n }\n } catch (error) {\n console.error(error);\n yield put(actions.loadEstimateFilters.failure(error));\n }\n}\n\nfunction* loadUserDefinedLabels() {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const response = yield call(api.getUserDefinedLabels);\n const { data } = response.data;\n const userDefinedLabels: Record = data;\n\n yield put(actions.loadUserDefinedLabels.success(userDefinedLabels));\n }\n } catch (error) {\n console.error(error);\n yield put(actions.loadUserDefinedLabels.failure(error));\n }\n}\n\nfunction* updateEstimateFilterList(\n action: ActionType\n) {\n const allEstimateFilters = action.payload;\n const schemas: Record> = yield select(\n schemaSelectors.getSchemaHash\n );\n\n const filters = [\n { fieldName: \"values.filters.owner\", filterName: \"owner\" },\n { fieldName: \"values.filters.status\", filterName: \"status\" },\n { fieldName: \"values.filters.estimator\", filterName: \"estimator\" },\n { fieldName: \"values.filters.engineer\", filterName: \"engineer\" },\n { fieldName: \"values.filters.typeOfWork\", filterName: \"typeWork\" },\n { fieldName: \"values.filters.state\", filterName: \"wcState\" },\n { fieldName: \"values.heavyBidDivision\", filterName: \"businessUnitCode\" },\n { fieldName: \"values.filters.estimateTag1\", filterName: \"filter1\" },\n { fieldName: \"values.filters.estimateTag2\", filterName: \"filter2\" },\n { fieldName: \"values.filters.estimateTag3\", filterName: \"filter3\" },\n { fieldName: \"values.filters.estimateTag4\", filterName: \"filter4\" },\n { fieldName: \"values.filters.estimateTag5\", filterName: \"filter5\" },\n { fieldName: \"values.filters.estimateTag6\", filterName: \"filter6\" }\n ];\n\n for (const filter of filters) {\n yield put(\n schemaActions.saveSchemaField(schemas.estimatesextended.id, {\n ...schemas.estimatesextended.fields[filter.fieldName],\n config: {\n listValues: allEstimateFilters[filter.filterName]\n ?.filter(v => v && v !== \"\")\n .map((o: string) => ({\n display: o,\n value: o\n }))\n }\n })\n );\n }\n}\n\nfunction* updateEstimateUserDefinedLabels(\n action: ActionType\n) {\n const allUserDefinedLabels = action.payload;\n const estimatesExtendedSchema: WithId = yield select(\n schemaSelectors.getEstimatesExtendedSchema\n );\n\n const estimatesExtendedSchemaCopy = { ...estimatesExtendedSchema };\n const estimatesExtendedSchemaFieldsCopy = {\n ...estimatesExtendedSchema.fields\n };\n\n const userDefinedLabelKeys = Object.keys(allUserDefinedLabels);\n userDefinedLabelKeys.forEach(labelKey => {\n const filterKey = determineFilterKeyForLabelKey(labelKey);\n const filterCopy =\n estimatesExtendedSchemaFieldsCopy[`values.filters.${filterKey}`];\n filterCopy.name = allUserDefinedLabels[labelKey];\n });\n\n estimatesExtendedSchemaCopy.fields = estimatesExtendedSchemaFieldsCopy;\n\n yield put(schemaActions.updateSchemas([{ ...estimatesExtendedSchemaCopy }]));\n}\n\nfunction* loadHiddenUnlinkedEstimateIds(\n action: ActionType\n) {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const result = yield call(api.getHiddenEstimateIds);\n yield put(actions.loadHiddenUnlinkedEstimateIds.success(result.data));\n }\n } catch (error) {\n notify.error(\n strings.projects.estimateMapping.sagas.errors.loadHiddenEstimateIds\n );\n console.error(error);\n yield put(actions.loadHiddenUnlinkedEstimateIds.failure(error));\n }\n}\n\nfunction* patchHiddenUnlinkedEstimateIds(\n action: ActionType\n) {\n const hcssToken: string | undefined = yield select(\n account.selectors.getHcssToken\n );\n const businessUnitId: string | undefined = yield select(\n account.selectors.getSelectedBusinessUnitId\n );\n try {\n if (hcssToken && businessUnitId) {\n const api = new EstimatesApi(hcssToken, businessUnitId);\n const result = yield call(api.patchHiddenEstimateIds, action.payload.ids);\n yield put(actions.patchHiddenUnlinkedEstimateIds.success(result.data));\n const message =\n action.payload.action === \"Hide\"\n ? strings.projects.estimateMapping.sagas.success.hide\n : strings.projects.estimateMapping.sagas.success.unhide;\n if (action.payload.action) notify.success(message);\n }\n } catch (error) {\n notify.error(\n strings.projects.estimateMapping.sagas.errors.updateHiddenEstimateIds\n );\n console.error(error);\n yield put(actions.loadHiddenUnlinkedEstimateIds.failure(error));\n }\n}\nexport const sagas = [\n //Activity totals should only load once the estimates are done loading,\n //and the estimates should only load once the schemas are done loading\n // (activity totals depend on both)\n takeEvery(getType(actions.setLoading), loadActivityTotals),\n takeEvery(getType(actions.loadActivityTotals.request), loadActivityTotals),\n takeLatest(getType(schemaActions.saveSchema.success), onSchemaSave),\n takeLatest(getType(actions.loadEstimates.request), loadEstimates),\n takeEvery(getType(actions.saveEstimate.request), saveEstimate),\n //FIX ME: Checking for both schema failure and sucess is a temporary fix\n // to allow estimates to still be loaded even if the schemas call fails\n // This can be changed when the schemas call isn't forced to throw\n // a 403 for users without access to project tracking\n takeEvery(getType(schemaActions.loadSchemas.success), loadEstimatesInitial),\n takeEvery(getType(schemaActions.loadSchemas.failure), loadEstimatesInitial),\n takeEvery(getType(actions.updateEstimates.request), updateEstimates),\n takeLatest(getType(actions.loadQuoteFolders.request), loadQuoteFolders),\n takeEvery(getType(actions.loadQuoteFolders.success), updateQuoteFolderList),\n takeLatest(getType(actions.loadEstimateFilters.request), loadEstimateFilters),\n takeLatest(\n getType(actions.loadUserDefinedLabels.request),\n loadUserDefinedLabels\n ),\n takeLatest(\n getType(actions.loadUserDefinedLabels.success),\n updateEstimateUserDefinedLabels\n ),\n takeEvery(\n getType(actions.loadEstimateFilters.success),\n updateEstimateFilterList\n ),\n takeEvery(\n getType(actions.loadHiddenUnlinkedEstimateIds.request),\n loadHiddenUnlinkedEstimateIds\n ),\n takeEvery(\n getType(actions.patchHiddenUnlinkedEstimateIds.request),\n patchHiddenUnlinkedEstimateIds\n ),\n takeLatest(\n getType(actions.loadHeavybidDivisions.request),\n loadHeavybidDivisions\n ),\n takeLatest(\n getType(actions.loadActivityCodebookUnused.request),\n loadActivityCodebookUnused\n ),\n takeLatest(\n getType(actions.loadActivityCodebookMissing.request),\n loadActivityCodebookMissing\n ),\n takeLatest(\n getType(actions.loadActivityCodebookUtilized.request),\n loadActivityCodebookUtilized\n ),\n takeLatest(\n getType(actions.loadActivityCodebookUtilizedDetails.request),\n loadActivityCodebookUtilizedDetails\n ),\n takeLatest(\n getType(actions.loadLastProcessedActivityCodebooks.request),\n loadLastProcessedActivityCodebooks\n )\n];\n","import { ReportType } from \"api/GeneratedClients/insights\";\n\nexport const getPathForEstimate = (estimateId: string) =>\n `/estimates/${estimateId}`;\n\nexport const getPathForFolder = (estimateId: string, folderId: string) =>\n `/estimates/${estimateId}/folders/${folderId}`;\n\nexport const getPathForQuote = (\n estimateId: string,\n vendorSolicitationId: string\n) => `/estimates/${estimateId}/quotes/${vendorSolicitationId}`;\n\nexport const getPathForSolicitation = (\n estimateId: string,\n solicitationId: string\n) => `/estimates/${estimateId}/solicitation/details/${solicitationId}`;\n\nexport const getQuoteSolicitationPath = (solicitationId: string) => `/quotes/solicitations/master/${solicitationId}`;\n\nexport const getPathForVendorCommunication = (\n estimateId: string,\n vendorCode: string\n) => `/estimates/${estimateId}/communication/${vendorCode}`;\n\nexport const getPathForQMVendorCommunication = (\n projectId: string,\n vendorCode: string\n) => `/quotes/${projectId}/communication/${vendorCode}`;\n\nexport const getPathForReportType = (\n estimateId: string,\n reportType: string | ReportType\n) => `/estimates/${estimateId}/reporting/${reportType}`;\n\nexport const getPathForIndicators = (estimateId: string) => `/estimates/${estimateId}/indicators`\n\nexport const paths = {\n base: \"/estimates\",\n codebooks: \"/estimates/codebooks\",\n list: \"/estimates/list\",\n edit: \"/estimates/edit\",\n detail: getPathForEstimate(\":estimateId\"),\n indicators: getPathForIndicators(\":estimateId\"),\n reporting: getPathForReportType(\":estimateId\", \":reportType\"),\n reports: \"/estimates/:estimateId/reports\",\n materials: \"/estimates/:estimateId/materials\",\n estimateDashbaord: \"/estimates/:estimateId/dashboard\",\n customizeReporting: \"/estimates/customize\",\n quoteSummary: \"/estimates/:estimateId/quotes/summary\",\n quoteInbox: \"/estimates/:estimateId/quotes/inbox\",\n quoteDetails: getPathForQuote(\":estimateId\", \":solicitationId\"),\n folderDetails: getPathForFolder(\":estimateId\", \":folderId\"),\n solicitationDetails: \"/estimates/:estimateId/solicitation/details/:solicitationId?\",\n proposalDetails: \"/estimates/:estimateId/proposal/details\",\n masterSolicitationTable: \"/estimates/:estimateId/solicitation/:filter(drafts|sent)\",\n vendorCommunications: \"/estimates/:estimateId/communication\",\n vendorCommunicationsDetails: \"/estimates/:estimateId/communication/:vendorCode\",\n lookup: \"/estimates/lookup\",\n};\n","import { CompanyEntity } from \"api\";\nimport { ActionType, createAsyncAction, getType } from \"typesafe-actions\";\nimport produce from \"immer\";\nimport { WithId } from \"core\";\nimport { PayItem, PayItemLibraryCreateDto } from \"./models\";\nimport { createSelector } from \"reselect\";\nimport { QuickPriceSheetReadDto } from \"modules/projects/components/quick-pricing/models/quick-price-sheet.model\";\nexport interface PayItemLibrary extends CompanyEntity {\n ownerId: string;\n ownerCode: string;\n versionName: string;\n}\n\nexport interface DetailedPayItemLibrary extends PayItemLibrary {\n payItems: PayItem[];\n}\n\nexport interface DetailedPayItemLibrary extends PayItemLibrary {\n payItems: PayItem[];\n}\n\nexport interface PayItemLibraryMap {\n [key: string]: PayItem;\n}\nexport const STATE_KEY = \"quickPrice\";\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\nexport interface State {\n allIds: string[];\n workingCopy: { [key: string]: WithId };\n original: { [key: string]: WithId };\n selectedLibrary?: WithId;\n isLibrariesLoaded: boolean;\n isSelectedLibraryLoaded: boolean;\n selectedWizardLibrary?: WithId;\n selectedWizardLibraryLoading: boolean;\n quickPriceSheetLoading: boolean;\n quickPriceSheet?: WithId;\n}\n\nexport type PayItemLibraryActions = ActionType;\n\nexport const actions = {\n loadPayItemLibraries: createAsyncAction(\n \"PAYITEMLIBRARIES/LOAD_DATA_REQUEST\",\n \"PAYITEMLIBRARIES/LOAD_DATA_SUCCESS\",\n \"PAYITEMLIBRARIES/LOAD_DATA_FAILURE\"\n )[], Error>(),\n createPayItemLibrary: createAsyncAction(\n \"PAYITEMLIBRARIES/CREATE_REQUEST\",\n \"PAYITEMLIBRARIES/CREATE_SUCCESS\",\n \"PAYITEMLIBRARIES/CREATE_FAILURE\"\n ), Error>(),\n loadSelectedPayItemLibrary: createAsyncAction(\n \"PAYITEMLIBRARY/LOAD_DATA_REQUEST\",\n \"PAYITEMLIBRARY/LOAD_DATA_SUCCESS\",\n \"PAYITEMLIBRARY/LOAD_DATA_FAILURE\"\n ), Error>(),\n loadWizardPayItemLibrary: createAsyncAction(\n \"WIZARDPAYITEMLIBRARY/LOAD_DATA_REQUEST\",\n \"WIZARDPAYITEMLIBRARY/LOAD_DATA_SUCCESS\",\n \"WIZARDPAYITEMLIBRARY/LOAD_DATA_FAILURE\"\n ), Error>(),\n deletePayItemLibrary: createAsyncAction(\n \"PAYITEMLIBRARY/DELETE_REQUEST\",\n \"PAYITEMLIBRARY/DELETE_SUCCESS\",\n \"PAYITEMLIBRARY/DELETE_FAILURE\"\n )(),\n loadQuickPriceSheet: createAsyncAction(\n \"QUICKPRICESHEET/LOAD_DATA_REQUEST\",\n \"QUICKPRICESHEET/LOAD_DATA_SUCCESS\",\n \"QUICKPRICESHEET/LOAD_DATA_FAILURE\"\n ), Error>(),\n deleteQuickPriceSheet: createAsyncAction(\n \"QUICKPRICESHEET/DELETE_REQUEST\",\n \"QUICKPRICESHEET/DELETE_SUCCESS\",\n \"QUICKPRICESHEET/DELETE_FAILURE\"\n )()\n};\n\nconst initialState: State = {\n allIds: [],\n workingCopy: {},\n original: {},\n isLibrariesLoaded: false,\n isSelectedLibraryLoaded: true,\n selectedWizardLibraryLoading: false,\n quickPriceSheetLoading: false\n};\n\nexport const reducer = (\n state = initialState,\n action: PayItemLibraryActions\n) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.loadPayItemLibraries.request): {\n draft.isLibrariesLoaded = false;\n break;\n }\n case getType(actions.loadPayItemLibraries.failure): {\n draft.isLibrariesLoaded = true;\n break;\n }\n case getType(actions.loadPayItemLibraries.success): {\n action.payload.forEach(library => {\n if (!(library.id in draft.original)) {\n draft.allIds.push(library.id);\n }\n draft.workingCopy[library.id] = library;\n draft.original[library.id] = library;\n });\n draft.isLibrariesLoaded = true;\n break;\n }\n case getType(actions.createPayItemLibrary.request): {\n draft.isLibrariesLoaded = false;\n draft.isSelectedLibraryLoaded = false;\n break;\n }\n case getType(actions.createPayItemLibrary.failure): {\n draft.isLibrariesLoaded = true;\n draft.isSelectedLibraryLoaded = true;\n break;\n }\n case getType(actions.createPayItemLibrary.success): {\n const library = action.payload;\n if (!(library.id in draft.original)) {\n draft.allIds.push(library.id);\n }\n const { payItems, ...slimLibrary } = library;\n\n draft.workingCopy[library.id] = slimLibrary;\n draft.original[library.id] = slimLibrary;\n draft.selectedLibrary = library;\n draft.isLibrariesLoaded = true;\n draft.isSelectedLibraryLoaded = true;\n break;\n }\n case getType(actions.loadSelectedPayItemLibrary.request): {\n draft.selectedLibrary = {\n ...draft.workingCopy[action.payload],\n payItems: []\n };\n draft.isSelectedLibraryLoaded = false;\n break;\n }\n case getType(actions.loadSelectedPayItemLibrary.failure): {\n draft.isSelectedLibraryLoaded = true;\n break;\n }\n case getType(actions.loadSelectedPayItemLibrary.success): {\n const library = action.payload;\n draft.selectedLibrary = library;\n draft.isSelectedLibraryLoaded = true;\n break;\n }\n case getType(actions.loadQuickPriceSheet.request): {\n draft.quickPriceSheetLoading = true;\n break;\n }\n case getType(actions.loadQuickPriceSheet.success): {\n draft.quickPriceSheet = action.payload;\n draft.quickPriceSheetLoading = false;\n break;\n }\n case getType(actions.loadQuickPriceSheet.failure): {\n draft.quickPriceSheetLoading = false;\n break;\n }\n case getType(actions.deletePayItemLibrary.request): {\n draft.isSelectedLibraryLoaded = false;\n break;\n }\n case getType(actions.deletePayItemLibrary.failure): {\n draft.isSelectedLibraryLoaded = true;\n break;\n }\n case getType(actions.deletePayItemLibrary.success): {\n const libraryId = action.payload;\n draft.allIds = draft.allIds.filter(id => id !== libraryId);\n delete draft.workingCopy[libraryId];\n delete draft.original[libraryId];\n if (draft.selectedLibrary?.id === libraryId) {\n draft.selectedLibrary = undefined;\n }\n draft.isSelectedLibraryLoaded = true;\n break;\n }\n case getType(actions.loadWizardPayItemLibrary.request): {\n draft.selectedWizardLibraryLoading = true;\n draft.selectedWizardLibrary = undefined;\n break;\n }\n case getType(actions.loadWizardPayItemLibrary.failure): {\n draft.selectedWizardLibraryLoading = false;\n break;\n }\n case getType(actions.loadWizardPayItemLibrary.success): {\n const library = action.payload;\n draft.selectedWizardLibrary = library;\n draft.selectedWizardLibraryLoading = false;\n break;\n }\n }\n });\n};\n\nexport type SelectorState = StateSlice;\n\n// Selectors\nconst getLibrariesLoaded = ({ quickPrice }: SelectorState) =>\n quickPrice.isLibrariesLoaded;\nconst getAllIds = ({ quickPrice }: SelectorState) => quickPrice.allIds;\nconst getLibraries = ({ quickPrice }: StateSlice) =>\n Object.values(quickPrice.workingCopy);\nconst getSelectedLibrary = ({ quickPrice }: StateSlice) =>\n quickPrice.selectedLibrary;\nconst getSelectedLibraryLoaded = ({ quickPrice }: StateSlice) =>\n quickPrice.isSelectedLibraryLoaded;\nconst getSelectedWizardLibrary = ({ quickPrice }: StateSlice) =>\n quickPrice.selectedWizardLibrary;\nconst getSelectedWizardLibraryLoading = ({ quickPrice }: StateSlice) =>\n quickPrice.selectedWizardLibraryLoading;\nconst getQuickPriceSheetLoading = ({ quickPrice }: SelectorState) =>\n quickPrice.quickPriceSheetLoading;\nconst getQuickPriceSheet = ({ quickPrice }: SelectorState) =>\n quickPrice.quickPriceSheet;\nconst getSelectedWizardLibraryMap = createSelector(\n [getSelectedWizardLibrary],\n library => {\n const map: PayItemLibraryMap = {};\n library?.payItems?.forEach(payItem => (map[payItem.code] = payItem));\n return {\n payItemLibraryId: library?.id,\n mapping: map\n };\n }\n);\n\nexport const selectors = {\n getLibrariesLoaded,\n getAllIds,\n getLibraries,\n getSelectedLibrary,\n getSelectedLibraryLoaded,\n getSelectedWizardLibraryLoading,\n getSelectedWizardLibraryMap,\n getQuickPriceSheetLoading,\n getQuickPriceSheet\n};\n","import { FeatureFlag } from \"api\";\nimport { useSelector } from \"react-redux\";\nimport { selectors } from \"./state\";\n\nexport interface FeatureFlags {\n isFeatureEnabled: boolean;\n featureFlags: FeatureFlag[];\n}\n\nexport function useFeatureFlags(key: string) {\n const configurationSettings = useSelector(selectors.getConfigurationSettings);\n const featureFlags = configurationSettings?.featureFlags ?? [];\n const isFeatureEnabled = !!featureFlags.find(\n flag => flag.active && flag.key === key\n );\n return { isFeatureEnabled, featureFlags };\n}\n","import {\n IVendorDtoV1Response,\n CompanyTypeDto\n} from \"api/GeneratedClients/ContactsClient\";\nimport { isValidString } from \"core\";\nimport { ConcreteColors, ControlLabel, FormGroup } from \"hcss-components\";\nimport { strings } from \"localization\";\nimport { sortBy } from \"lodash-es\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport Creatable from \"react-select/creatable\";\nimport styled from \"styled-components\";\n\ninterface CompanyTypeProps {\n vendor: IVendorDtoV1Response;\n setVendorType: (e: any) => void;\n showErrors: boolean;\n}\n\ninterface CompanyTypeOption {\n label: string;\n description: string;\n value: string;\n __isNew__?: boolean;\n}\n\nconst EMPTY_GUID = \"00000000-0000-0000-0000-000000000000\";\n\nexport const VendorCompanyType = ({\n vendor,\n setVendorType\n}: CompanyTypeProps) => {\n const companyTypes = useSelector(contactsSelectors.getCompanyTypes);\n let options = companyTypes.map(ct => ({\n value: ct.id ?? \"\",\n description: ct.description ?? \"\",\n label: ct.code ?? \"\"\n }));\n options = sortBy(options, opt => opt.label.toLocaleLowerCase());\n\n const updateCompanyType = (opt: any) => {\n if (!opt) {\n setVendorType(null);\n } else {\n if (opt && !opt.label) {\n return;\n }\n // all codes get capitalized when created by the Contacts API\n // so we change it here for any newly created scopes by the user\n opt.label = opt.label.toUpperCase();\n //value will be the guid for an existing product OR the newly created value\n // one way to check for newly created values will be to verify id === description\n opt.value = opt.value.toLowerCase();\n\n const companyType: CompanyTypeDto = new CompanyTypeDto({\n id: opt.__isNew__ ? EMPTY_GUID : opt.value,\n code: opt.label,\n description: opt.__isNew__ ? opt.value : opt.description // created options won't have a description property\n });\n\n setVendorType(companyType);\n }\n };\n\n const isValidNewOption = (\n inputValue: string,\n value: any,\n options: any\n ): boolean => {\n const optionLabels = options?.map(o => o.label.toUpperCase()) ?? [];\n return !optionLabels.includes(inputValue.toUpperCase());\n };\n\n const formatCreateLabel = (inputValue: string) =>\n isValidString(inputValue)\n ? `Create \"${inputValue.toUpperCase()}\"`\n : \"To add a new option: type a value, press Enter\";\n\n return (\n <>\n \n
\n
\n \n \n {strings.contact.mainInfo.companyType}\n \n \n \n
\n
\n
\n \n );\n};\n\nconst CompanyType = styled.div`\n .form-group[required] label:after {\n content: \" *\";\n color: ${ConcreteColors.red200};\n }\n div.scopes {\n grid-area: scopes;\n }\n`;\n\nconst CustomStyle = {\n option: (base, state) => {\n let color = \"\";\n let backgroundColor = \"\";\n\n if (state.data.label === state.selectProps.value.label) {\n color = \"white\";\n backgroundColor = \"#2684FF\";\n } else if (state.isFocused) {\n backgroundColor = \"#DEEBFF\";\n }\n\n return {\n ...base,\n color,\n backgroundColor\n };\n }\n};\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\nimport {\n ControlLabel,\n FormGroup,\n FormControl,\n ConcreteColors,\n HelpBlock,\n Checkbox\n} from \"hcss-components\";\nimport numeral from \"numeral\";\nimport { IVendorDtoV1Response } from \"api/GeneratedClients/ContactsClient\";\nimport { isNullOrWhitespace } from \"core\";\nimport { VendorCompanyType } from \"./vendor-company-type\";\nimport MaskedInput from \"react-text-mask\";\nimport createNumberMask from \"text-mask-addons/dist/createNumberMask\";\n\ninterface MainInfoProps {\n vendor: IVendorDtoV1Response;\n // TODO: Specify a different type for any\n setVendor: (e: any) => void;\n showErrors: boolean;\n}\n\nexport const VendorMainInfo = ({\n vendor,\n setVendor,\n showErrors\n}: MainInfoProps) => {\n // TODO: Specify a different type for any\n const [bondRateString, setBondRateString] = useState(\n vendor.bondRate?.toString() ?? \"\"\n );\n const handleChange = (e: any) => {\n e.persist();\n\n const name = e.currentTarget.name;\n\n switch (name) {\n case \"code\": {\n const code = e.currentTarget.value;\n setVendor({ ...vendor, code });\n break;\n }\n case \"vendorName\": {\n const name = e.currentTarget.value;\n setVendor({ ...vendor, name });\n break;\n }\n // Are we keeping track of the email field for a vendor?\n case \"email\": {\n const email = e.currentTarget.value;\n setVendor({ ...vendor, email });\n break;\n }\n case \"webAddress\": {\n const webAddress = e.currentTarget.value;\n setVendor({ ...vendor, webAddress });\n break;\n }\n case \"note\": {\n const note = e.currentTarget.value;\n setVendor({ ...vendor, note });\n break;\n }\n case \"isBonded\": {\n const isBonded = e.currentTarget.checked;\n setVendor({ ...vendor, isBonded });\n break;\n }\n case \"bondRate\": {\n const valueString = e.currentTarget.value as string;\n let bondRate = numeral(valueString).value();\n if (!isNaN(bondRate)) {\n if (bondRate === null) {\n bondRate = 0;\n }\n // In HeavyBid, they accept value from 9999.99 to -999.99\n const isValidBondRate = bondRate >= -999.99 && bondRate <= 9999.99;\n if (isValidBondRate) {\n setVendor({ ...vendor, bondRate });\n setBondRateString(valueString);\n } else {\n bondRate = numeral(\n valueString.replace(\",\", \"\").substring(0, 4)\n ).value();\n setVendor({ ...vendor, bondRate });\n setBondRateString(\"-\" + valueString.slice(1).substring(0, 4));\n }\n }\n break;\n }\n case \"accountingCode\": {\n const accountingCode = e.currentTarget.value;\n setVendor({ ...vendor, accountingCode });\n break;\n }\n }\n };\n\n const updateCompanyType = (companyType: any) => {\n setVendor({\n ...vendor,\n type: companyType\n });\n };\n\n const bondRateMask = createNumberMask({\n allowDecimal: true,\n allowNegative: true,\n prefix: \"\",\n decimalLimit: 2,\n integerLimit: 4,\n allowLeadingZeroes: true\n });\n return (\n \n
\n
\n \n {strings.contact.mainInfo.code}\n handleChange(e)}\n />\n {showErrors && isNullOrWhitespace(vendor.code) && (\n Code is required.\n )}\n \n
\n
\n \n {strings.contact.mainInfo.name}\n handleChange(e)}\n />\n \n
\n
\n \n {strings.contact.mainInfo.webAddress}\n handleChange(e)}\n />\n \n
\n
\n \n
\n
\n \n {strings.contact.detailInfo.note}\n handleChange(e)}\n />\n \n
\n
\n \n \n {strings.contact.detailInfo.isBonded}\n \n handleChange(e)}\n />\n \n
\n
\n \n {strings.contact.detailInfo.bondRate}\n handleChange(e)}\n mask={bondRateMask}\n style={{ textAlign: \"left\" }}\n />\n \n
\n
\n \n \n {strings.contact.detailInfo.accountingCode}\n \n handleChange(e)}\n />\n \n
\n
\n
\n );\n};\n\nconst MainInfo = styled.div`\n div.mainInfo {\n display: grid;\n background-color: #ffffff;\n grid-template-columns: 30% 30% 35%;\n column-gap: 11px;\n row-gap: 10px;\n grid-template-areas:\n \"code vendorName vendorName\"\n \"webAddress note note\"\n \"companyType note note\"\n \"isBonded bondRate accountingCode\";\n align-items: center;\n }\n\n .form-group[required] label:after {\n content: \" *\";\n color: ${ConcreteColors.red200};\n }\n div.code {\n grid-area: code;\n }\n div.vendorName {\n grid-area: vendorName;\n }\n div.webAddress {\n grid-area: webAddress;\n }\n div.companyType {\n grid-area: companyType;\n }\n div.note {\n grid-area: note;\n }\n div.isBonded {\n grid-area: isBonded;\n }\n div.bondRate {\n grid-area: bondRate;\n }\n div.accountingCode {\n grid-area: accountingCode;\n }\n`;\n","import {\n IVendorDtoV1Response,\n ProductDto,\n ProductTypeDto\n} from \"api/GeneratedClients/ContactsClient\";\nimport { isValidString } from \"core\";\nimport { ConcreteColors, ControlLabel, FormGroup } from \"hcss-components\";\nimport { strings } from \"localization\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\nimport Creatable from \"react-select/creatable\";\nimport styled from \"styled-components\";\nimport { sortBy } from \"lodash-es\";\n\ninterface ScopeOfWorkProps {\n vendor: IVendorDtoV1Response;\n setVendor: (e: any) => void;\n showErrors: boolean;\n}\n\ninterface ScopeOfWorkOption {\n label: string;\n description: string;\n value: string;\n __isNew__?: boolean;\n}\n\nconst EMPTY_GUID = \"00000000-0000-0000-0000-000000000000\";\n\nexport const VendorScopeOfWork = ({ vendor, setVendor }: ScopeOfWorkProps) => {\n const sortedProducts = sortBy(vendor.products, p => p.product?.code);\n\n const allProductTypes = useSelector(contactsSelectors.getProductTypes);\n const options = allProductTypes\n .map(pt => ({\n value: pt.id ?? \"\",\n description: pt.description ?? \"\",\n label: pt.code ?? \"\"\n }))\n .concat(\n sortedProducts\n .filter(p => !allProductTypes.find(pt => pt.id === p.product?.id))\n .map(p => ({\n value: p.product?.id ?? \"\",\n label: p.product?.code ?? \"\",\n description: p.product?.description ?? \"\"\n }))\n );\n\n const selectedOptions = sortedProducts\n .map(prod => prod.product)\n .map(pt => options.find(opt => opt.label === pt?.code));\n\n const productTypeToProductMapping = sortedProducts.reduce(\n (mapping, product) => {\n mapping[product.product?.id] = product.id;\n return mapping;\n },\n {}\n );\n\n const updateScopeOfWork = (opt: ScopeOfWorkOption[]) => {\n opt = opt ?? [];\n opt = opt.filter(o => isValidString(o.value));\n opt.forEach(option => {\n // all codes get capitalized when created by the Contacts API\n // so we change it here for any newly created scopes by the user\n option.label = option.label.toUpperCase();\n //value will be the guid for an existing product OR the newly created value\n // one way to check for newly created values will be to verify id === description\n option.value = option.value.toLowerCase();\n });\n\n const productTypes: ProductTypeDto[] = opt?.map(\n op =>\n new ProductTypeDto({\n id: op.__isNew__ ? EMPTY_GUID : op.value,\n code: op.label,\n description: op.__isNew__ ? op.value : op.description // created options won't have a description property\n })\n );\n\n const products: ProductDto[] = productTypes?.map(\n pt =>\n new ProductDto({\n id: pt.id ? productTypeToProductMapping[pt.id] : EMPTY_GUID,\n companyId: vendor.id,\n product: pt,\n region: undefined,\n date: undefined\n })\n );\n setVendor({\n ...vendor,\n products: products\n });\n };\n\n const isValidNewOption = (\n inputValue: string,\n value: any,\n options: any\n ): boolean => {\n const optionLabels = options?.map(o => o.label) ?? [];\n return !optionLabels.includes(inputValue.toUpperCase());\n };\n\n const formatCreateLabel = (inputValue: string) =>\n isValidString(inputValue)\n ? `Create \"${inputValue.toUpperCase()}\"`\n : \"To add a new option: type a value, press Enter\";\n\n return (\n <>\n \n
\n
\n \n {strings.contact.scopeOfWork.select}\n \n \n
\n
\n
\n \n );\n};\n\nconst ScopeOfWork = styled.div`\n .form-group[required] label:after {\n content: \" *\";\n color: ${ConcreteColors.red200};\n }\n div.scopes {\n grid-area: scopes;\n }\n`;\n\nconst StyledSelect = styled(Creatable)`\n div.react-select__menu {\n z-index: 11;\n }\n\n .react-select__control {\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n min-height: 34px !important;\n }\n\n .react-select__input {\n height: 20px;\n }\n\n .react-select__multi-value {\n background-color: ${ConcreteColors.gray200};\n }\n\n .react-select__single-value {\n padding-bottom: 5px;\n padding-left: 7px;\n }\n\n .react-select__value-container {\n padding: 2px;\n }\n`;\n","import { IVendorLocationDto } from \"api/contacts-api-dto-interfaces\";\nimport { IVendorDtoV1Response } from \"api/GeneratedClients/ContactsClient\";\nimport { isNullOrWhitespace } from \"core\";\nimport { isEqual } from \"lodash-es\";\nimport { actions as contactActions } from \"modules/contacts\";\nimport { useDispatch } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\ninterface UseSaveVendorDetailsProps {\n setShowErrors: (value: boolean) => void;\n}\n\nexport function useSaveVendorDetails({\n setShowErrors\n}: UseSaveVendorDetailsProps) {\n const dispatch = useDispatch();\n const history = useHistory();\n\n const handleSaveChanges = (\n vendor: IVendorDtoV1Response,\n unsavedVendorLocation: IVendorLocationDto | undefined = undefined\n ) => {\n let updatedVendor: IVendorDtoV1Response;\n if (unsavedVendorLocation) {\n updatedVendor = includeUnsavedVendorLocation(\n vendor,\n unsavedVendorLocation\n );\n } else {\n updatedVendor = vendor;\n }\n\n if (!validateLocalVendor(updatedVendor)) return;\n if (vendor === undefined) return;\n dispatch(\n contactActions.updateVendor.request({\n vendor: updatedVendor,\n history: history\n })\n );\n };\n\n const validateLocalVendor = (vendor: IVendorDtoV1Response) => {\n if (vendor) {\n if (isNullOrWhitespace(vendor.code)) {\n setShowErrors(true);\n return false;\n }\n return true;\n }\n return false;\n };\n\n return { handleSaveChanges };\n}\n\nconst includeUnsavedVendorLocation = (\n vendor: IVendorDtoV1Response,\n unsavedLocation: IVendorLocationDto\n): IVendorDtoV1Response => {\n let updatedVendor: IVendorDtoV1Response = vendor;\n const unsavedLocationInRedux = vendor.locations?.find(\n loc => loc.id === unsavedLocation.id\n );\n if (\n unsavedLocationInRedux &&\n !isNullOrWhitespace(unsavedLocation.nickname) &&\n !isEqual(unsavedLocation, unsavedLocationInRedux)\n ) {\n const updatedLocations = vendor.locations?.map(loc => {\n if (loc.id === unsavedLocation.id) {\n return unsavedLocation;\n }\n return loc;\n });\n updatedVendor = { ...vendor, locations: updatedLocations };\n }\n const filteredNullNicknameLocations = updatedVendor.locations?.filter(\n loc => !isNullOrWhitespace(loc.nickname)\n );\n return { ...updatedVendor, locations: filteredNullNicknameLocations };\n};\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\nimport {\n CommunicationMethod,\n IVendorDtoV1Response\n} from \"api/GeneratedClients/ContactsClient\";\nimport {\n formatPhoneNumber,\n isValidString,\n statesEnum,\n provincesEnum\n} from \"core\";\nimport {\n ControlLabel,\n FormGroup,\n FormControl,\n Select,\n ConcreteColors,\n Button,\n Icon,\n HelpBlock\n} from \"hcss-components\";\nimport produce from \"immer\";\nimport { IVendorLocationDto } from \"api/contacts-api-dto-interfaces\";\nimport { DropdownList } from \"react-widgets\";\n\ninterface DetailInfoProps {\n vendor: IVendorDtoV1Response;\n vendorLocation: IVendorLocationDto;\n setVendor: React.Dispatch<\n React.SetStateAction\n >;\n setIsVendorLocationFormValid: React.Dispatch>;\n setEditingLocationId: React.Dispatch<\n React.SetStateAction\n >;\n setVendorLocation: React.Dispatch<\n React.SetStateAction\n >;\n}\n\ninterface AdminDivisionOption {\n label: string;\n value: string;\n group: string;\n}\n\ninterface CommMethodOption {\n label: string;\n value: CommunicationMethod;\n}\n\nconst commMethodOptions = [\n { value: CommunicationMethod.Email, label: \"Email\" },\n { value: CommunicationMethod.Fax, label: \"Fax\" },\n { value: CommunicationMethod.Print, label: \"Print\" },\n { value: CommunicationMethod.None, label: \"(None)\" }\n];\n\nexport const VendorLocationDetailInfo = ({\n vendor,\n vendorLocation: location,\n setVendor,\n setIsVendorLocationFormValid,\n setEditingLocationId,\n setVendorLocation\n}: DetailInfoProps) => {\n const [isValidNickName, setIsValidNickname] = useState(true);\n const stateOptions: AdminDivisionOption[] = statesEnum.enumNames.map(\n state => {\n return {\n value: state,\n label: state,\n group: strings.contact.detailInfo.administrativeDivisions.states\n };\n }\n );\n const provinceOptions: AdminDivisionOption[] = provincesEnum.enumNames.map(\n province => {\n return {\n value: province,\n label: province,\n group: strings.contact.detailInfo.administrativeDivisions.provinces\n };\n }\n );\n\n const handleChange = (e: any, fieldName?: string) => {\n const nextState = produce(location, draft => {\n if (fieldName !== \"nickname\") validateNickName(location.nickname);\n switch (fieldName) {\n case \"nickname\": {\n const nickname = e.currentTarget.value;\n validateNickName(nickname);\n draft.nickname = nickname;\n break;\n }\n case \"phoneNumber\": {\n const phoneNumber = e.currentTarget.value;\n draft.phoneNumber = phoneNumber;\n break;\n }\n\n case \"faxNumber\": {\n const faxNumber = e.currentTarget.value;\n draft.faxNumber = faxNumber;\n break;\n }\n case \"addressLine1\": {\n const addressLine1 = e.currentTarget.value;\n draft.address.addressLine1 = addressLine1;\n break;\n }\n case \"addressLine2\": {\n const addressLine2 = e.currentTarget.value;\n draft.address.addressLine2 = addressLine2;\n break;\n }\n case \"postalCode\": {\n const postalCode = e.currentTarget.value;\n draft.address.postalCode = postalCode;\n break;\n }\n case \"countryRegion\": {\n const countryRegion = e.currentTarget.value;\n draft.address.countryRegion = countryRegion;\n break;\n }\n case \"city\": {\n const city = e.currentTarget.value;\n draft.address.city = city;\n break;\n }\n case \"communicationMethod\": {\n const communicationMethod = e.value;\n draft.communicationMethod = communicationMethod;\n break;\n }\n case \"state\": {\n const state = e.value;\n draft.address.stateProvince = state;\n break;\n }\n }\n });\n setVendorLocation(nextState);\n\n if (vendor.locations) {\n const filtered = vendor.locations?.filter(loc => loc.id !== nextState.id);\n const updateLocations = [...filtered, nextState];\n setVendor({ ...vendor, locations: updateLocations });\n }\n };\n\n const handleDeleteLocation = () => {\n setEditingLocationId(undefined);\n if (vendor.locations) {\n const filtered = vendor.locations?.filter(loc => loc.id !== location.id);\n setVendor({ ...vendor, locations: filtered });\n }\n };\n\n const validateNickName = (nickName: string) => {\n const isNickNameNotEmpty = isValidString(nickName);\n if (isNickNameNotEmpty) {\n setIsValidNickname(true);\n setIsVendorLocationFormValid(true);\n } else {\n setIsValidNickname(false);\n setIsVendorLocationFormValid(false);\n }\n };\n\n const adminDivisionList = ({ item }: { item: AdminDivisionOption }) => {\n return <>{item.label};\n };\n const adminDivisionHeaders = ({ item }: { item: string }) => {\n return

{item}

;\n };\n const adminDivisionFilter = (option: AdminDivisionOption, search: string) => {\n return option.label.toLowerCase().indexOf(search) !== -1;\n };\n\n return (\n <>\n \n
\n
\n \n \n {strings.contactManagement.vendorLocationDetails.nickname}\n \n handleChange(e, e.currentTarget.name)}\n onBlur={(e: any) => {\n validateNickName(e.target.value);\n handleChange(e, e.currentTarget.name);\n }}\n />\n \n {!isValidNickName && (\n \n {strings.formatString(\n strings.schemas.form.required,\n strings.contactManagement.vendorLocationDetails.nickname\n )}\n \n )}\n \n
\n
\n \n \n {strings.contact.detailInfo.addressLine1}\n \n handleChange(e, e.currentTarget.name)}\n />\n \n
\n
\n \n \n {strings.contact.detailInfo.addressLine2}\n \n handleChange(e, e.currentTarget.name)}\n />\n \n
\n
\n \n {strings.contact.detailInfo.city}\n handleChange(e, e.currentTarget.name)}\n />\n \n
\n
\n \n \n {strings.contact.detailInfo.stateProvince}\n \n option.group}\n groupComponent={adminDivisionHeaders}\n filter={adminDivisionFilter}\n onChange={(opt: AdminDivisionOption) =>\n handleChange(opt, \"state\")\n }\n />\n \n
\n
\n \n \n {strings.contact.detailInfo.postalCode}\n \n handleChange(e, e.currentTarget.name)}\n />\n \n
\n
\n \n \n {strings.contact.detailInfo.countryRegion}\n \n handleChange(e, e.currentTarget.name)}\n />\n \n
\n
\n \n \n {strings.contact.mainInfo.phoneNumber}\n \n handleChange(e, e.currentTarget.name)}\n />\n \n
\n
\n \n \n {strings.contact.detailInfo.faxNumber}\n \n handleChange(e, e.currentTarget.name)}\n />\n \n
\n
\n \n \n {strings.contact.mainInfo.communicationMethod}\n \n \n handleChange(opt, \"communicationMethod\")\n }\n />\n \n
\n
\n
\n {location.nickname && (\n \n \n Delete\n \n )}\n
\n
\n \n );\n};\n\nconst DetailInfo = styled.div`\n div.detailInfo {\n display: grid;\n background-color: #ffffff;\n grid-template-columns: 25% 25% 25% 20%;\n column-gap: 10px;\n row-gap: 10px;\n grid-template-areas:\n \"nickname . . .\"\n \"address1 address1 address2 address2\"\n \"city state postalCode countryRegion\"\n \"phoneNumber faxNumber communicationMethod .\"\n \"deleteLocationBtn . . .\";\n .form-group[required] label:after {\n content: \" *\";\n color: ${ConcreteColors.red200};\n }\n }\n\n div.nickname {\n grid-area: nickname;\n }\n\n div.addressLine1 {\n grid-area: address1;\n }\n\n div.addressLine2 {\n grid-area: address2;\n }\n div.faxNumber {\n grid-area: faxNumber;\n }\n div.phoneNumber {\n grid-area: phoneNumber;\n }\n div.city {\n grid-area: city;\n }\n div.state {\n grid-area: state;\n }\n div.postalCode {\n grid-area: postalCode;\n }\n div.countryRegion {\n grid-area: countryRegion;\n }\n div.communicationMethod {\n grid-area: communicationMethod;\n }\n div.location-delete-button {\n grid-area: deleteLocationBtn;\n padding-top: 1rem;\n }\n`;\n\nconst StyledSelect = styled(Select)`\n .react-select__control {\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n max-height: 34px !important;\n min-height: 34px !important;\n }\n\n .react-select__input {\n height: 15px;\n }\n\n .react-select__single-value {\n padding-bottom: 5px;\n padding-left: 7px;\n }\n .react-select__multi-value {\n background-color: ${ConcreteColors.gray200};\n }\n\n .react-select__value-container {\n padding: 2px;\n }\n`;\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useHcssToken, useHcssUser } from \"modules/account\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport { FullPageLoading } from \"modules/layout/components/FullPageLoading\";\nimport {\n PaneledPage,\n Button,\n Icon,\n Link as HLink,\n notify\n} from \"hcss-components\";\nimport { DropdownList } from \"react-widgets\";\nimport {\n Section,\n SectionHeader,\n SectionTitle,\n NoDataPlaceholder,\n ContentLoadingOverlay,\n UserType,\n isValidString,\n isNullOrWhitespace\n} from \"core\";\nimport { VendorMainInfo } from \"./vendor-main-info\";\nimport { VendorScopeOfWork } from \"./vendor-scopes-of-work\";\nimport { MinorityStatusList } from \"./minority-status-list\";\nimport { strings } from \"localization\";\nimport NavigationPrompt from \"react-router-navigation-prompt\";\nimport ConfirmBack from \"../../../core/components/modals/ConfirmBack\";\nimport { isEqual, sortBy } from \"lodash-es\";\n\nimport {\n CommunicationMethod,\n IAddress\n} from \"api/GeneratedClients/ContactsClient\";\nimport { useSaveVendorDetails } from \"../hooks/use-save-vendor-details\";\nimport { useSelector } from \"react-redux\";\nimport { selectors } from \"modules/contacts\";\nimport { IVendorLocationDto } from \"../../../api/contacts-api-dto-interfaces\";\nimport uuid from \"uuid\";\nimport { VendorLocationDetailInfo } from \"./vendor-location-detail-info\";\nimport { useVendorLocationDropDown } from \"../hooks/use-vendor-location-drop-down\";\nimport { useGetSelectedVendor } from \"../hooks/use-get-selected-vendor\";\n\nexport interface VendorLocationOption {\n display: string;\n value: IVendorLocationDto;\n}\n\nexport const VendorEditDetails = () => {\n const token = useHcssToken();\n const user = useHcssUser();\n const history = useHistory();\n const location = useLocation();\n\n const [showErrors, setShowErrors] = useState(false);\n const [nextLocation, setNextLocation] = useState();\n\n const vendor = useGetSelectedVendor();\n\n const {\n localVendor,\n locationOptions,\n vendorLocation,\n isVendorLocationFormValid,\n setLocalVendor,\n setEditingLocationId,\n setIsVendorLocationFormValid,\n setVendorLocation\n } = useVendorLocationDropDown(vendor);\n\n const isLoading = useSelector(selectors.getLoading);\n const { handleSaveChanges } = useSaveVendorDetails({\n setShowErrors\n });\n\n const hasVendorLocation: boolean =\n !!localVendor &&\n !!localVendor.locations &&\n localVendor.locations.length > 0;\n useEffect(() => {\n if (!isLoading) {\n setLocalVendor(vendor);\n }\n }, [token, isLoading, vendor, setLocalVendor]);\n\n if (!localVendor) {\n return ;\n }\n\n const handleVendorLocationChange = (data: VendorLocationOption) => {\n setEditingLocationId(data.value.id);\n };\n\n const handleOnAddNewVendorLocation = () => {\n const nullNickNameLocation = localVendor.locations?.find(\n location =>\n !isValidString(location.nickname) &&\n !location.isPrimary &&\n !location.isAlternate\n );\n const location = shouldCreateNewEmptyLocation(\n nullNickNameLocation,\n vendorLocation\n )\n ? initializeVendorLocation(localVendor.id)\n : nullNickNameLocation;\n if (vendorLocation) {\n updateVendorLocation(vendorLocation);\n }\n if (location) {\n setEditingLocationId(location.id);\n addVendorLocation(location);\n }\n };\n\n const updateVendorLocation = (vendorLocation: IVendorLocationDto) => {\n const filtered = localVendor.locations?.filter(\n loc => loc.id !== vendorLocation.id\n );\n if (!filtered) return;\n const updatedLocations = [...filtered, vendorLocation];\n const sortedLocations = sortVendorLocations(updatedLocations);\n setLocalVendor({ ...localVendor, locations: sortedLocations });\n };\n\n const addVendorLocation = (vendorLocation: IVendorLocationDto) => {\n if (!localVendor.locations) return;\n if (localVendor.locations.find(loc => loc.id === vendorLocation.id)) return;\n const updatedLocations = [...localVendor.locations, vendorLocation];\n const sortedLocations = sortVendorLocations(updatedLocations);\n setLocalVendor({ ...localVendor, locations: sortedLocations });\n };\n return (\n <>\n \n \n \n {strings.contactManagement.vendorDetails.editTitle}\n \n \n history.replace(`/contacts/${localVendor.id}`)}\n style={{ marginRight: \"2rem\" }}\n >\n {strings.projects.details.header.back}\n \n {\n isVendorLocationFormValid\n ? handleSaveChanges(localVendor, vendorLocation)\n : notify(\n \"danger\",\n strings.contactManagement.vendorEditDetail.error.title,\n strings.contactManagement.vendorEditDetail.error.name\n );\n }}\n >\n \n \n {strings.contactManagement.vendorDetails.save}\n \n \n \n \n \n
\n \n
\n {isLoading && }\n \n
\n
\n {isLoading && }\n \n \n \n {\n strings.contactManagement.vendorEditDetail\n .officeSectionTitle\n }\n \n {hasVendorLocation && [\n \n \n
,\n \n \n {\n strings.contactManagement.vendorEditDetail\n .addOfficeButton\n }\n \n ]}\n \n \n {hasVendorLocation && vendorLocation ? (\n \n ) : (\n \n )}\n \n {user.type === UserType.HcssSubscription && (\n
\n {isLoading && }\n \n \n {strings.contact.scopeOfWork.scopesOfWork}\n \n \n \n
\n )}\n \n {user.type === UserType.HcssSubscription && (\n
\n \n \n {strings.contact.minorityStatus.minorityStatuses}\n \n \n \n
\n )}\n \n
\n
\n {\n setNextLocation(next?.pathname);\n return (\n location.pathname !== next?.pathname &&\n !isLoading &&\n !isEqual(localVendor, vendor)\n );\n }}\n afterConfirm={() => {\n const location = {\n pathname: nextLocation ?? `/contacts`,\n state: { hasUpdated: true }\n };\n\n history.replace(location);\n }}\n allowGoBack\n >\n {({ onConfirm, onCancel }) => {\n return (\n {\n isVendorLocationFormValid\n ? handleSaveChanges(localVendor, vendorLocation)\n : notify(\n \"danger\",\n strings.contactManagement.vendorEditDetail.error.title,\n strings.contactManagement.vendorEditDetail.error.name\n );\n onConfirm();\n }}\n >\n {strings.solicitations.setup.confirmBack}\n \n );\n }}\n \n \n );\n};\n\nexport default VendorEditDetails;\n\nconst InfoContainer = styled.div<{ isGC: boolean }>`\n display: flex;\n width: ${props => (props.isGC ? \"53%\" : \"100%\")};\n\n flex-direction: column;\n margin-right: 16px;\n`;\n\nconst initializeVendorLocation = (vendorId: string): IVendorLocationDto => {\n const address: IAddress = {\n addressLine1: \"\",\n addressLine2: \"\",\n building: \"\",\n city: \"\",\n stateProvince: \"\",\n countryRegion: \"\",\n postalCode: \"\"\n };\n\n return {\n vendorId: vendorId,\n id: uuid(),\n address: address,\n phoneNumber: \"\",\n faxNumber: \"\",\n webAddress: \"\",\n nickname: \"\",\n communicationMethod: CommunicationMethod.None\n };\n};\n\nconst shouldCreateNewEmptyLocation = (\n nullNickNameLocation: IVendorLocationDto | undefined,\n vendorLocation: IVendorLocationDto | undefined\n) => {\n return (\n nullNickNameLocation === undefined ||\n (!isNullOrWhitespace(vendorLocation?.nickname) &&\n nullNickNameLocation.id === vendorLocation?.id)\n );\n};\nexport const sortVendorLocations = (locations: IVendorLocationDto[]) => {\n if (!locations || locations.length === 0) return;\n return sortBy(locations, function (loc) {\n return loc.nickname.toLowerCase();\n });\n};\n","export interface GuestUserClaims {\n email: string;\n resourceId: string;\n}\n\nexport interface UserClaims {\n companyId: string;\n companyName: string;\n businessUnitName: string;\n hcssUserId: string;\n firstName: string;\n lastName: string;\n email: string;\n isFullUser: boolean;\n isLimitedUser: boolean;\n isBetaUser: boolean;\n isSubcontractorUser: boolean;\n isCredentialAdmin: boolean;\n}\n\n /**\n * For claims to be available on the client, \n * they must be configured on the identity scope.\n * For this client app the identity scope is heavybid:insights.\n * @param {*} profile\n * @returns UserClaims\n */\n export function getUserClaimsFromProfile(profile: Record) {\n const hcssNamespace = \"http://credentials.hcssapps.com/schemas/2015/09/identity/claims\";\n const msftNamespace = \"http://schemas.xmlsoap.org/ws/2005/05/identity/claims\";\n\n // const isSubcontractorAdmin = profile[msftNamespace + \"/role\"] === \"Subcontractor Admin\";\n const betaUser = !!profile[hcssNamespace + \"/appaccess/PreConstruction\"];\n const betaCompany = profile[hcssNamespace + \"/estimatemanagement\"] === \"True\";\n \n const claims: UserClaims = {\n companyId: profile[hcssNamespace + \"/companyid\"],\n companyName: profile[hcssNamespace + \"/companyname\"],\n businessUnitName: profile[hcssNamespace + \"/businessunitname\"],\n hcssUserId: profile[hcssNamespace + \"/userid\"],\n firstName: profile[msftNamespace + \"/givenname\"],\n lastName: profile[msftNamespace + \"/surname\"],\n email: profile[hcssNamespace + \"/emailcontact\"],\n isFullUser: !!profile[hcssNamespace + \"/appaccess/HeavyBidAddOnsPreConPT\"],\n isLimitedUser: !!profile[hcssNamespace + \"/appaccess/HeavyBidFreeInsights\"],\n isBetaUser: betaCompany && betaUser,\n isSubcontractorUser: profile[hcssNamespace + \"/issubcontractor\"] === \"True\",\n isCredentialAdmin: profile[\"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\"] === \"Admin\"\n }\n\n\n return claims;\n }\n","import { View } from \"api\";\n\nexport const editArchivedEstimateList: View = {\n schemaId: \"estimatesextended\",\n filters: {\n \"values.isActiveEstimate\": {\n columnName: \"values.isActiveEstimate\",\n filterOperation: 10,\n value: false\n }\n },\n grouping: [],\n columnSummaries: [],\n hiddenColumns: [\n \"values.description\",\n \"values.isActiveEstimate\",\n \"values.isExcludedEstimate\",\n \"values.heavyBidDivision\",\n \"values.filters.projectName\",\n \"values.filters.projectNumber\",\n \"values.filters.engineer\",\n \"values.filters.startDate\",\n \"values.filters.reviewDate\",\n \"values.filters.createdDate\",\n \"values.filters.takeoffAmount\",\n \"values.filters.profitBidquan\",\n \"values.filters.profitTakeoff\",\n \"values.filters.estimateTag1\",\n \"values.filters.estimateTag2\",\n \"values.filters.estimateTag3\",\n \"values.filters.estimateTag4\",\n \"values.filters.estimateTag5\",\n \"values.filters.estimateTag6\",\n \"values.filters.userDefinedText1\",\n \"values.filters.userDefinedText2\",\n \"values.filters.userDefinedText3\",\n \"values.filters.userDefinedText4\",\n \"values.filters.userDefinedText5\",\n \"values.filters.userDefinedText6\",\n \"values.filters.userDefinedText7\",\n \"values.filters.userDefinedText8\",\n \"values.filters.userDefinedText9\",\n \"values.filters.userDefinedText10\",\n \"values.filters.userDefinedText11\",\n \"values.filters.userDefinedText12\",\n \"values.filters.userDefinedText13\",\n \"values.filters.userDefinedText14\",\n \"values.filters.userDefinedText15\",\n \"values.filters.userDefinedText16\",\n \"values.filters.userDefinedText17\",\n \"values.filters.userDefinedText18\",\n \"values.filters.userDefinedText19\",\n \"values.filters.userDefinedText20\",\n \"values.filters.userDefinedInteger1\",\n \"values.filters.userDefinedInteger2\",\n \"values.filters.userDefinedInteger3\",\n \"values.filters.userDefinedInteger4\",\n \"values.filters.userDefinedInteger5\",\n \"values.filters.userDefinedNumber1\",\n \"values.filters.userDefinedNumber2\",\n \"values.filters.userDefinedNumber3\",\n \"values.filters.userDefinedNumber4\",\n \"values.filters.userDefinedNumber5\",\n \"values.filters.userDefinedNumber6\",\n \"values.filters.userDefinedNumber7\",\n \"values.filters.userDefinedNumber8\",\n \"values.filters.userDefinedNumber9\",\n \"values.filters.userDefinedNumber10\",\n \"values.filters.userDefinedNumber11\",\n \"values.filters.userDefinedNumber12\",\n \"values.filters.userDefinedNumber13\",\n \"values.filters.userDefinedNumber14\",\n \"values.filters.userDefinedNumber15\",\n \"values.filters.userDefinedNumber16\",\n \"values.filters.userDefinedNumber17\",\n \"values.filters.userDefinedNumber18\",\n \"values.filters.userDefinedNumber19\",\n \"values.filters.userDefinedNumber20\",\n \"values.filters.userDefinedDate1\",\n \"values.filters.userDefinedDate2\",\n \"values.filters.userDefinedDate3\",\n \"values.filters.userDefinedDate4\",\n \"values.filters.userDefinedDate5\",\n \"values.filters.address\",\n \"values.filters.latitude\",\n \"values.filters.longitude\",\n \"values.totals.baseLabor_Direct\",\n \"values.totals.baseLabor_Indirect\",\n \"values.totals.baseLabor_Total\",\n \"values.totals.burden_Direct\",\n \"values.totals.burden_Indirect\",\n \"values.totals.burden_Total\",\n \"values.totals.totalLabor_Direct\",\n \"values.totals.totalLabor_Indirect\",\n \"values.totals.totalLabor_Total\",\n \"values.totals.permanentMaterial_Direct\",\n \"values.totals.permanentMaterial_Indirect\",\n \"values.totals.permanentMaterial_Total\",\n \"values.totals.constructionMaterial_Direct\",\n \"values.totals.constructionMaterial_Indirect\",\n \"values.totals.constructionMaterial_Total\",\n \"values.totals.subcontract_Direct\",\n \"values.totals.subcontract_Indirect\",\n \"values.totals.subcontract_Total\",\n \"values.totals.equipmentOperatingExpense_Direct\",\n \"values.totals.equipmentOperatingExpense_Indirect\",\n \"values.totals.equipmentOperatingExpense_Total\",\n \"values.totals.companyEquipment_Direct\",\n \"values.totals.companyEquipment_Indirect\",\n \"values.totals.companyEquipment_Total\",\n \"values.totals.rentedEquipment_Direct\",\n \"values.totals.rentedEquipment_Indirect\",\n \"values.totals.rentedEquipment_Total\",\n \"values.totals.misc1_Direct\",\n \"values.totals.misc1_Indirect\",\n \"values.totals.misc1_Total\",\n \"values.totals.misc2_Direct\",\n \"values.totals.misc2_Indirect\",\n \"values.totals.misc2_Total\",\n \"values.totals.misc3_Direct\",\n \"values.totals.misc3_Indirect\",\n \"values.totals.misc3_Total\",\n \"values.totals.totalEntryCost_Takeoff_Direct\",\n \"values.totals.totalEntryCost_Takeoff_Indirect\",\n \"values.totals.totalEntryCost_Takeoff_Total\",\n \"values.totals.totalEntryCost_Bid_Direct\",\n \"values.totals.totalEntryCost_Bid_Indirect\",\n \"values.totals.totalEntryCost_Bid_Total\",\n \"values.totals.balMarkup_Bid\",\n \"values.totals.actualMarkup_Bid\",\n \"values.totals.balancedBid_Bid\",\n \"values.totals.addonBondTotal\",\n \"values.totals.totalEqp_Direct\",\n \"values.totals.totalEqp_Indirect\",\n \"values.totals.totalEqp_Total\",\n \"values.totals.manhours_Direct\",\n \"values.totals.manhours_Indirect\",\n \"values.totals.manhours_Total\",\n \"values.totals.addon_Cost\",\n \"values.totals.bond\",\n \"values.totals.addon_Cost\",\n \"values.totals.addon_Markup\",\n \"values.totals.addon_Total\",\n \"values.totals.job_Duration\",\n \"values.totals.balMarkup_Takeoff\",\n \"values.totals.actualMarkup_Takeoff\",\n \"values.totals.balancedBid_Takeoff\",\n \"values.totals.passThrough_Cost\",\n \"values.totals.passThrough_Adjustment\",\n \"values.totals.passThrough_Total\",\n \"values.totals.totalCost_Bid_LessPassThrough\",\n \"values.totals.totalCost_Bid\",\n \"values.totals.total_User_Adjustments\",\n \"values.totals.total_User_Adjustments_Cost\",\n \"values.totals.desired_Bid\",\n \"values.totals.desired_Bid_Diff\",\n \"values.totals.bidTotal_Takeoff\",\n \"values.totals.totalCost_Takeoff_LessPassThrough\",\n \"values.totals.markupPercentCost_Takeoff\",\n \"values.totals.markupPercentCost_Bid\",\n \"values.totals.markupPercentSales_Takeoff\",\n \"values.totals.markupPercentSales_Bid\",\n \"values.totals.totalCost_Takeoff_LessPassThroughAndAdjustments\",\n \"values.totals.totalCost_Bid_LessPassThroughAndAdjustments\",\n \"values.totals.totalEntryCost_Bid_Spread_Indirect\",\n \"values.totals.addonBond_Cost_Bid_Spread_Total\",\n \"values.totals.totalCost_Bid_Spread\",\n \"values.totals.balMarkup_Bid_Spread\",\n \"values.totals.actualMarkup_Bid_Spread\",\n \"values.totals.actv_User_Quan1\",\n \"values.totals.actv_User_Quan2\",\n \"values.totals.actv_User_Quan3\",\n \"values.totals.actv_User_Quan4\",\n \"values.totals.open_Biditems\",\n \"values.totals.minority_Goal_Percent\",\n \"values.totals.minority_Goal_Total\",\n \"values.totals.minority_Current_Percent\",\n \"values.totals.minority_Current_Total\",\n \"values.processedStatus\"\n ],\n id: \"editarchivedestimateslist\",\n name: \"Edit Archived Estimates\",\n ordering: [\n \"values.code\",\n \"values.name\",\n \"values.lastModified\",\n \"values.filters.bidDate\",\n \"values.filters.typeOfWork\",\n \"values.filters.estimator\",\n \"values.totals.totalCost_Takeoff\",\n \"values.totals.bidTotal_Bid\",\n \"values.filters.status\",\n \"values.filters.owner\",\n \"values.filters.state\"\n ],\n displayedColumns: [\n \"values.code\",\n \"values.name\",\n \"values.lastModified\",\n \"values.filters.bidDate\",\n \"values.filters.typeOfWork\",\n \"values.filters.estimator\",\n \"values.totals.totalCost_Takeoff\",\n \"values.totals.bidTotal_Bid\",\n \"values.filters.status\",\n \"values.filters.owner\",\n \"values.filters.state\"\n ],\n sorting: [\n {\n columnName: \"values.lastModified\",\n direction: \"desc\"\n }\n ],\n chartConfigs: [],\n chartConfig: {},\n calendarConfig: {}\n};\n","import { View } from \"api\";\n\n// TODO: Update this\n\nexport const keyIndicators: View = {\n schemaId: \"estimatesextended\",\n filters: {\n \"values.isActiveEstimate\": {\n columnName: \"values.isActiveEstimate\",\n filterOperation: 10,\n value: false\n }\n },\n grouping: [],\n columnSummaries: [],\n hiddenColumns: [\n \"values.description\",\n \"values.isActiveEstimate\",\n \"values.division\",\n \"values.filters.projectName\",\n \"values.filters.projectNumber\",\n \"values.filters.engineer\",\n \"values.filters.startDate\",\n \"values.filters.reviewDate\",\n \"values.filters.createdDate\",\n \"values.filters.takeoffAmount\",\n \"values.filters.profitBidquan\",\n \"values.filters.profitTakeoff\",\n \"values.filters.estimateTag1\",\n \"values.filters.estimateTag2\",\n \"values.filters.estimateTag3\",\n \"values.filters.estimateTag4\",\n \"values.filters.estimateTag5\",\n \"values.filters.estimateTag6\",\n \"values.filters.userDefinedText1\",\n \"values.filters.userDefinedText2\",\n \"values.filters.userDefinedText3\",\n \"values.filters.userDefinedText4\",\n \"values.filters.userDefinedText5\",\n \"values.filters.userDefinedText6\",\n \"values.filters.userDefinedText7\",\n \"values.filters.userDefinedText8\",\n \"values.filters.userDefinedText9\",\n \"values.filters.userDefinedText10\",\n \"values.filters.userDefinedText11\",\n \"values.filters.userDefinedText12\",\n \"values.filters.userDefinedText13\",\n \"values.filters.userDefinedText14\",\n \"values.filters.userDefinedText15\",\n \"values.filters.userDefinedText16\",\n \"values.filters.userDefinedText17\",\n \"values.filters.userDefinedText18\",\n \"values.filters.userDefinedText19\",\n \"values.filters.userDefinedText20\",\n \"values.filters.userDefinedInteger1\",\n \"values.filters.userDefinedInteger2\",\n \"values.filters.userDefinedInteger3\",\n \"values.filters.userDefinedInteger4\",\n \"values.filters.userDefinedInteger5\",\n \"values.filters.userDefinedNumber1\",\n \"values.filters.userDefinedNumber2\",\n \"values.filters.userDefinedNumber3\",\n \"values.filters.userDefinedNumber4\",\n \"values.filters.userDefinedNumber5\",\n \"values.filters.userDefinedNumber6\",\n \"values.filters.userDefinedNumber7\",\n \"values.filters.userDefinedNumber8\",\n \"values.filters.userDefinedNumber9\",\n \"values.filters.userDefinedNumber10\",\n \"values.filters.userDefinedNumber11\",\n \"values.filters.userDefinedNumber12\",\n \"values.filters.userDefinedNumber13\",\n \"values.filters.userDefinedNumber14\",\n \"values.filters.userDefinedNumber15\",\n \"values.filters.userDefinedNumber16\",\n \"values.filters.userDefinedNumber17\",\n \"values.filters.userDefinedNumber18\",\n \"values.filters.userDefinedNumber19\",\n \"values.filters.userDefinedNumber20\",\n \"values.filters.userDefinedDate1\",\n \"values.filters.userDefinedDate2\",\n \"values.filters.userDefinedDate3\",\n \"values.filters.userDefinedDate4\",\n \"values.filters.userDefinedDate5\",\n \"values.filters.address\",\n \"values.filters.latitude\",\n \"values.filters.longitude\",\n \"values.totals.baseLabor_Direct\",\n \"values.totals.baseLabor_Indirect\",\n \"values.totals.baseLabor_Total\",\n \"values.totals.burden_Direct\",\n \"values.totals.burden_Indirect\",\n \"values.totals.burden_Total\",\n \"values.totals.totalLabor_Direct\",\n \"values.totals.totalLabor_Indirect\",\n \"values.totals.totalLabor_Total\",\n \"values.totals.permanentMaterial_Direct\",\n \"values.totals.permanentMaterial_Indirect\",\n \"values.totals.permanentMaterial_Total\",\n \"values.totals.constructionMaterial_Direct\",\n \"values.totals.constructionMaterial_Indirect\",\n \"values.totals.constructionMaterial_Total\",\n \"values.totals.subcontract_Direct\",\n \"values.totals.subcontract_Indirect\",\n \"values.totals.subcontract_Total\",\n \"values.totals.equipmentOperatingExpense_Direct\",\n \"values.totals.equipmentOperatingExpense_Indirect\",\n \"values.totals.equipmentOperatingExpense_Total\",\n \"values.totals.companyEquipment_Direct\",\n \"values.totals.companyEquipment_Indirect\",\n \"values.totals.companyEquipment_Total\",\n \"values.totals.rentedEquipment_Direct\",\n \"values.totals.rentedEquipment_Indirect\",\n \"values.totals.rentedEquipment_Total\",\n \"values.totals.misc1_Direct\",\n \"values.totals.misc1_Indirect\",\n \"values.totals.misc1_Total\",\n \"values.totals.misc2_Direct\",\n \"values.totals.misc2_Indirect\",\n \"values.totals.misc2_Total\",\n \"values.totals.misc3_Direct\",\n \"values.totals.misc3_Indirect\",\n \"values.totals.misc3_Total\",\n \"values.totals.totalEntryCost_Takeoff_Direct\",\n \"values.totals.totalEntryCost_Takeoff_Indirect\",\n \"values.totals.totalEntryCost_Takeoff_Total\",\n \"values.totals.totalEntryCost_Bid_Direct\",\n \"values.totals.totalEntryCost_Bid_Indirect\",\n \"values.totals.totalEntryCost_Bid_Total\",\n \"values.totals.balMarkup_Bid\",\n \"values.totals.actualMarkup_Bid\",\n \"values.totals.balancedBid_Bid\",\n \"values.totals.bidTotal_Bid\",\n \"values.totals.addonBondTotal\",\n \"values.totals.totalEqp_Direct\",\n \"values.totals.totalEqp_Indirect\",\n \"values.totals.totalEqp_Total\",\n \"values.totals.manhours_Direct\",\n \"values.totals.manhours_Indirect\",\n \"values.totals.manhours_Total\",\n \"values.totals.addon_Cost\",\n \"values.totals.bond\",\n \"values.totals.addon_Cost\",\n \"values.totals.addon_Markup\",\n \"values.totals.addon_Total\",\n \"values.totals.totalCost_Takeoff\",\n \"values.totals.job_Duration\",\n \"values.totals.balMarkup_Takeoff\",\n \"values.totals.actualMarkup_Takeoff\",\n \"values.totals.balancedBid_Takeoff\",\n \"values.totals.passThrough_Cost\",\n \"values.totals.passThrough_Adjustment\",\n \"values.totals.passThrough_Total\",\n \"values.totals.totalCost_Bid_LessPassThrough\",\n \"values.totals.totalCost_Bid\",\n \"values.totals.total_User_Adjustments\",\n \"values.totals.total_User_Adjustments_Cost\",\n \"values.totals.desired_Bid\",\n \"values.totals.desired_Bid_Diff\",\n \"values.totals.bidTotal_Takeoff\",\n \"values.totals.totalCost_Takeoff_LessPassThrough\",\n \"values.totals.markupPercentCost_Takeoff\",\n \"values.totals.markupPercentCost_Bid\",\n \"values.totals.markupPercentSales_Takeoff\",\n \"values.totals.markupPercentSales_Bid\",\n \"values.totals.totalCost_Takeoff_LessPassThroughAndAdjustments\",\n \"values.totals.totalCost_Bid_LessPassThroughAndAdjustments\",\n \"values.totals.totalEntryCost_Bid_Spread_Indirect\",\n \"values.totals.addonBond_Cost_Bid_Spread_Total\",\n \"values.totals.totalCost_Bid_Spread\",\n \"values.totals.balMarkup_Bid_Spread\",\n \"values.totals.actualMarkup_Bid_Spread\",\n \"values.totals.actv_User_Quan1\",\n \"values.totals.actv_User_Quan2\",\n \"values.totals.actv_User_Quan3\",\n \"values.totals.actv_User_Quan4\",\n \"values.totals.open_Biditems\",\n \"values.totals.minority_Goal_Percent\",\n \"values.totals.minority_Goal_Total\",\n \"values.totals.minority_Current_Percent\",\n \"values.totals.minority_Current_Total\"\n ],\n id: \"keyindicators\",\n name: \"Key Indicators\",\n ordering: [\n \"values.code\",\n \"values.name\",\n \"values.lastModified\",\n \"values.filters.bidDate\",\n \"values.filters.typeOfWork\",\n \"values.filters.estimator\",\n \"values.totals.totalCost_Takeoff\",\n \"values.totals.bidTotal_Bid\",\n \"values.filters.status\",\n \"values.filters.owner\",\n \"values.filters.state\"\n ],\n displayedColumns: [\n \"values.code\",\n \"values.name\",\n \"values.lastModified\",\n \"values.filters.bidDate\",\n \"values.filters.typeOfWork\",\n \"values.filters.estimator\",\n \"values.totals.totalCost_Takeoff\",\n \"values.totals.bidTotal_Bid\",\n \"values.filters.status\",\n \"values.filters.owner\",\n \"values.filters.state\"\n ],\n sorting: [\n {\n columnName: \"values.lastModified\",\n direction: \"desc\"\n }\n ],\n chartConfigs: [],\n chartConfig: {},\n calendarConfig: {}\n};\n","import { View, FilterOperation } from \"api\";\nimport { filterConstants } from \"modules/schemas/components/filters/common\";\nimport { filterListValues } from \"modules/schemas/standard-schemas/quote-dashboard-schema\";\n\nexport const quoteDashboard: View = {\n schemaId: \"quoteDashboard\",\n filters: {\n // TODO: re-enable this later, we can add any project filters this same way\n // name: {\n // columnName: \"name\",\n // filterOperation: FilterOperation.Contains,\n // config: {\n // placeholder: \"Type...\"\n // }\n // },\n lastModified: {\n columnName: \"lastModified\",\n filterOperation: FilterOperation.Between,\n config: {\n allowedOptions: [\n filterConstants.dates.nowM7,\n filterConstants.dates.nowM30,\n filterConstants.dates.nowM365\n ],\n placeholder: \"Select...\"\n }\n },\n status: {\n columnName: \"status\",\n filterOperation: FilterOperation.Any,\n config: {\n listValues: filterListValues\n }\n },\n quoteFolders: {\n columnName: \"quoteFolders\",\n filterOperation: FilterOperation.Any\n }\n },\n grouping: [],\n hiddenColumns: [],\n columnSummaries: [],\n id: \"quoteDashboard\",\n name: \"Quote Dashboard\",\n ordering: [],\n sorting: [],\n chartConfigs: [],\n chartConfig: {},\n calendarConfig: {}\n};\n","import produce from \"immer\";\nimport { map, values, sortBy, keyBy } from \"lodash-es\";\nimport { createSelector } from \"reselect\";\nimport {\n ActionType,\n createAction,\n createAsyncAction,\n getType\n} from \"typesafe-actions\";\nimport {\n ColumnSummary,\n SchemaViewFilter,\n SchemaViewGrouping,\n SchemaViewSorting,\n View\n} from \"api\";\nimport * as account from \"modules/account\";\nimport * as schemas from \"modules/schemas\";\nimport { editArchivedEstimateList } from \"./standard-views/edit-estimate-list\";\nimport { keyIndicators } from \"./standard-views/key-indicators\";\nimport { quoteDashboard } from \"./standard-views/quote-dashboard\";\nimport * as config from \"modules/configurationSettings\";\nimport { getAllSchemas } from \"../schemas/selectors\";\nimport uuid from \"uuid\";\n\nexport const STATE_KEY = \"views\";\n\n// Models\nexport interface State {\n allIds: string[];\n workingCopy: { [key: string]: View };\n original: { [key: string]: View };\n loading: boolean;\n loaded: boolean;\n errors: string[];\n selectedViews: { [key: string]: string };\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n loadViews: createAsyncAction(\n \"VIEWS/LOAD_REQUEST\",\n \"VIEWS/LOAD_SUCCESS\",\n \"VIEWS/LOAD_FAILURE\"\n )(),\n\n saveView: createAsyncAction(\n \"VIEWS/SAVE_REQUEST\",\n \"VIEWS/SAVE_SUCCESS\",\n \"VIEWS/SAVE_FAILURE\"\n )<\n {\n view: View;\n meta?: {\n type?: string;\n message?: string;\n setAsSelected?: boolean;\n isNewView?: boolean;\n tableId?: string;\n userId?: string;\n };\n },\n View,\n View\n >(),\n\n deleteView: createAsyncAction(\n \"VIEWS/DELETE_REQUEST\",\n \"VIEWS/DELETE_SUCCESS\",\n \"VIEWS/DELETE_FAILURE\"\n )<{ viewId: string; meta?: { tableId?: string } }, string, string>(),\n\n claimView: createAsyncAction(\n \"VIEWS/CLAIM_REQUEST\",\n \"VIEWS/CLAIM_SUCCESS\",\n \"VIEWS/CLAIM_FAILURE\"\n )<{ viewId: string; userId: string }, View, string>(),\n\n updateViews: createAction(\"VIEWS/UPDATE\", resolve => {\n return (views: View[]) => resolve({ views });\n }),\n\n resetView: createAction(\"VIEWS/RESET\", resolve => {\n return (viewId: string) => resolve({ viewId });\n }),\n\n updateViewAccess: createAction(\"VIEWS/UPDATE_ACCESS\", resolve => {\n return (viewId: string, isPublic: boolean) => resolve({ viewId, isPublic });\n }),\n\n updateViewOrdering: createAction(\"VIEWS/UPDATE_ORDERING\", resolve => {\n return (viewId: string, ordering: string[]) =>\n resolve({ viewId, ordering });\n }),\n\n updateViewGrouping: createAction(\"VIEWS/UPDATE_GROUPING\", resolve => {\n return (viewId: string, grouping: SchemaViewGrouping[]) =>\n resolve({ viewId, grouping });\n }),\n\n updateViewSorting: createAction(\"VIEWS/UPDATE_SORTING\", resolve => {\n return (viewId: string, sorting: SchemaViewSorting[]) =>\n resolve({ viewId, sorting });\n }),\n\n updateViewSummary: createAction(\"VIEWS/UPDATE_SUMMARY\", resolve => {\n return (viewId: string, columnSummaries: ColumnSummary[]) =>\n resolve({ viewId, columnSummaries });\n }),\n\n updateViewFilters: createAction(\"VIEWS/UPDATE_FILTERS\", resolve => {\n return (viewId: string, filters: View[\"filters\"]) =>\n resolve({ viewId, filters });\n }),\n\n updateViewFilter: createAction(\"VIEWS/UPDATE_FILTER\", resolve => {\n return (viewId: string, filter: SchemaViewFilter) =>\n resolve({ viewId, filter });\n }),\n\n updateViewDisplayedColumns: createAction(\n \"VIEWS/UPDATE_DISPLAYED_COLUMNS\",\n resolve => {\n return (viewId: string, displayedColumns: string[]) =>\n resolve({ viewId, displayedColumns });\n }\n ),\n\n updateViewColoring: createAction(\"VIEWS/UPDATE_COLORING\", resolve => {\n return (viewId: string, coloringColumnName: string) =>\n resolve({ viewId, coloringColumnName });\n }),\n\n updateViewType: createAction(\"VIEWS/UPDATE_TYPE\", resolve => {\n return (\n viewId: string,\n type: {\n calendar: boolean;\n list: boolean;\n charts: boolean;\n map: boolean;\n }\n ) => resolve({ viewId, type });\n }),\n\n createChartConfig: createAction(\"VIEWS/COPY_CHART_CONFIG\", resolve => {\n return (viewId: string, chartConfigToCopy: Record) =>\n resolve({ viewId, chartConfigToCopy });\n }),\n\n deleteChartConfig: createAction(\"VIEWS/DELETE_CHART_CONFIG\", resolve => {\n return (viewId: string, chartConfigIdToDelete: Record) =>\n resolve({ viewId, chartConfigIdToDelete });\n }),\n\n updateChartConfig: createAction(\"VIEWS/UPDATE_CHART_CONFIG\", resolve => {\n return (\n viewId: string,\n chartId: string,\n key: string,\n value: string | string[]\n ) => resolve({ viewId, chartId, key, value });\n }),\n\n updateLayout: createAction(\"VIEWS/UPDATE_LAYOUT\", resolve => {\n return (viewId: string, layout: { [key: string]: unknown }) =>\n resolve({ viewId, layout });\n }),\n updateCalendarConfig: createAction(\n \"VIEWS/UPDATE_CALENDAR_CONFIG\",\n resolve => {\n return (viewId: string, calendarConfig: { [key: string]: unknown }) =>\n resolve({ viewId, calendarConfig });\n }\n ),\n\n setSelectedView: createAction(\"VIEWS/SET_SELECTED_VIEW\", resolve => {\n return (tableId: string, viewId: string) => resolve({ tableId, viewId });\n }),\n\n updateMapStyle: createAction(\"VIEWS/UPDATE_MAP_STYLE\", resolve => {\n return (viewId: string) => resolve({ viewId });\n }),\n\n setDefaultView: createAction(\"VIEWS/SET_DEFAULT_VIEW\", resolve => {\n return (view: View, tableId: string) => resolve({ view, tableId });\n }),\n\n hideView: createAction(\"VIEWS/HIDE_VIEW\", resolve => {\n return (viewId: string) => resolve({ viewId });\n })\n};\n\nexport type ViewActions = ActionType;\n\nconst inMemoryViews = normalizeViews([\n editArchivedEstimateList,\n keyIndicators,\n quoteDashboard\n]);\nconst inMemoryViewsLookup = keyBy(inMemoryViews, v => v.id);\nconst initialState: State = {\n allIds: inMemoryViews.map(v => v.id),\n workingCopy: inMemoryViewsLookup,\n original: inMemoryViewsLookup,\n loading: false,\n loaded: false,\n selectedViews: {},\n errors: []\n};\n\n// Reducer\nexport const reducer = (state = initialState, action: ViewActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.loadViews.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.loadViews.success): {\n const views = normalizeViews(action.payload);\n views.forEach(view => {\n if (!(view.id in draft.workingCopy)) {\n draft.allIds.push(view.id);\n }\n //TODO: THIS BLOCK CAN BE REMOVED AS PART OF FUTURE TECH DEBT\n // It is necessary for HBW-3088, and is written to avoid any migrations\n // and prevent downtime between the preprod->prod swap\n if (\n Object.keys(view.chartConfig).length > 0 &&\n view.chartConfigs.length === 0\n ) {\n const existingChartConfig = { ...view.chartConfig };\n view.chartConfigs = [{ ...existingChartConfig, id: \"chart\" }];\n }\n draft.workingCopy[view.id] = view;\n draft.original[view.id] = view;\n });\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n case getType(actions.loadViews.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error loading views: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.saveView.request): {\n const view = action.payload.view;\n draft.workingCopy[view.id] = view;\n if (!draft.allIds.includes(view.id)) {\n draft.allIds.push(view.id);\n }\n break;\n }\n\n case getType(actions.saveView.success): {\n draft.original[action.payload.id] = action.payload;\n draft.workingCopy[action.payload.id] = action.payload;\n draft.allIds = Object.keys(draft.original).map(\n key => draft.original[key].id\n );\n break;\n }\n\n case getType(actions.saveView.failure): {\n const view = action.payload;\n\n if (draft.original[view.id]) {\n draft.workingCopy[view.id] = draft.original[view.id];\n } else {\n delete draft.workingCopy[view.id];\n draft.allIds = Object.values(draft.workingCopy).map(v => v.id);\n }\n break;\n }\n\n case getType(actions.deleteView.request): {\n delete draft.workingCopy[action.payload.viewId];\n const index = draft.allIds.indexOf(action.payload.viewId);\n if (index > -1) {\n draft.allIds.splice(index, 1);\n }\n break;\n }\n\n case getType(actions.deleteView.success): {\n delete draft.original[action.payload];\n break;\n }\n\n case getType(actions.deleteView.failure): {\n draft.workingCopy[action.payload] = draft.original[action.payload];\n draft.allIds.push(action.payload);\n break;\n }\n\n case getType(actions.claimView.request): {\n draft.workingCopy[action.payload.viewId].createdByUserId =\n action.payload.userId;\n break;\n }\n\n case getType(actions.claimView.success): {\n const viewId = action.payload.id;\n draft.original[viewId] = action.payload;\n draft.workingCopy[viewId] = action.payload;\n draft.original[viewId].layout = normalizeViewLayout(\n draft.original[viewId].layout,\n getViewSections(draft.original[viewId])\n );\n draft.workingCopy[viewId].layout = normalizeViewLayout(\n draft.workingCopy[viewId].layout,\n getViewSections(draft.workingCopy[viewId])\n );\n break;\n }\n\n case getType(actions.claimView.failure): {\n draft.workingCopy[action.payload].createdByUserId =\n draft.original[action.payload].createdByUserId;\n break;\n }\n\n case getType(actions.updateViews): {\n const { views } = action.payload;\n views.forEach(view => {\n const currentIndex = draft.allIds.indexOf(view.id);\n if (view.deleted) {\n if (currentIndex > -1) {\n draft.allIds.splice(currentIndex, 1);\n }\n if (view.id in draft.workingCopy) {\n delete draft.workingCopy[view.id];\n }\n if (view.id in draft.original) {\n delete draft.original[view.id];\n }\n draft.allIds = map(draft.workingCopy, v => v.id);\n } else {\n view.layout = normalizeViewLayout(\n view.layout,\n getViewSections(view)\n );\n draft.workingCopy[view.id] = view;\n draft.original[view.id] = view;\n if (currentIndex === -1) {\n draft.allIds.push(view.id);\n }\n }\n });\n break;\n }\n\n case getType(actions.resetView): {\n draft.workingCopy[action.payload.viewId] =\n state.original[action.payload.viewId];\n break;\n }\n\n case getType(actions.updateViewAccess): {\n const { viewId, isPublic } = action.payload;\n draft.workingCopy[viewId].isPublic = isPublic;\n break;\n }\n\n case getType(actions.updateViewOrdering): {\n const { viewId, ordering } = action.payload;\n draft.workingCopy[viewId].ordering = ordering;\n break;\n }\n\n case getType(actions.updateViewGrouping): {\n const { viewId, grouping } = action.payload;\n draft.workingCopy[viewId].grouping = grouping;\n break;\n }\n\n case getType(actions.updateViewSorting): {\n const { viewId, sorting } = action.payload;\n draft.workingCopy[viewId].sorting = sorting;\n break;\n }\n\n case getType(actions.updateViewSummary): {\n const { viewId, columnSummaries } = action.payload;\n draft.workingCopy[viewId].columnSummaries = columnSummaries;\n break;\n }\n\n case getType(actions.updateViewFilters): {\n const { viewId, filters } = action.payload;\n draft.workingCopy[viewId].filters = filters;\n break;\n }\n\n case getType(actions.updateViewFilter): {\n const { viewId, filter } = action.payload;\n draft.workingCopy[viewId].filters[filter.columnName] = filter;\n break;\n }\n\n case getType(actions.updateViewDisplayedColumns): {\n const { viewId, displayedColumns } = action.payload;\n draft.workingCopy[viewId].displayedColumns = displayedColumns;\n break;\n }\n\n case getType(actions.updateViewColoring): {\n const { viewId, coloringColumnName } = action.payload;\n draft.workingCopy[viewId].coloringColumnName = coloringColumnName;\n break;\n }\n\n case getType(actions.updateViewType): {\n const { viewId, type } = action.payload;\n draft.workingCopy[viewId].listActive = type.list;\n draft.workingCopy[viewId].calendarActive = type.calendar;\n draft.workingCopy[viewId].chartsActive = type.charts;\n if (\n type.charts &&\n draft.workingCopy[viewId].chartConfigs.length === 0\n ) {\n const chartId = uuid();\n const newChartConfig = {\n id: chartId,\n barOptions: \"totProjects\",\n chartType: \"bar\"\n };\n draft.workingCopy[viewId].chartConfigs.push(newChartConfig);\n }\n draft.workingCopy[viewId].mapActive = type.map;\n\n draft.workingCopy[viewId].layout = normalizeViewLayout(\n draft.workingCopy[viewId].layout,\n getViewSections(draft.workingCopy[viewId])\n );\n\n break;\n }\n\n case getType(actions.updateChartConfig): {\n const { viewId, chartId, key, value } = action.payload;\n const chartConfig = draft.workingCopy[viewId].chartConfigs.find(\n config => config[\"id\"] === chartId\n );\n if (chartConfig) chartConfig[key] = value;\n break;\n }\n\n case getType(actions.createChartConfig): {\n const { viewId, chartConfigToCopy } = action.payload;\n const chartId = uuid();\n const newChartConfig = {\n ...chartConfigToCopy,\n id: chartId\n };\n draft.workingCopy[viewId].chartConfigs.push(newChartConfig);\n draft.workingCopy[viewId].layout = normalizeViewLayout(\n draft.workingCopy[viewId].layout,\n getViewSections(draft.workingCopy[viewId])\n );\n break;\n }\n\n case getType(actions.deleteChartConfig): {\n const { viewId, chartConfigIdToDelete } = action.payload;\n const indexToDelete = draft.workingCopy[viewId].chartConfigs.findIndex(\n chartConfig => chartConfig.id === chartConfigIdToDelete\n );\n if (indexToDelete > -1) {\n const chartConfigCopy = [...draft.workingCopy[viewId].chartConfigs];\n chartConfigCopy.splice(indexToDelete, 1);\n draft.workingCopy[viewId].chartConfigs = chartConfigCopy;\n if (draft.workingCopy[viewId].chartConfigs.length === 0) {\n draft.workingCopy[viewId].chartsActive = false;\n draft.workingCopy[viewId].listActive = true;\n }\n draft.workingCopy[viewId].layout = normalizeViewLayout(\n draft.workingCopy[viewId].layout,\n getViewSections(draft.workingCopy[viewId]),\n true\n );\n }\n break;\n }\n\n case getType(actions.updateLayout): {\n const { viewId, layout } = action.payload;\n draft.workingCopy[viewId].layout = normalizeViewLayout(\n layout,\n getViewSections(draft.workingCopy[viewId])\n );\n break;\n }\n case getType(actions.updateCalendarConfig): {\n const { viewId, calendarConfig } = action.payload;\n draft.workingCopy[viewId].calendarConfig = calendarConfig;\n break;\n }\n case getType(actions.setSelectedView): {\n const { viewId, tableId } = action.payload;\n draft.selectedViews[tableId] = viewId;\n break;\n }\n\n case getType(actions.updateMapStyle): {\n const { viewId } = action.payload;\n draft.workingCopy[viewId].satelliteMapStyleActive = !draft.workingCopy[\n viewId\n ].satelliteMapStyleActive;\n break;\n }\n\n case getType(actions.hideView): {\n const { viewId } = action.payload;\n delete draft.workingCopy[viewId];\n delete draft.original[viewId];\n const index = draft.allIds.indexOf(action.payload.viewId);\n if (index > -1) {\n draft.allIds.splice(index, 1);\n }\n }\n }\n });\n};\n\nexport type SelectorState = StateSlice &\n schemas.StateSlice &\n config.StateSlice &\n account.StateSlice;\n\n// Selectors\nconst getAllIds = ({ views }: SelectorState) => views.allIds;\nconst getLoaded = ({ views }: SelectorState) => views.loaded;\nconst getWorkingCopy = ({ views }: SelectorState) => views.workingCopy;\nconst getOriginal = ({ views }: SelectorState) => views.original;\nconst getSelectedViews = ({ views }: SelectorState) => views.selectedViews;\nconst getErrors = ({ views }: SelectorState) => views.errors;\n\nconst getAllViews = createSelector(\n [getAllIds, getWorkingCopy],\n (ids, views) => {\n return ids.map(id => views[id]);\n }\n);\n\nconst getProjectViewsLookup = createSelector(\n [getAllViews, getAllSchemas],\n (views, schemas) => {\n const projectViews: Record = {};\n views.forEach(view => {\n if (!view || !schemas) return;\n const schema = schemas.find(s => s.id === view.schemaId);\n if (schema && schema.schemaName === \"projects\") {\n projectViews[view.id] = view;\n }\n });\n return projectViews;\n }\n);\nconst getEstimateViewsLookup = createSelector(\n [getAllViews, getAllSchemas],\n (views, schemas) => {\n const projectViews: Record = {};\n views.forEach(view => {\n if (!view || !schemas) return;\n const schema = schemas.find(s => s.id === view.schemaId);\n if (schema && schema.schemaName === \"estimatesExtended\") {\n projectViews[view.id] = view;\n }\n });\n return projectViews;\n }\n);\n\nconst getProjectViews = createSelector([getProjectViewsLookup], viewLookup => {\n return viewLookup ? values(viewLookup) : [];\n});\n\nconst getAllEstimateViews = createSelector(\n [getEstimateViewsLookup],\n viewLookup => {\n return viewLookup ? values(viewLookup) : [];\n }\n);\n\nconst getEstimateViews = createSelector([getAllEstimateViews], views => {\n return views.filter(\n view =>\n view.id !== editArchivedEstimateList.id && view.id !== keyIndicators.id\n );\n});\n\nconst getEstimateViewsSorted = createSelector([getEstimateViews], views => {\n return sortBy(views, [\"isPublic\", data => data.name.toLowerCase()]);\n});\n\nconst getProjectViewsSorted = createSelector([getProjectViews], views => {\n return sortBy(views, [\"isPublic\", data => data.name.toLowerCase()]);\n});\n\nconst getDefaultProjectView = createSelector(\n [\n getProjectViewsLookup,\n getProjectViewsSorted,\n account.selectors.getPreferences\n ],\n (viewLookup, views, userPreferences) => {\n const savedSelectedViewId =\n userPreferences?.tablePreferences?.project?.selectedView;\n\n if (savedSelectedViewId && viewLookup[savedSelectedViewId]) {\n return viewLookup[savedSelectedViewId];\n }\n return views.filter(v => v.isPublic)[0];\n }\n);\nconst getDefaultEstimateView = createSelector(\n [\n getEstimateViewsLookup,\n getEstimateViewsSorted,\n account.selectors.getPreferences\n ],\n (viewLookup, views, userPreferences) => {\n const savedSelectedViewId =\n userPreferences?.tablePreferences?.estimates?.selectedView;\n\n if (savedSelectedViewId && viewLookup[savedSelectedViewId]) {\n return viewLookup[savedSelectedViewId];\n }\n return views.filter(v => v.isPublic)[0];\n }\n);\n\nconst getCurrentEstimateView = createSelector(\n [getEstimateViewsLookup, getSelectedViews, getDefaultEstimateView],\n (viewLookup, selectedViews, defaultView) => {\n const selectedViewId = selectedViews[\"estimates\"];\n return viewLookup[selectedViewId] ?? defaultView;\n }\n);\n\nconst getCurrentEditArchivedEstimateView = createSelector(\n [getEstimateViewsLookup],\n viewLookup => {\n return viewLookup[\"editarchivedestimateslist\"];\n }\n);\n\nconst getCurrentProjectView = createSelector(\n [getProjectViewsLookup, getSelectedViews, getDefaultProjectView],\n (viewLookup, selectedViews, defaultView) => {\n const selectedViewId = selectedViews[\"project\"];\n const selectedView = viewLookup[selectedViewId] ?? defaultView;\n return selectedView;\n }\n);\n\nconst getCurrentProjectViewClean = createSelector(\n [getCurrentProjectView, getOriginal],\n (currentView, originalViews) => {\n return originalViews[currentView.id];\n }\n);\n\n//this will work because there is only one view for the estimate schema\nconst getProjectEstimateView = createSelector(\n [getAllViews, schemas.selectors.getEstimatesSchema],\n (views, estimateSchema) => {\n return views.find(view => view.schemaId === estimateSchema?.id);\n }\n);\n\nexport const selectors = {\n getWorkingCopy,\n getOriginal,\n getSelectedViews,\n getErrors,\n getAllIds,\n getAllViews,\n getLoaded,\n getProjectViews,\n getProjectViewsLookup,\n getProjectViewsSorted,\n getCurrentProjectView,\n getCurrentProjectViewClean,\n getDefaultProjectView,\n getDefaultEstimateView,\n getProjectEstimateView,\n getEstimateViewsLookup,\n getEstimateViews,\n getEstimateViewsSorted,\n getCurrentEstimateView,\n getCurrentEditArchivedEstimateView\n};\n\nfunction validateLayout(\n currentViews: Array<{ key: string; active?: boolean }>,\n existingLayout: {\n [key: string]: {\n i: string;\n w: number;\n h: number;\n y: number;\n x: number;\n }[];\n }\n) {\n return currentViews.every(view => {\n if (view.active) {\n return existingLayout.lg.find(layout => layout.i === view.key);\n } else {\n return !existingLayout.lg.find(layout => layout.i === view.key);\n }\n });\n}\n\nfunction getViewSections(view: View): Array<{ key: string; active?: boolean }> {\n return [\n { key: \"list\", active: view.listActive },\n { key: \"calendar\", active: view.calendarActive },\n ...view.chartConfigs.map(chartConfig => {\n return { key: chartConfig.id, active: view.chartsActive };\n }),\n { key: \"map\", active: view.mapActive }\n ];\n}\n\nfunction getNumRows(numSections: number) {\n if (numSections % 3 === 0) return numSections / 3;\n return Math.floor(numSections / 3) + 1;\n}\n\nfunction normalizeViewLayout(\n layout: View[\"layout\"],\n viewSections: Array<{ key: string; active?: boolean }>,\n chartDeleted = false\n) {\n if (!layout || !validateLayout(viewSections, layout) || chartDeleted) {\n const activeSections = viewSections.filter(section => section.active);\n const numRows = getNumRows(activeSections.length);\n let currentRow = 0;\n\n layout = {\n xs: activeSections.map((viewSection, index) => ({\n i: viewSection.key,\n w: 1,\n h: 12,\n y: 0,\n x: 0\n })),\n lg: activeSections.map((viewSection, index) => {\n const sectionPositionInRow = index % 3;\n if (sectionPositionInRow === 0) {\n currentRow = currentRow + 1;\n }\n const isFullRow =\n currentRow < numRows ||\n (activeSections.length > 0 && activeSections.length % 3 === 0);\n const width = isFullRow ? 4 : 12 / (activeSections.length % 3);\n const height = 12 / numRows < 4 ? 4 : 12 / numRows;\n return {\n i: viewSection.key,\n w: width,\n h: height,\n y: currentRow * 12,\n x: sectionPositionInRow * width\n };\n })\n };\n }\n return layout;\n}\n\nfunction normalizeViews(data: View[]) {\n return data.map(view => {\n const viewSections = getViewSections(view);\n view.layout = normalizeViewLayout(view.layout, viewSections);\n return view;\n });\n}\n","import createUseContext from \"constate\";\nimport { oidcService, OidcService } from \"./oidc-service\";\n\ninterface OidcContext {\n oidcService: OidcService;\n}\nexport const useOidcContext = createUseContext(\n (): OidcContext => {\n return { oidcService };\n }\n);\n\nexport const OidcProvider = useOidcContext.Provider;\n","import produce from \"immer\";\nimport { keyBy, groupBy } from \"lodash-es\";\nimport { createSelector } from \"reselect\";\nimport {\n ActionType,\n createAsyncAction,\n createAction,\n getType\n} from \"typesafe-actions\";\nimport { Calendar } from \"api\";\nimport { WithId } from \"core\";\n\nconst STATE_KEY = \"calendars\";\n\n// Models\nexport interface State {\n allIds: string[];\n workingCopy: { [key: string]: WithId };\n original: { [key: string]: WithId };\n loading: boolean;\n loaded: boolean;\n sideModalActive: boolean;\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n loadCalendars: createAsyncAction(\n \"CALENDARS/LOAD_REQUEST\",\n \"CALENDARS/LOAD_SUCCESS\",\n \"CALENDARS/LOAD_FAILURE\"\n )[], Error>(),\n\n saveCalendar: createAsyncAction(\n \"CALENDARS/SAVE_REQUEST\",\n \"CALENDARS/SAVE_SUCCESS\",\n \"CALENDARS/SAVE_FAILURE\"\n ), Calendar>(),\n\n deleteCalendar: createAsyncAction(\n \"CALENDARS/DELETE_REQUEST\",\n \"CALENDARS/DELETE_SUCCESS\",\n \"CALENDARS/DELETE_FAILURE\"\n )(),\n\n updateCalendars: createAction(\"CALENDARS/UPDATE\", resolve => {\n return (calendars: WithId[]) => resolve({ calendars });\n }),\n\n toggleSideModal: createAction(\"CALENDARS/TOGGLE_SIDE_MODAL\", resolve => {\n return (show?: boolean) => resolve({ show });\n })\n};\n\nexport type CalendarActions = ActionType;\n\nconst initialState: State = {\n allIds: [],\n workingCopy: {},\n original: {},\n loading: false,\n loaded: false,\n sideModalActive: false\n};\n\n// Reducer\nexport const reducer = (state = initialState, action: CalendarActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.loadCalendars.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n case getType(actions.loadCalendars.success): {\n const newData = keyBy(action.payload, \"id\");\n draft.workingCopy = newData;\n draft.original = newData;\n draft.allIds = action.payload.map(view => view.id);\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n case getType(actions.saveCalendar.request): {\n break;\n }\n case getType(actions.saveCalendar.success): {\n draft.original[action.payload.id] = action.payload;\n draft.workingCopy[action.payload.id] = action.payload;\n const currentIndex = draft.allIds.indexOf(action.payload.id);\n if (currentIndex === -1) {\n draft.allIds.push(action.payload.id);\n }\n break;\n }\n case getType(actions.saveCalendar.failure): {\n if (action.payload.id) {\n draft.workingCopy[action.payload.id] =\n draft.original[action.payload.id];\n }\n break;\n }\n case getType(actions.deleteCalendar.success): {\n delete draft.workingCopy[action.payload];\n delete draft.original[action.payload];\n draft.allIds = Object.keys(draft.original).map(\n key => draft.original[key].id\n );\n break;\n }\n case getType(actions.deleteCalendar.failure): {\n draft.workingCopy[action.payload] = draft.original[action.payload];\n break;\n }\n case getType(actions.updateCalendars): {\n const { calendars } = action.payload;\n calendars.forEach(calendar => {\n const currentIndex = draft.allIds.indexOf(calendar.id);\n if (calendar.deleted) {\n if (currentIndex > -1) {\n draft.allIds.splice(currentIndex, 1);\n }\n if (calendar.id in draft.workingCopy) {\n delete draft.workingCopy[calendar.id];\n }\n if (calendar.id in draft.original) {\n delete draft.original[calendar.id];\n }\n } else {\n draft.workingCopy[calendar.id] = calendar;\n draft.original[calendar.id] = calendar;\n if (currentIndex === -1) {\n draft.allIds.push(calendar.id);\n }\n }\n });\n break;\n }\n\n case getType(actions.toggleSideModal): {\n const { show } = action.payload;\n if (show !== undefined) {\n draft.sideModalActive = show;\n } else {\n draft.sideModalActive = !draft.sideModalActive;\n }\n }\n }\n });\n};\n\n// Selectors\nconst getAllIds = ({ calendars }: StateSlice) => calendars.allIds;\nconst getLoaded = ({ calendars }: StateSlice) => calendars.loaded;\nconst getWorkingCopy = ({ calendars }: StateSlice) => calendars.workingCopy;\nconst getCalendarPanelActive = ({ calendars }: StateSlice) =>\n calendars.sideModalActive;\n\nconst getAllCalendars = createSelector(\n [getAllIds, getWorkingCopy],\n (ids, calendarLookup) => ids.map(id => calendarLookup[id])\n);\n\nconst getCalendarsByViewId = createSelector(\n [getAllIds, getWorkingCopy],\n (ids, calendarLookup) => {\n const viewLookup: Record<\n string,\n Record<\"iCal\" | \"nylas\", WithId | undefined>\n > = {};\n ids.forEach(id => {\n const calendar = calendarLookup[id];\n const token = calendar.token;\n const isReadOnlyCal = token && token.length > 0;\n const isNylasCal = calendar.isNylas;\n const viewId = calendar.viewId;\n if (viewId) {\n if (!viewLookup[viewId]) {\n viewLookup[viewId] = {\n iCal: undefined,\n nylas: undefined\n };\n }\n if (isReadOnlyCal) viewLookup[viewId].iCal = calendar;\n if (isNylasCal) viewLookup[viewId].nylas = calendar;\n }\n });\n return viewLookup;\n }\n);\nconst getCalendarsByAccountId = createSelector([getAllCalendars], calendars => {\n return groupBy(calendars, c => c.accountId);\n});\n\nexport const selectors = {\n getAllIds,\n getLoaded,\n getWorkingCopy,\n getCalendarsByViewId,\n getCalendarPanelActive,\n getCalendarsByAccountId\n};\n","import { call, put, select, takeEvery, takeLatest } from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport { Calendar } from \"api\";\nimport notify from \"../../core/components/notify\";\nimport { WithId } from \"core\";\nimport { apiSagaFactory } from \"../../api/api-saga-factory\";\nimport { actions, StateSlice } from \"./state\";\n\nconst genericSagas = apiSagaFactory({\n isBusinessUnitApi: true,\n apiPath: \"/calendars\",\n stateKey: \"calendars\",\n onLoadSuccess: data => actions.loadCalendars.success(data),\n onLoadFail: err => actions.loadCalendars.failure(err)\n});\n\nfunction* deleteCalendar(\n action: ActionType\n) {\n try {\n const api = yield genericSagas.getApi();\n const data = yield call([api, api.delete], action.payload);\n const calendarId = data.data;\n yield put(actions.deleteCalendar.success(calendarId));\n notify(\"warning\", \"Calendar Link Deleted\");\n } catch (error) {\n console.error(error);\n yield put(actions.deleteCalendar.failure(error));\n }\n}\n\nfunction* saveCalendar(\n action: ActionType\n) {\n const originalCalendar = action.payload;\n const existingCalendars: Record> = yield select(\n ({ calendars }: StateSlice) => calendars.workingCopy\n );\n\n //creating new connections to Kloudless is impossible, so we are okay to swap to just checking for Nylas here\n const existingCalendar = Object.values(existingCalendars).find(\n calendar =>\n calendar.viewId === originalCalendar.viewId &&\n calendar.isNylas === originalCalendar.isNylas\n );\n\n try {\n const api = yield call(genericSagas.getApi);\n const data = yield call([api, api.create], action.payload);\n const calendar = data.data as WithId;\n\n if (existingCalendar) {\n yield put(actions.deleteCalendar.success(existingCalendar.id));\n if (calendar.isNylas) {\n notify(\"success\", \"Calendar Connected\");\n } else {\n notify(\n \"success\",\n \"Calendar Link Created\",\n \"The previous link is no longer valid.\"\n );\n }\n } else if (!calendar.isNylas) {\n // Since they haven't selected a calendar yet, not showing a notify for kloudless\n notify(\"success\", \"Calendar Link Created\");\n }\n\n yield put(actions.saveCalendar.success(calendar));\n } catch (error) {\n console.error(error);\n notify(\"danger\", \"Error\", \"Error creating calendar link\");\n yield put(actions.saveCalendar.failure(originalCalendar));\n }\n}\n\nexport const sagas = [\n takeLatest(getType(actions.loadCalendars.request), genericSagas.load),\n takeEvery(getType(actions.saveCalendar.request), saveCalendar),\n takeEvery(getType(actions.deleteCalendar.request), deleteCalendar)\n];\n","\ninterface Configuration {\n endpoints: {\n HBINSIGHTS: string;\n SMARTDRIVE: string;\n OUTBOXAUTH: string;\n PRECON: string;\n CONTACTS: string;\n HCSSCONNECT: string;\n REMARKABLE: string;\n HEAVYJOB: string;\n FENIX: string;\n };\n mapBox: {\n BASESTYLEURI: string;\n SATELLITE: string;\n BASIC: string;\n },\n // NON-SECRET KEYS ONLY!!\n keys: {\n MIXPANELKEY: string;\n SMARTDRIVEAPPID: string;\n MAPBOX: string;\n APPINSIGHTS: string;\n };\n firebaseConfig: {\n apiKey: string;\n authDomain: string;\n databaseURL: string;\n baseURL: string;\n projectId: string;\n storageBucket: string;\n messagingSenderId: string;\n appId: string;\n };\n oidc: {\n authority: string;\n client_id: string;\n client_secret: string;\n redirect_uri: string;\n silent_redirect_uri: string;\n post_logout_redirect_uri: string;\n response_type: string;\n scope: string;\n };\n flags: {\n subs_showImportFromExcel: boolean;\n };\n rum?: {\n rumEnabled: boolean;\n rumConfigOptions: any;\n } | null;\n}\n\nconst local: Configuration = {\n endpoints: {\n // HCSSCONNECT: \"https://localhost:6001\",\n HCSSCONNECT: \"https://dev-connect.hcssapps.com\",\n HBINSIGHTS: \"https://hbinsights-dev.hcssapps.com\",\n HEAVYJOB: \"https://dev-heavyjob.hcssapps.com\",\n SMARTDRIVE: \"https://smartdrive-dev.hcssapps.com/api/\",\n OUTBOXAUTH: \"https://dev-outbox-auth.azurewebsites.net\",\n PRECON: \"https://localhost:5001\",\n CONTACTS: \"https://dev-hcss-contacts-api.hcssapps.com\",\n REMARKABLE: \"https://remarkable-dev.hcssapps.com\",\n FENIX: \"https://dev-fenix.hcssapps.com\"\n },\n mapBox: {\n BASESTYLEURI: \"mapbox://styles/hcssitdev\",\n BASIC: \"ck8j7zxm219oo1hleu44ugx2z\",\n SATELLITE: \"ckym8srpx2i4h15pe3egyxwub\"\n },\n keys: {\n MIXPANELKEY: \"6a8c6498436634e5554f8d0cd4b18d4f\",\n SMARTDRIVEAPPID: \"3EF4C10A-746E-454D-A69A-798E00513C31\",\n MAPBOX: \"pk.eyJ1IjoiaGNzc2l0ZGV2IiwiYSI6ImNrOGYwNnE3bzAxOW8zcm42YjZtNDVobDEifQ.RcIH6fHyx1TfvhjSuCH_EQ\",\n APPINSIGHTS: \"64108244-0233-48b7-9777-d47932172372\"\n },\n firebaseConfig: {\n apiKey: \"AIzaSyDw_2ZaUAJKoMbjOKHFmXf6eFssR8G_1tM\",\n authDomain: \"hcss-subcontractor-dev.firebaseapp.com\",\n databaseURL: \"https://hcss-subcontractor-dev.firebaseio.com\",\n baseURL: \"https://us-central1-hcss-subcontractor-dev.cloudfunctions.net\",\n projectId: \"hcss-subcontractor-dev\",\n storageBucket: \"hcss-subcontractor-dev.appspot.com\",\n messagingSenderId: \"193738124309\",\n appId: \"1:193738124309:web:6840f01da9da68fe\"\n },\n oidc: {\n authority: \"https://dev-identity.hcssapps.com\",\n client_id: \"empspa\",\n client_secret: \"dummy\", // IdentityServer 3 Workaround: This value will not be used for AuthCodePKCE\n redirect_uri: \"https://localhost:3000/oidc/signin-callback\",\n silent_redirect_uri: \"https://localhost:3000/oidc/silent-renew\",\n post_logout_redirect_uri: \"https://localhost:3000/oidc/logout\",\n response_type: \"code\",\n scope: \"openid profile company heavybid heavybid:read heavybid:insights contacts:read contacts:write setups cred:read heavyjob:read\"\n },\n flags: {\n subs_showImportFromExcel: true\n },\n rum: {\n rumEnabled: true,\n rumConfigOptions: {\n applicationId: \"8dffaa09-403f-4138-b687-b01cdf2fc11e\",\n clientToken: \"pubc345de44e4d6660f8cfc29b94acead6e\",\n site: \"datadoghq.com\",\n service: \"hb_precon\",\n env: \"local\",\n sessionSampleRate: 100,\n sessionReplaySampleRate: 100,\n trackUserInteractions: true,\n trackResources: true,\n trackLongTasks: true,\n defaultPrivacyLevel: \"allow\"\n }\n },\n};\n\nconst dev: Configuration = {\n endpoints: {\n HCSSCONNECT: \"https://dev-connect.hcssapps.com\",\n HBINSIGHTS: \"https://hbinsights-dev.hcssapps.com\",\n HEAVYJOB: \"https://dev-heavyjob.hcssapps.com\",\n SMARTDRIVE: \"https://smartdrive-dev.hcssapps.com/api/\",\n OUTBOXAUTH: \"https://dev-outbox-auth.azurewebsites.net\",\n PRECON: \"https://precon-dev.hcssapps.com\",\n CONTACTS: \"https://dev-hcss-contacts-api.hcssapps.com\",\n REMARKABLE: \"https://remarkable-dev.hcssapps.com\",\n FENIX: \"https://dev-fenix.hcssapps.com\"\n },\n mapBox: {\n BASESTYLEURI: \"mapbox://styles/hcssitdev\",\n BASIC: \"ck8j7zxm219oo1hleu44ugx2z\",\n SATELLITE: \"ckym8srpx2i4h15pe3egyxwub\"\n },\n keys: {\n MIXPANELKEY: \"6a8c6498436634e5554f8d0cd4b18d4f\",\n SMARTDRIVEAPPID: \"3EF4C10A-746E-454D-A69A-798E00513C31\",\n MAPBOX: \"pk.eyJ1IjoiaGNzc2l0ZGV2IiwiYSI6ImNrOGYwN3N0bjAxdW0zZW81bWV1cmJsM28ifQ.5p552n_VlgxtlcK90FCRbg\",\n APPINSIGHTS: \"64108244-0233-48b7-9777-d47932172372\"\n },\n firebaseConfig: {\n apiKey: \"AIzaSyDw_2ZaUAJKoMbjOKHFmXf6eFssR8G_1tM\",\n authDomain: \"hcss-subcontractor-dev.firebaseapp.com\",\n databaseURL: \"https://hcss-subcontractor-dev.firebaseio.com\",\n baseURL: \"https://us-central1-hcss-subcontractor-dev.cloudfunctions.net\",\n projectId: \"hcss-subcontractor-dev\",\n storageBucket: \"hcss-subcontractor-dev.appspot.com\",\n messagingSenderId: \"193738124309\",\n appId: \"1:193738124309:web:6840f01da9da68fe\"\n },\n oidc: {\n authority: \"https://dev-identity.hcssapps.com\",\n client_id: \"empspa\",\n client_secret: \"dummy\", // IdentityServer 3 Workaround: This value will not be used for AuthCodePKCE\n redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/signin-callback`,\n silent_redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/silent-renew`,\n post_logout_redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/logout`,\n response_type: \"code\",\n scope: \"openid profile company heavybid heavybid:read heavybid:insights contacts:read contacts:write setups cred:read heavyjob:read\"\n },\n flags: {\n subs_showImportFromExcel: true\n },\n rum: {\n rumEnabled: true,\n rumConfigOptions: {\n applicationId: \"8dffaa09-403f-4138-b687-b01cdf2fc11e\",\n clientToken: \"pubc345de44e4d6660f8cfc29b94acead6e\",\n site: \"datadoghq.com\",\n service: \"hb_precon\",\n env: \"dev\",\n sessionSampleRate: 100,\n sessionReplaySampleRate: 100,\n trackUserInteractions: true,\n trackResources: true,\n trackLongTasks: true,\n defaultPrivacyLevel: \"allow\"\n }\n },\n};\n\nconst staging: Configuration = {\n endpoints: {\n HCSSCONNECT: \"https://staging-connect.hcssapps.com\",\n HBINSIGHTS: \"https://hbinsights-staging.hcssapps.com\",\n HEAVYJOB: \"https://staging-heavyjob.hcssapps.com\",\n SMARTDRIVE: \"https://smartdrive-staging.hcssapps.com/api/\",\n OUTBOXAUTH: \"https://staging-outbox-auth.azurewebsites.net\",\n PRECON: \"https://precon-staging.hcssapps.com\",\n CONTACTS: \"https://staging-hcss-contacts-api.hcssapps.com\",\n REMARKABLE: \"https://remarkable-staging.hcssapps.com\",\n FENIX: \"https://staging-fenix.hcssapps.com\"\n },\n mapBox: {\n BASESTYLEURI: \"mapbox://styles/hcssitdev\",\n BASIC: \"ck8j7zxm219oo1hleu44ugx2z\",\n SATELLITE: \"ckym8srpx2i4h15pe3egyxwub\"\n },\n keys: {\n MIXPANELKEY: \"5eccbce7962949eca4026bb2d1df854e\",\n SMARTDRIVEAPPID: \"3EF4C10A-746E-454D-A69A-798E00513C31\",\n MAPBOX: \"pk.eyJ1IjoiaGNzc2l0ZGV2IiwiYSI6ImNrOGYwdG43MjAyMHozbHJ3bDRmeWluam8ifQ.Un5tRwXoeYGtF1cclh-qoA\",\n APPINSIGHTS: \"dfc00b85-1996-4b45-b170-b95d462cb46c\"\n },\n firebaseConfig: {\n apiKey: \"AIzaSyDDaLS3mZDF1Jr7ZdEUKikUy0EWjQVifxo\",\n authDomain: \"hcss-subcontractor-staging.firebaseapp.com\",\n databaseURL: \"https://hcss-subcontractor-staging.firebaseio.com\",\n baseURL: \"https://us-central1-hcss-subcontractor-staging.cloudfunctions.net\",\n projectId: \"hcss-subcontractor-staging\",\n storageBucket: \"hcss-subcontractor-staging.appspot.com\",\n messagingSenderId: \"913072698382\",\n appId: \"1:913072698382:web:25ae61e202261fa3\"\n },\n oidc: {\n authority: \"https://staging-identity.hcssapps.com\",\n client_id: \"empspa\",\n client_secret: \"dummy\", // IdentityServer 3 Workaround: This value will not be used for AuthCodePKCE\n redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/signin-callback`,\n silent_redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/silent-renew`,\n post_logout_redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/logout`,\n response_type: \"code\",\n scope: \"openid profile company heavybid heavybid:read heavybid:insights contacts:read contacts:write setups cred:read heavyjob:read\"\n },\n flags: {\n subs_showImportFromExcel: true\n },\n rum: {\n rumEnabled: true,\n rumConfigOptions: {\n applicationId: \"8dffaa09-403f-4138-b687-b01cdf2fc11e\",\n clientToken: \"pubc345de44e4d6660f8cfc29b94acead6e\",\n site: \"datadoghq.com\",\n service: \"hb_precon\",\n env: \"staging\",\n sessionSampleRate: 100,\n sessionReplaySampleRate: 100,\n trackUserInteractions: true,\n trackResources: true,\n trackLongTasks: true,\n defaultPrivacyLevel: \"allow\"\n }\n },\n};\n\nconst preProd: Configuration = {\n endpoints: {\n HCSSCONNECT: \"https://connect.hcssapps.com\",\n HBINSIGHTS: \"https://hbinsights.hcssapps.com\",\n HEAVYJOB: \"https://heavyjob.hcssapps.com\",\n SMARTDRIVE: \"https://smartdrive.hcssapps.com/api/\",\n OUTBOXAUTH: \"https://outbox-auth.azurewebsites.net\",\n PRECON: \"https://precon-preprod.hcssapps.com\",\n CONTACTS: \"https://hcss-contacts-api.hcssapps.com\",\n REMARKABLE: \"https://remarkable.hcssapps.com\",\n FENIX: \"https://fenix.hcssapps.com\"\n },\n mapBox: {\n BASESTYLEURI: \"mapbox://styles/hcssitdev\",\n BASIC: \"ck8j7zxm219oo1hleu44ugx2z\",\n SATELLITE: \"ckym8srpx2i4h15pe3egyxwub\"\n },\n keys: {\n MIXPANELKEY: \"2af6e2627e7c92fcacbb05bdfc7a3136\",\n SMARTDRIVEAPPID: \"3EF4C10A-746E-454D-A69A-798E00513C31\",\n MAPBOX: \"pk.eyJ1IjoiaGNzc2l0ZGV2IiwiYSI6ImNrOGYwdTNncjAyMTIzZnBsM2g3ZHI3dGcifQ.08bBNmj7v7PVQL3K33-qiw\",\n APPINSIGHTS: \"71c6d29e-9923-4576-8350-965e834a82fc\"\n\n },\n firebaseConfig: {\n apiKey: \"AIzaSyAa5n_LTlNTz2Qzm1ebGVRvv7ZUHnBI0gg\",\n authDomain: \"hcss-subcontractor.firebaseapp.com\",\n databaseURL: \"https://hcss-subcontractor.firebaseio.com\",\n baseURL: \"https://us-central1-hcss-subcontractor.cloudfunctions.net\",\n projectId: \"hcss-subcontractor\",\n storageBucket: \"hcss-subcontractor.appspot.com\",\n messagingSenderId: \"755698692439\",\n appId: \"1:755698692439:web:a29d9b87fcd0f401\"\n },\n oidc: {\n authority: \"https://identity.hcssapps.com\",\n client_id: \"empspa\",\n client_secret: \"dummy\", // IdentityServer 3 Workaround: This value will not be used for AuthCodePKCE\n redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/signin-callback`,\n silent_redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/silent-renew`,\n post_logout_redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/logout`,\n response_type: \"code\",\n scope: \"openid profile company heavybid heavybid:read heavybid:insights contacts:read contacts:write setups cred:read heavyjob:read\"\n },\n flags: {\n subs_showImportFromExcel: true\n },\n rum: {\n rumEnabled: false,\n rumConfigOptions: {\n applicationId: \"8dffaa09-403f-4138-b687-b01cdf2fc11e\",\n clientToken: \"pubc345de44e4d6660f8cfc29b94acead6e\",\n site: \"datadoghq.com\",\n service: \"hb_precon\",\n env: \"preProd\",\n sessionSampleRate: 100,\n sessionReplaySampleRate: 100,\n trackUserInteractions: true,\n trackResources: true,\n trackLongTasks: true,\n defaultPrivacyLevel: \"allow\"\n }\n },\n};\n\nconst preProdEstimateHistory: Configuration = {\n ...preProd,\n endpoints: {\n ...preProd.endpoints,\n HBINSIGHTS: \"https://hbinsights-preprod.hcssapps.com\",\n }\n}\n\nconst prod: Configuration = {\n endpoints: {\n HCSSCONNECT: \"https://connect.hcssapps.com\",\n HBINSIGHTS: \"https://hbinsights.hcssapps.com\",\n HEAVYJOB: \"https://heavyjob.hcssapps.com\",\n SMARTDRIVE: \"https://smartdrive.hcssapps.com/api/\",\n OUTBOXAUTH: \"https://outbox-auth.azurewebsites.net\",\n PRECON: \"https://precon.hcssapps.com\",\n CONTACTS: \"https://hcss-contacts-api.hcssapps.com\",\n REMARKABLE: \"https://remarkable.hcssapps.com\",\n FENIX: \"https://fenix.hcssapps.com\"\n },\n mapBox: {\n BASESTYLEURI: \"mapbox://styles/hcssitdev\",\n BASIC: \"ck8j7zxm219oo1hleu44ugx2z\",\n SATELLITE: \"ckym8srpx2i4h15pe3egyxwub\"\n },\n keys: {\n MIXPANELKEY: \"2af6e2627e7c92fcacbb05bdfc7a3136\",\n SMARTDRIVEAPPID: \"3EF4C10A-746E-454D-A69A-798E00513C31\",\n MAPBOX: \"pk.eyJ1IjoiaGNzc2l0ZGV2IiwiYSI6ImNrOGYwdTNncjAyMTIzZnBsM2g3ZHI3dGcifQ.08bBNmj7v7PVQL3K33-qiw\",\n APPINSIGHTS: \"71c6d29e-9923-4576-8350-965e834a82fc\"\n },\n firebaseConfig: {\n apiKey: \"AIzaSyAa5n_LTlNTz2Qzm1ebGVRvv7ZUHnBI0gg\",\n authDomain: \"hcss-subcontractor.firebaseapp.com\",\n databaseURL: \"https://hcss-subcontractor.firebaseio.com\",\n baseURL: \"https://us-central1-hcss-subcontractor.cloudfunctions.net\",\n projectId: \"hcss-subcontractor\",\n storageBucket: \"hcss-subcontractor.appspot.com\",\n messagingSenderId: \"755698692439\",\n appId: \"1:755698692439:web:a29d9b87fcd0f401\"\n },\n oidc: {\n authority: \"https://identity.hcssapps.com\",\n client_id: \"empspa\",\n client_secret: \"dummy\", // IdentityServer 3 Workaround: This value will not be used for AuthCodePKCE\n redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/signin-callback`,\n silent_redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/silent-renew`,\n post_logout_redirect_uri: `https://${window.location.hostname.toLowerCase()}/oidc/logout`,\n response_type: \"code\",\n scope: \"openid profile company heavybid heavybid:read heavybid:insights contacts:read contacts:write setups cred:read heavyjob:read\"\n },\n flags: {\n subs_showImportFromExcel: true\n },\n rum: {\n rumEnabled: false,\n rumConfigOptions: {\n applicationId: \"8dffaa09-403f-4138-b687-b01cdf2fc11e\",\n clientToken: \"pubc345de44e4d6660f8cfc29b94acead6e\",\n site: \"datadoghq.com\",\n service: \"hb_precon\",\n env: \"prod\",\n sessionSampleRate: 100,\n sessionReplaySampleRate: 100,\n trackUserInteractions: true,\n trackResources: true,\n trackLongTasks: true,\n defaultPrivacyLevel: \"allow\"\n }\n },\n};\n\nexport enum Environment {\n Local,\n Dev,\n Staging,\n PreProd,\n PreProdEstimateHistory,\n Production\n}\n\nexport const getCurrentEnvironment = () => {\n const hostname = window.location.hostname.toLowerCase();\n if (hostname.includes(\"localhost\")) return Environment.Local;\n else if (hostname.includes(\"-dev\")) return Environment.Dev;\n else if (hostname.includes(\"-staging\")) return Environment.Staging;\n else if (hostname.includes(\"-preprod\")) return Environment.PreProd;\n return Environment.Production;\n}\n\nexport const getOverrideEnvironment = (): Environment | null => {\n const localStorageValue = window.localStorage.getItem(\"override-environment\")\n if (localStorageValue === null || localStorageValue === \"null\") return null;\n return parseInt(localStorageValue);\n}\n\nexport const currentEnvironment = getCurrentEnvironment();\nconst overrideEnvironment = getOverrideEnvironment();\nexport const isLocal = currentEnvironment === Environment.Local;\n\nconst getEnvironmentConfig = () => {\n const selectedEnvironment = overrideEnvironment ?? currentEnvironment;\n switch (selectedEnvironment) {\n case (Environment.Local):\n return local;\n case (Environment.Dev):\n return dev;\n case (Environment.Staging):\n return staging;\n case (Environment.PreProd):\n return preProd;\n case (Environment.PreProdEstimateHistory):\n return preProdEstimateHistory;\n default:\n return prod;\n }\n};\n\nconst config = getEnvironmentConfig();\n\nconst estimateHistoryEndpointOverride = window.localStorage.getItem(\"estimate-history-endpoint-override\")\nif (estimateHistoryEndpointOverride && estimateHistoryEndpointOverride !== \"null\") {\n config.endpoints.HBINSIGHTS = JSON.parse(estimateHistoryEndpointOverride);\n}\n\nexport default {\n ...config,\n defaults: {\n // MEMO: This value must remain constant for verification of persisted fingerprints\n fingerPrintHashSeed: 88,\n bingApiKey: \"AmqssH6s6KfS3IjcQb6lSLTCTW1VDziPB9pkUBJUphptL8mVUw0R8yB5ANciOl9k\"\n }\n};\n","import React, { ReactElement } from \"react\";\nimport styled from \"styled-components\";\nimport { ConcreteColors, Button, Icon } from \"hcss-components\";\n\ninterface EmptyStateProps {\n title: string;\n text1: string;\n text2?: string;\n showButton?: boolean;\n buttonIconName?: string;\n buttonIconTitle?: string;\n mainIcon?: ReactElement;\n onClick?: (event: any) => void;\n}\n\nexport const EmptyState = ({\n title,\n text1,\n text2,\n buttonIconName = \"arrow-right\",\n buttonIconTitle,\n showButton,\n mainIcon: MainIcon,\n onClick\n}: EmptyStateProps) => {\n return (\n \n \n \n {MainIcon && (\n {MainIcon}\n )}\n \n

{title}

\n

{text1}

\n {text2 &&

{text2}

}\n {showButton && (\n \n \n \n )}\n
\n
\n
\n
\n );\n};\n\nexport const defaultIconStyle = {\n \"--fa-primary-color\": ConcreteColors.green200,\n \"--fa-secondary-color\": \"#7070708c\"\n} as React.CSSProperties;\n\nexport const PageWrapper = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n`;\n\nexport const Jumbotron = styled.div`\n display: flex;\n width: 100%;\n margin: 70px auto 60px auto;\n max-width: 1100px;\n padding-left: 30px;\n padding-right: 30px;\n`;\n\nexport const ContentWrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n width: 100%;\n`;\n\nconst Blurb = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n margin-top: 30px;\n align-items: center;\n text-align: center;\n\n h1 {\n color: ${ConcreteColors.gray700};\n font-size: 18px;\n font-weight: 600;\n line-height: 1.075;\n margin-bottom: 10px;\n }\n\n p {\n color: ${ConcreteColors.gray600};\n font-size: 14px;\n font-weight: 400;\n max-width: 600px;\n }\n\n div > button {\n display: flex;\n flex-direction: row;\n align-items: baseline;\n font-size: small;\n margin-top: 30px;\n padding-top: 8px;\n padding-bottom: 6px;\n }\n`;\n\nexport const ImageContainer = styled.div`\n display: flex;\n flex: 1;\n justify-content: center;\n align-items: center;\n`;\n\nconst ButtonContainer = styled.div``;\n","import moment from \"moment\";\nimport { FilterOperation, SchemaFieldType, SchemaViewFilter } from \"../../api\";\nimport { filterConstants } from \"./components/filters/common\";\nimport { calculateValuesFromRange } from \"./components/filters/dateTimeUtils\";\nimport { checklistReducer } from \"./components/fields/CheckList\";\nimport { intersection } from \"lodash-es\";\nimport { getFieldValueAsArray } from \"core/util/multi-select-helpers\";\nimport { preconIdToString } from \"modules/projects\";\n\nexport function filterField(\n type: SchemaFieldType,\n filter: SchemaViewFilter,\n value: any\n): boolean {\n if (filter.value === undefined) {\n return true;\n }\n\n switch (type) {\n case SchemaFieldType.ShortText:\n case SchemaFieldType.LongText:\n return filterText(filter, value);\n case SchemaFieldType.Links:\n return filterHyperlinks(filter, value);\n case SchemaFieldType.Checklist:\n return filterChecklist(filter, value);\n case SchemaFieldType.List:\n case SchemaFieldType.States:\n return filterList(filter, value);\n case SchemaFieldType.Company:\n return filterCompanyList(filter, value);\n case SchemaFieldType.Contact:\n return filterContactList(filter, value);\n case SchemaFieldType.MultiSelectList:\n return filterMultiSelectList(filter, value);\n case SchemaFieldType.Number:\n case SchemaFieldType.Currency:\n case SchemaFieldType.Calculated:\n return filterNumeric(filter, value);\n case SchemaFieldType.Boolean:\n return filterBoolean(filter, value);\n case SchemaFieldType.Date:\n case SchemaFieldType.DateTime:\n return filterDateTime(filter, value);\n case SchemaFieldType.PreConId:\n return filterProjectId(filter, preconIdToString(value));\n default:\n return true;\n }\n}\n\nexport const linkToString = (\n value?: Array<{ description?: string; url?: string }>\n) => {\n return (\n value?.map(v => `${v.description ?? \"\"} ${v.url ?? \"\"}`).join(\" \") ?? \"\"\n );\n};\n\nexport const checkListToString = (value: any) => {\n let retString = \"\";\n if (value) {\n value.forEach((list: any, index: number) => {\n retString += index > 0 ? \", \" : \"\";\n retString += list.checked ? \"Checked\" : \"NotChecked\";\n retString += list.description;\n });\n }\n return retString;\n};\n\nexport interface TypedSchemaViewFilter extends SchemaViewFilter {\n fieldType: SchemaFieldType;\n}\n\nfunction isDateOrTimeFilterActive(filter: TypedSchemaViewFilter) {\n const validFromValue =\n filter.value.from !== undefined && filter.value.from !== null;\n const validToValue =\n filter.value.to !== undefined && filter.value.to !== null;\n switch (filter.filterOperation) {\n case FilterOperation.Between:\n return filter.value && (validFromValue || validToValue);\n case FilterOperation.LessThan:\n case FilterOperation.LessThanOrEqualTo:\n return filter.value && validToValue;\n default:\n return filter.value && validFromValue;\n }\n}\n\nexport function isFilterActive(filter: TypedSchemaViewFilter) {\n if (filter.value === undefined || filter.value === null) {\n return false;\n }\n if (\n filter.fieldType === SchemaFieldType.Date ||\n filter.fieldType === SchemaFieldType.DateTime\n ) {\n if (\n filter.value &&\n filter.value.range &&\n filter.value.range !== filterConstants.dates.custom\n ) {\n return true;\n }\n if (isDateOrTimeFilterActive(filter)) {\n return true;\n }\n } else if (\n filter.fieldType === SchemaFieldType.Number ||\n filter.fieldType === SchemaFieldType.Currency ||\n filter.fieldType === SchemaFieldType.Calculated\n ) {\n if (isDateOrTimeFilterActive(filter)) {\n return true;\n }\n } else {\n return true;\n }\n\n return false;\n}\n\nexport function calculateActiveFilters(filters: TypedSchemaViewFilter[]) {\n return filters.reduce(\n (sum, filter) => (isFilterActive(filter) ? sum + 1 : sum),\n 0\n );\n}\n\nexport function filterNumeric(filter: SchemaViewFilter, value: any): boolean {\n const fromValue =\n filter.value && validateNumber(filter.value.from)\n ? filter.value.from\n : undefined;\n const toValue =\n filter.value && validateNumber(filter.value.to)\n ? filter.value.to\n : undefined;\n\n const validFromValue = validateNumber(fromValue);\n const validToValue = validateNumber(toValue);\n const validValue = validateNumber(value);\n\n if (!validFromValue && !validToValue) {\n return true;\n }\n\n if (validFromValue || validToValue) {\n if (!validValue) {\n return false;\n }\n }\n\n switch (filter.filterOperation) {\n case FilterOperation.Equals: {\n if (validFromValue && value !== fromValue) {\n return false;\n }\n break;\n }\n case FilterOperation.NotEquals: {\n if (validFromValue && value === fromValue) {\n return false;\n }\n break;\n }\n case FilterOperation.GreaterThan: {\n if (validFromValue && value <= fromValue) {\n return false;\n }\n break;\n }\n case FilterOperation.GreaterThanOrEqualTo: {\n if (validFromValue && value < fromValue) {\n return false;\n }\n break;\n }\n case FilterOperation.LessThan: {\n if (validToValue && value >= toValue) {\n return false;\n }\n break;\n }\n case FilterOperation.LessThanOrEqualTo: {\n if (validToValue && value > toValue) {\n return false;\n }\n break;\n }\n case FilterOperation.Between: {\n if (\n (validFromValue && value < fromValue) ||\n (validToValue && value > toValue)\n ) {\n return false;\n }\n break;\n }\n }\n\n return true;\n}\n\nfunction validateNumber(value?: number) {\n if (value === undefined || value === null || isNaN(value)) {\n return false;\n }\n return true;\n}\n\nexport function filterList(filter: SchemaViewFilter, value: any) {\n if (filter.value && filter.value.length) {\n const validText = validateText(value);\n if (!validText && filter.filterOperation === FilterOperation.Any) {\n return false;\n }\n if (!validText && filter.filterOperation === FilterOperation.None) {\n return true;\n }\n\n const values = filter.value.map((option: any) => option.value);\n const index = values.indexOf(value);\n if (filter.filterOperation === FilterOperation.Any && index === -1) {\n return false;\n }\n if (filter.filterOperation === FilterOperation.None && index !== -1) {\n return false;\n }\n }\n return true;\n}\n\nexport function filterCompanyList(filter: SchemaViewFilter, value: any) {\n if (filter.value && filter.value.length) {\n const filterValues = filter.value.map((option: any) => option.value);\n const valueArray = Array.isArray(value)\n ? value.map(v => v.code)\n : [value?.code ?? null];\n const intersectionOfValues = intersection(\n filterValues,\n getFieldValueAsArray(valueArray)\n );\n const hasCommonValues = intersectionOfValues.length > 0;\n const filterContainsAllValues =\n filterValues.length === intersectionOfValues.length;\n\n if (filter.filterOperation === FilterOperation.Any && !hasCommonValues) {\n return false;\n }\n if (filter.filterOperation === FilterOperation.None && hasCommonValues) {\n return false;\n }\n if (\n filter.filterOperation === FilterOperation.Equals &&\n !filterContainsAllValues\n ) {\n return false;\n }\n if (\n filter.filterOperation === FilterOperation.NotEquals &&\n filterContainsAllValues\n ) {\n return false;\n }\n }\n return true;\n}\n\nexport function filterContactList(filter: SchemaViewFilter, value: any) {\n if (filter.value && filter.value.length) {\n const filterValues = filter.value.map((option: any) => option.value);\n\n const valueArray = Array.isArray(value)\n ? value.map(v => v.id)\n : [value?.id ?? null];\n const intersectionOfValues = intersection(\n filterValues,\n getFieldValueAsArray(valueArray)\n );\n const hasCommonValues = intersectionOfValues.length > 0;\n const filterContainsAllValues =\n filterValues.length === intersectionOfValues.length;\n\n if (filter.filterOperation === FilterOperation.Any && !hasCommonValues) {\n return false;\n }\n if (filter.filterOperation === FilterOperation.None && hasCommonValues) {\n return false;\n }\n if (\n filter.filterOperation === FilterOperation.Equals &&\n !filterContainsAllValues\n ) {\n return false;\n }\n if (\n filter.filterOperation === FilterOperation.NotEquals &&\n filterContainsAllValues\n ) {\n return false;\n }\n }\n return true;\n}\n\nexport function filterMultiSelectList(\n filter: SchemaViewFilter,\n projectValue: string[]\n) {\n if (filter.value && filter.value.length) {\n const filterValues = filter.value.map((option: any) => option.value);\n const intersectionOfValues = intersection(\n filterValues,\n getFieldValueAsArray(projectValue)\n );\n const hasCommonValues = intersectionOfValues.length > 0;\n const filterContainsAllValues =\n filterValues.length === intersectionOfValues.length;\n\n if (filter.filterOperation === FilterOperation.Any && !hasCommonValues) {\n return false;\n }\n if (filter.filterOperation === FilterOperation.None && hasCommonValues) {\n return false;\n }\n if (\n filter.filterOperation === FilterOperation.Equals &&\n !filterContainsAllValues\n ) {\n return false;\n }\n if (\n filter.filterOperation === FilterOperation.NotEquals &&\n filterContainsAllValues\n ) {\n return false;\n }\n }\n return true;\n}\n\nfunction validateText(value: any) {\n if (!value || value.trim() === \"\") {\n return false;\n }\n return true;\n}\n\nexport function filterText(filter: SchemaViewFilter, value: any) {\n if (filter.value && filter.value.length && Array.isArray(filter.value)) {\n const validText = validateText(value);\n if (!validText) {\n return filter.filterOperation === FilterOperation.NotEquals;\n }\n\n value = value.toLowerCase();\n\n const values: string[] = filter.value.map((option: any) =>\n option.value.toLowerCase()\n );\n\n if (filter.filterOperation === FilterOperation.Contains) {\n return values.some(valueToCheck => value.indexOf(valueToCheck) > -1);\n }\n\n if (filter.filterOperation === FilterOperation.StartsWith) {\n return values.some(valueToCheck => value.startsWith(valueToCheck));\n }\n\n if (filter.filterOperation === FilterOperation.EndsWith) {\n return values.some(valueToCheck => value.endsWith(valueToCheck));\n }\n\n if (filter.filterOperation === FilterOperation.Equals) {\n return values.some(valueToCheck => value === valueToCheck);\n }\n\n if (filter.filterOperation === FilterOperation.NotEquals) {\n return values.every(valueToCheck => value !== valueToCheck);\n }\n }\n return true;\n}\n\nexport function filterProjectId(filter: SchemaViewFilter, value: any) {\n if (filter.value && filter.value.length && Array.isArray(filter.value)) {\n const validText = validateText(value);\n if (!validText) {\n return filter.filterOperation === FilterOperation.NotEquals;\n }\n\n value = value.toLowerCase();\n\n const values: string[] = filter.value.map((option: any) =>\n preconIdToString(option.value).toLowerCase()\n );\n\n if (filter.filterOperation === FilterOperation.Contains) {\n return values.some(valueToCheck => value.indexOf(valueToCheck) > -1);\n }\n\n if (filter.filterOperation === FilterOperation.StartsWith) {\n return values.some(valueToCheck => value.startsWith(valueToCheck));\n }\n\n if (filter.filterOperation === FilterOperation.EndsWith) {\n return values.some(valueToCheck => value.endsWith(valueToCheck));\n }\n\n if (filter.filterOperation === FilterOperation.Equals) {\n return values.some(valueToCheck => value === valueToCheck);\n }\n\n if (filter.filterOperation === FilterOperation.NotEquals) {\n return values.every(valueToCheck => value !== valueToCheck);\n }\n }\n return true;\n}\n\nexport function filterBoolean(filter: SchemaViewFilter, value: any) {\n if (filter.value !== undefined && filter.value !== null) {\n const boolValue = normalizeBoolean(value);\n\n if (\n boolValue !== filter.value &&\n filter.filterOperation === FilterOperation.Equals\n ) {\n return false;\n }\n\n if (\n boolValue === filter.value &&\n filter.filterOperation === FilterOperation.NotEquals\n ) {\n return false;\n }\n }\n return true;\n}\n\nexport function filterHyperlinks(\n filter: SchemaViewFilter,\n value?: Array<{ description?: string; url?: string }>\n) {\n let descFound = false;\n let urlFound = false;\n if (!value) {\n if (filter.filterOperation === FilterOperation.NotEquals) return true;\n return false;\n }\n for (let index = 0; index < value.length; index++) {\n const element = value[index];\n const description = element.description?.toLowerCase();\n const url = element.url?.toLowerCase();\n descFound = filterText(filter, description);\n urlFound = filterText(filter, url);\n if (filter.filterOperation === FilterOperation.NotEquals) {\n if ((descFound && !urlFound) || (urlFound && !descFound)) return false;\n if (descFound && urlFound) return true;\n }\n if (descFound || urlFound) {\n return true;\n }\n }\n return filter.filterOperation === FilterOperation.NotEquals ? true : false;\n}\n\nexport function filterChecklist(filter: SchemaViewFilter, value: any) {\n if (filter.value !== undefined) {\n const items = checklistReducer(value);\n const percentComplete =\n items.checked + items.notChecked > 0\n ? items.checked / (items.checked + items.notChecked)\n : 0;\n if (filter.value && percentComplete < 1) {\n return false;\n }\n\n if (!filter.value && percentComplete === 1) {\n return false;\n }\n }\n return true;\n}\n\nfunction normalizeBoolean(value: any) {\n if (value === true) {\n return true;\n }\n\n return false;\n}\n\nexport function calculateDateFilterValues(filter: SchemaViewFilter) {\n const dateFilterValues = {\n fromValue:\n filter.value && filter.value.from ? moment(filter.value.from) : undefined,\n toValue:\n filter.value && filter.value.to ? moment(filter.value.to) : undefined\n };\n\n if (\n filter.value &&\n filter.value.range &&\n filter.value.range !== filterConstants.dates.custom\n ) {\n const rangeValues = calculateValuesFromRange(filter.value.range);\n dateFilterValues.fromValue = rangeValues!.from;\n dateFilterValues.toValue = rangeValues!.to;\n }\n\n return dateFilterValues;\n}\n\nexport function filterDateTime(filter: SchemaViewFilter, value: any) {\n if (filter.value !== undefined) {\n const { fromValue, toValue } = calculateDateFilterValues(filter);\n\n if (fromValue || toValue) {\n if (!value) {\n return false;\n }\n }\n\n const currentValue = moment(value);\n\n switch (filter.filterOperation) {\n case FilterOperation.Equals: {\n if (fromValue) {\n return currentValue.isSame(fromValue, \"day\");\n }\n break;\n }\n case FilterOperation.NotEquals: {\n if (fromValue) {\n return !currentValue.isSame(fromValue, \"day\");\n }\n break;\n }\n case FilterOperation.GreaterThan: {\n if (fromValue) {\n return currentValue.isAfter(fromValue, \"day\");\n }\n break;\n }\n case FilterOperation.GreaterThanOrEqualTo: {\n if (fromValue) {\n return currentValue.isSameOrAfter(fromValue, \"day\");\n }\n break;\n }\n case FilterOperation.LessThan: {\n if (toValue) {\n return currentValue.isBefore(toValue, \"day\");\n }\n break;\n }\n case FilterOperation.LessThanOrEqualTo: {\n if (toValue) {\n return currentValue.isSameOrBefore(toValue, \"day\");\n }\n break;\n }\n case FilterOperation.Between: {\n if (fromValue && toValue) {\n return currentValue.isBetween(fromValue, toValue, \"day\", \"[]\");\n }\n if (fromValue) {\n return currentValue.isSameOrAfter(fromValue, \"day\");\n }\n if (toValue) {\n return currentValue.isSameOrBefore(toValue, \"day\");\n }\n break;\n }\n }\n }\n return true;\n}\n","import MimeIconMap from \"./files.mimemap.json\";\n\nexport const formatFileSize = (bytesPassed: number) => {\n let suffix: string[] = [];\n let bytes = bytesPassed;\n suffix = [\"B\", \"KB\", \"MB\", \"GB\"];\n let index = 0;\n while (bytes >= 1000) {\n index++;\n bytes /= 1000;\n }\n\n return `${bytes.toFixed(2)} ${suffix[index]}`;\n};\n\nexport const getIconForFile = (mime: string) => {\n const map = MimeIconMap as any;\n if (mime in map) {\n return map[mime];\n }\n return \"file-o\";\n};\n","export function roundNumber(num: number, decimals: number) {\n return Number(num.toFixed(decimals));\n}\n","import { EstimateItem } from \"../models/IEstimateItem\";\nimport { SubItem } from \"../models/ISubItem\";\n\nexport function isEstimateItem(\n item: EstimateItem | SubItem\n): item is EstimateItem {\n if ((item as EstimateItem).subItems !== undefined) {\n return true;\n }\n\n return false;\n}\n\nexport function isSubItem(item: EstimateItem | SubItem): item is SubItem {\n return !isEstimateItem(item);\n}\n\nexport const isDict = (obj: any) => obj && obj.constructor == Object;\n","import { IJsonPatchDocument } from \"../models\";\nimport { isDict } from \"./types\";\n\nexport const patchDocument = (\n changes: Record,\n path: string = \"\"\n): IJsonPatchDocument => {\n const patch = Object.entries(changes).flatMap(([key, val]) => {\n if (isDict(val)) return patchDocument(val, `${path}/${key}`);\n else {\n return {\n op: \"replace\",\n path: `${path}/${key}`,\n value: val\n };\n }\n });\n return patch;\n};\n","import { set } from \"lodash-es\";\nimport { isDict } from \"./types\";\n\nexport const setNested = (\n src: Record,\n dest: Record\n) => {\n Object.entries(src).forEach(([key, val]) => {\n if (isDict(val)) setNested(src[key], dest[key]);\n else set(dest, key, val);\n });\n};\n","import { strings } from \"localization\";\nimport { boolean } from \"yup\";\n\nconst LATITUDE_THRESHOLD = 90.0;\nconst LONGITUDE_THRESHOLD = 180.0;\n\nexport const isValidLatitude = (latitude: any) =>\n latitude !== null &&\n latitude !== undefined &&\n !isNaN(latitude) &&\n Math.abs(latitude) <= LATITUDE_THRESHOLD;\n\nexport const isValidLongitude = (longitude: any) =>\n longitude !== null &&\n longitude !== undefined &&\n !isNaN(longitude) &&\n Math.abs(longitude) <= LONGITUDE_THRESHOLD;\n\nexport const isNullIsland = (latitude: any, longitude: any) =>\n latitude === 0 && longitude === 0;\n\ninterface TryParseLatLongResult {\n isValid: boolean;\n error: string;\n value:\n | {\n lat: number;\n long: number;\n }\n | undefined;\n}\nexport const tryParseLatLong = (value: string): TryParseLatLongResult => {\n const result: TryParseLatLongResult = {\n isValid: false,\n error: \"\",\n value: undefined\n };\n\n if (typeof value !== \"string\") {\n result.error = strings.import.errors.invalidColumn;\n return result;\n }\n\n const [lat, long] = value.split(\",\");\n const latitude = parseFloat(lat);\n const longitude = parseFloat(long);\n\n if (isNaN(latitude) || isNaN(longitude)) {\n result.error = strings.import.errors.invalidColumn;\n return result;\n }\n\n if (!isValidLatitude(latitude)) {\n result.error = strings.import.errors.locationType.invalidLatitude;\n return result;\n }\n if (!isValidLongitude(longitude)) {\n result.error = strings.import.errors.locationType.invalidLongitude;\n return result;\n }\n if (isNullIsland(latitude, longitude)) {\n result.error = strings.import.errors.locationType.isNullIsland;\n return result;\n }\n\n result.isValid = true;\n result.value = {\n lat: latitude,\n long: longitude\n };\n return result;\n};\n","export const provincesEnum = {\n enum: [\n \"AB\",\n \"BC\",\n \"MB\",\n \"NB\",\n \"NL\",\n \"NT\",\n \"NS\",\n \"NU\",\n \"ON\",\n \"PE\",\n \"QC\",\n \"SK\",\n \"YT\"\n ],\n enumNames: [\n \"Alberta\",\n \"British Columbia\",\n \"Manitoba\",\n \"New Brunswick\",\n \"Newfoundland and Labrador\",\n \"Northwest Territories\",\n \"Nova Scotia\",\n \"Nunavut\",\n \"Ontario\",\n \"Prince Edward Island\",\n \"Quebec\",\n \"Saskatchewan\",\n \"Yukon\"\n ]\n};\n\nexport const provincesObjectList = provincesEnum.enum.map((abbr, index) => {\n return { value: abbr, display: provincesEnum.enumNames[index] };\n});\n\nexport default provincesEnum;\n","import config from \"config\";\n\nexport const buildFenixURL = (\n projectId: string,\n projectName: string,\n preconIdSeed: string,\n businessUnitCode: string\n) =>\n encodeURI(\n `${config.endpoints.FENIX}/estimates?code=${preconIdSeed}&description=${projectName}&projectId=${projectId}&buCode=${businessUnitCode}`\n );\n","export const delay = (time: number) =>\n new Promise(res =>\n setTimeout(() => {\n res();\n }, time)\n );\n","import React from \"react\";\nimport { Route, Redirect, RouteProps } from \"react-router-dom\";\nimport { notify } from \"hcss-components\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\nimport { strings } from \"localization\";\n\ninterface ProtectedRouteProps {\n isAdmin?: boolean;\n isAddEdit?: boolean;\n isFullFeature?: boolean;\n isContactAddEdit?: boolean;\n canAccessFullProjectTracking?: boolean;\n canAccessEstimateInsights?: boolean;\n}\n\nexport const ProtectedRoute: React.FC<\n RouteProps & ProtectedRouteProps\n> = props => {\n const permissions = usePermissions();\n const authorization = useAuthorization();\n\n if (props.isFullFeature) {\n if (!authorization.canAccessFullPrecon) return ;\n }\n\n if (props.isAdmin) {\n if (!permissions.admin) return ;\n if (!authorization.canAccessLimitedPrecon) return ;\n }\n\n if (props.isAddEdit) {\n if (!authorization.canAccessLimitedPrecon) return ;\n if (!permissions.write) return ;\n }\n\n if (props.isContactAddEdit) {\n if (!authorization.canAccessLimitedPrecon) return ;\n if (!permissions.contactWrite) return ;\n }\n\n if (\n props.canAccessFullProjectTracking &&\n !authorization.canAccessFullPrecon\n ) {\n return ;\n }\n\n if (props.canAccessEstimateInsights && !permissions.estimateInsights) {\n return ;\n }\n\n return ;\n};\n\nconst AdminRedirect: React.FC = () => {\n React.useEffect(() => {\n notify(\"danger\", strings.userAdmin.adminRequired);\n }, []);\n return ;\n};\n\nconst AddEditRedirect: React.FC = () => {\n React.useEffect(() => {\n notify(\"danger\", strings.userAdmin.writeRequired);\n }, []);\n return ;\n};\n\nconst ContactAddEditRedirect: React.FC = () => {\n React.useEffect(() => {\n notify(\"danger\", strings.userAdmin.contactRequired);\n }, []);\n return ;\n};\n\nconst FullPreconRedirect: React.FC = () => {\n React.useEffect(() => {\n notify(\"danger\", strings.userAdmin.fullFeatureRequired);\n }, []);\n return ;\n};\n\nconst LimitedPreconRedirect: React.FC = () => {\n React.useEffect(() => {\n notify(\"danger\", strings.userAdmin.fullPreconRequired);\n }, []);\n return ;\n};\n\nconst NoAccessToFullProjectTrackingRedirect: React.FC = () => {\n React.useEffect(() => {\n notify(\"danger\", strings.userAdmin.fullProjectTracking);\n }, []);\n return ;\n};\n\nconst NoAccessToEstimateInsightsRedirect: React.FC = () => {\n React.useEffect(() => {\n notify(\"danger\", strings.userAdmin.estimateInsights);\n }, []);\n return ;\n};\n","import constate from \"constate\";\nimport { useMemo, useState, useEffect } from \"react\";\nimport { Estimate } from \"api/GeneratedClients/insights\";\nimport { useRouteMatch } from \"react-router-dom\";\nimport { selectors } from \"../state\";\nimport { useSelector } from \"react-redux\";\nimport { WithId } from \"core\";\n\nexport interface CurrentEstimateContext {\n currentEstimateId?: string;\n setCurrentEstimateId: (id: string | undefined) => void;\n currentEstimate?: WithId;\n existsInBUError: boolean;\n loading: boolean;\n}\nconst useCurrentEstimate = (): CurrentEstimateContext => {\n const estimatePathMatch = useRouteMatch<{ estimateId: string }>({\n path: \"/estimates/:estimateId\"\n });\n const quotePathMatch = !!useRouteMatch({\n path: \"/quotes/solicitations\",\n exact: true\n });\n\n const quoteMasterPathMatch = !!useRouteMatch({\n path: \"/quotes/solicitations/master\",\n exact: false\n });\n\n const quoteDraftsPathMatch = !!useRouteMatch({\n path: \"/quotes/solicitations/drafts\",\n exact: true\n });\n\n const idFromParams = estimatePathMatch\n ? estimatePathMatch.params.estimateId\n : undefined;\n const [currentEstimateId, setCurrentEstimateId] = useState<\n string | undefined\n >(idFromParams);\n\n useEffect(() => {\n //if we navigate to an estimate in the estimate module, then we want to use that estimate\n if (idFromParams) setCurrentEstimateId(idFromParams);\n //if we navigate to the quotes module, we want to initally use no estimate\n else if (quotePathMatch || quoteMasterPathMatch || quoteDraftsPathMatch)\n setCurrentEstimateId(undefined);\n }, [\n idFromParams,\n quoteMasterPathMatch,\n quotePathMatch,\n quoteDraftsPathMatch\n ]);\n\n const loading = !useSelector(selectors.getLoaded);\n const workingCopy = useSelector(selectors.getWorkingCopy);\n const existsInBUError = !!idFromParams && !workingCopy[idFromParams];\n\n const currentEstimate = useMemo(() => {\n return !loading && currentEstimateId && workingCopy[currentEstimateId]\n ? (workingCopy[currentEstimateId].values as WithId)\n : undefined;\n }, [loading, currentEstimateId, workingCopy]);\n\n return {\n currentEstimateId: currentEstimate?.id,\n setCurrentEstimateId,\n currentEstimate,\n existsInBUError,\n loading\n };\n};\n\nconst [provider, context] = constate(useCurrentEstimate);\nexport const CurrentEstimateProvider = provider;\nexport const useCurrentEstimateContext = context;\n","import { Environment, envService } from \"./env-service\";\n\nimport {\n User,\n UserManager,\n WebStorageStateStore,\n UserManagerSettings\n} from \"oidc-client\";\nimport { disableSandbox } from \"core/util/sandbox\";\n\nexport class OidcService {\n private readonly userManager: UserManager;\n\n constructor(oidcEnv: Environment) {\n const settings: UserManagerSettings = {\n ...oidcEnv.oidc,\n automaticSilentRenew: false,\n accessTokenExpiringNotificationTime: 300,\n userStore: new WebStorageStateStore({ store: window.localStorage })\n };\n\n this.userManager = new UserManager(settings);\n }\n\n async getUser(): Promise {\n return this.userManager.getUser();\n }\n\n async signinRedirect(successRedirect?: string, args?: any) {\n if (successRedirect) {\n window.localStorage.setItem(\"redirect\", successRedirect);\n }\n return this.userManager.signinRedirect(args);\n }\n\n async signinRedirectCallback(): Promise {\n return this.userManager.signinRedirectCallback();\n }\n\n async signinSilent(): Promise {\n return this.userManager.signinSilent();\n }\n\n async signinSilentCallback() {\n return this.userManager.signinSilentCallback();\n }\n\n async signoutRedirect() {\n this.clearRedirect();\n disableSandbox();\n return this.userManager.signoutRedirect();\n }\n\n async signoutRedirectCallback() {\n return this.userManager.signoutRedirectCallback();\n }\n\n getRedirect() {\n const redirect = window.localStorage.getItem(\"redirect\") ?? \"/\";\n this.clearRedirect();\n return redirect;\n }\n\n clearRedirect() {\n window.localStorage.removeItem(\"redirect\");\n }\n\n getSettings() {\n return this.userManager.settings;\n }\n\n getEvents() {\n return this.userManager.events;\n }\n}\n\nexport const oidcService = new OidcService(envService);\n","import constate from \"constate\";\nimport { useCallback, useMemo, useState } from \"react\";\nimport { MissingActivity, UnusedActivity, selectors } from \"../state\";\nimport { useSelector } from \"react-redux\";\nimport {\n ReportTypeEnum,\n ReportTypeOption,\n reportTypeOptions\n} from \"../components/CodebooksPage\";\nimport moment from \"moment\";\n\nexport interface CodebooksContext {\n currentDivisionId?: string;\n setCurrentDivisionId: (id: string | undefined) => void;\n unusedData: UnusedActivity[];\n missingLoaded: boolean;\n utilizedLoaded: boolean;\n utilizedDetailsLoaded: boolean;\n unusedLoaded: boolean;\n missingData: MissingActivity[];\n reportType: ReportTypeOption;\n setReportType: (type: ReportTypeOption) => void;\n selectedUtilizedCode: string;\n setSelectedUtilizedCode: (code: string) => void;\n isCurrentReportOverflow: () => boolean;\n hasNoCodebooksData: boolean;\n codebooksTimestamp: string;\n estimateTimestamp: string;\n}\nconst useCodebooks = (): CodebooksContext => {\n const [currentDivisionId, setCurrentDivisionId] = useState<\n string | undefined\n >(\"\");\n const [reportType, setReportType] = useState(\n reportTypeOptions.Unused\n );\n const [selectedUtilizedCode, setSelectedUtilizedCode] = useState(\"\");\n\n const utilizedLoaded = useSelector(\n selectors.getActivityCodebookUtilizedLoaded\n );\n const utilizedDetailsLoaded = useSelector(\n selectors.getActivityCodebookUtilizedDetailsLoaded\n );\n const allUtilizedData = useSelector(selectors.getActivityCodebookUtilized);\n const unusedLoaded = useSelector(selectors.getActivityCodebookUnusedLoaded);\n const allUnusedData = useSelector(selectors.getActivityCodebookUnused);\n const missingLoaded = useSelector(selectors.getActivityCodebookMissingLoaded);\n const allMissingData = useSelector(selectors.getActivityCodebookMissing);\n const overflowStatus = useSelector(\n selectors.getActivityCodebooksOverflowStatus\n );\n const codebooks = useSelector(selectors.getLastProcessedActivityCodebooks);\n const estimates = useSelector(selectors.getAllEstimates);\n const formatTime = (time: string) =>\n `${moment(time).format(\"L\")} ${moment(time).format(\"LT\")}`;\n\n const isCurrentReportOverflow = useCallback(() => {\n switch (reportType.type) {\n case ReportTypeEnum.Missing:\n return overflowStatus.missingOverflow ?? false;\n case ReportTypeEnum.Utilized:\n return overflowStatus.utilizedOverflow ?? false;\n case ReportTypeEnum.Unused:\n return overflowStatus.unusedOverflow ?? false;\n default:\n return false;\n }\n }, [reportType, overflowStatus]);\n\n const estimateTimestamp = useMemo(() => {\n if (!currentDivisionId) return \"\";\n const partitionEstimates = estimates\n .filter(\n e =>\n e.values.partitionId === currentDivisionId && e.values.lastProcessed\n )\n .sort((a: any, b: any) =>\n a.values.lastProcessed >= b.values.lastProcessed ? -1 : 1\n );\n if (partitionEstimates[0] && partitionEstimates[0].values?.lastProcessed) { return formatTime(partitionEstimates[0].values.lastProcessed); }\n return \"\";\n }, [estimates, currentDivisionId]);\n\n const codebooksTimestamp = useMemo(() => {\n const activityCb =\n currentDivisionId &&\n codebooks.find(c => (c.partitionId = currentDivisionId));\n if (activityCb && activityCb?.lastProcessed) return formatTime(activityCb.lastProcessed);\n return \"\";\n }, [codebooks, currentDivisionId]);\n\n const unusedData = useMemo(() => {\n return allUnusedData.filter(a => a.partitionId === currentDivisionId);\n }, [allUnusedData, currentDivisionId]);\n\n const missingData = useMemo(() => {\n return allMissingData.filter(a => a.partitionId === currentDivisionId);\n }, [allMissingData, currentDivisionId]);\n\n const utilizedData = useMemo(() => {\n return Object.values(allUtilizedData).filter(\n a => a.partitionId === currentDivisionId\n );\n }, [allUtilizedData, currentDivisionId]);\n\n const hasNoCodebooksData = useMemo(() => {\n if (unusedData.length <= 0 && utilizedData.length <= 0) return true;\n return false;\n }, [unusedData, utilizedData]);\n\n return {\n currentDivisionId,\n setCurrentDivisionId,\n utilizedLoaded,\n utilizedDetailsLoaded,\n unusedLoaded,\n unusedData,\n missingLoaded,\n missingData,\n isCurrentReportOverflow,\n reportType,\n setReportType,\n selectedUtilizedCode,\n setSelectedUtilizedCode,\n hasNoCodebooksData,\n codebooksTimestamp,\n estimateTimestamp\n };\n};\nconst [provider, context] = constate(useCodebooks);\nexport const CodebooksProvider = provider;\nexport const useCodebooksContext = context;\n","import {\n VirtualTable as DVirtualTable,\n VirtualTableProps\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport { VirtualTable as BundleVirtualTable } from \"hcss-tables\";\nimport * as React from \"react\";\n\nconst LegacyVirtualTable = (props: VirtualTableProps) => {\n return (\n //Fix for a breaking change in https://github.com/DevExpress/devextreme-reactive/blob/master/CHANGELOG.md#300-2022-01-31 regarding colspan calculation for stubcell\n \n );\n};\n\nexport default LegacyVirtualTable;\n","import React from \"react\";\nimport { IMinorityTypeDto } from \"api/GeneratedClients/ContactsClient\";\nimport { Button } from \"hcss-components\";\nimport {\n Box,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n TextField,\n Grid as MuiGrid\n} from \"@mui/material\";\nimport { Form, Formik } from \"formik\";\nimport * as yup from \"yup\";\nimport { IMinorityTypeOption } from \"../../tables/columns/column-providers\";\nimport { strings } from \"localization\";\nimport styled from \"styled-components\";\n\nconst validationSchema = yup.object({\n code: yup\n .string()\n .required(\n strings.contactManagement.minorityTypeModal.validation.codeRequiredText\n ),\n description: yup\n .string()\n .required(\n strings.contactManagement.minorityTypeModal.validation\n .descriptionRequiredText\n )\n});\n\ninterface ModalProps {\n visible: boolean;\n setVisible: (val: boolean) => void;\n prefillValue: string;\n addMinorityType: (val: IMinorityTypeOption) => void;\n}\n\nexport const CreateMinorityTypeModal = ({\n visible,\n setVisible,\n prefillValue,\n addMinorityType\n}: ModalProps) => {\n const handleClose = () => {\n setVisible(false);\n };\n\n const handleSubmit = (values: any) => {\n const newMinorityType: IMinorityTypeDto = {\n code: values.code.toUpperCase().trim(),\n description: values.description\n };\n addMinorityType({\n value: newMinorityType,\n label: newMinorityType.code ?? \"\"\n });\n handleClose();\n };\n\n return (\n \n \n {formik => (\n
\n \n \n \n

\n {strings.contactManagement.minorityTypeModal.title}\n

\n
\n \n \n ×\n \n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n
\n );\n};\n\nconst TimesButton = styled.button`\n button.close {\n color: \"Black\")};\n opacity: 0.4;\n font-size: 28px;\n :hover {\n opacity: 0.9;\n }\n}\n`;\n","import { DataTypeProvider } from \"@devexpress/dx-react-grid\";\nimport { BaseTypedDataColumn, DataColumnType } from \"hcss-tables\";\nimport { sortBy } from \"lodash-es\";\nimport React, { FC, useState, useMemo, useCallback } from \"react\";\nimport { strings } from \"localization\";\nimport styled from \"styled-components\";\nimport { DropdownList } from \"react-widgets\";\n\nexport interface DropdownListOption {\n display: string;\n value?: string;\n}\n\nconst CLEAR_TEXT = strings.core.dropdown.clear;\n\nexport const DropDownEditor: FC = props => {\n const { value, onValueChange } = props;\n const column = props.column as BaseTypedDataColumn;\n const [options, setOptions] = useState(\n column.config?.listValues ?? []\n );\n\n const data: DropdownListOption[] = options;\n\n let sortedData = useMemo(() => {\n if (!column.config?.customSort) {\n return sortBy(data, opt => opt.display.toLocaleLowerCase());\n }\n return data;\n }, [column.config, data]);\n\n if (value) {\n sortedData = sortedData.concat([{ display: CLEAR_TEXT, value: undefined }]);\n }\n\n const allowCreate = column.config?.dynamic ?? false;\n\n const addFieldValue = useCallback(\n (newValue: string) => {\n if (newValue?.trim?.() !== \"\") {\n newValue = newValue.trimEnd();\n const includesValue = options.some(option => {\n return option.value?.toLowerCase() === newValue.toLowerCase();\n });\n if (!includesValue)\n setOptions([...options, { display: newValue, value: newValue }]);\n }\n },\n [options]\n );\n\n return useMemo(\n () => (\n \n \n onValueChange(\n newValue && newValue.value ? newValue.value : undefined\n )\n }\n allowCreate={allowCreate}\n onCreate={\n allowCreate\n ? newValue => {\n addFieldValue(newValue);\n if (newValue) {\n onValueChange(newValue.trimEnd());\n }\n }\n : undefined\n }\n messages={{\n emptyList: \"\",\n createOption: \"To add a new option: type a value, press Enter\"\n }}\n />\n \n ),\n [\n addFieldValue,\n allowCreate,\n column.readOnly,\n onValueChange,\n sortedData,\n value\n ]\n );\n};\nconst DropdownContainer = styled.div<{ hasErrors?: boolean }>`\n & .rw-widget-input {\n height: 34px;\n ${props => (props.hasErrors ? \"border: 1px solid #a94442;\" : \"\")};\n }\n`;\n","import { DataTypeProvider } from \"@devexpress/dx-react-grid\";\nimport { SchemaFieldType } from \"api\";\nimport { IMinorityTypeDto } from \"api/GeneratedClients/ContactsClient\";\nimport { colorbrewer } from \"colorConfigurations\";\nimport config from \"config\";\nimport {\n DateTimePicker,\n TextOverflow,\n formatCurrency,\n formatLatLong,\n formatPercent,\n formatPhoneNumber,\n isValidString\n} from \"core\";\nimport { statesObjectList as states } from \"core/util/states\";\nimport { ConcreteColors, Creatable, Icon, notify } from \"hcss-components\";\nimport {\n BaseTypedDataColumn,\n BooleanEditor,\n DataColumnType,\n DateContainer,\n DateTimeContainer,\n DropDownFormatter,\n NumberFormatter,\n TextEditor,\n TypedDataColumn,\n normalizeDate,\n useDebouncedGridValue,\n useTableContext\n} from \"hcss-tables\";\nimport { strings } from \"localization\";\nimport { intersection, some, sortBy } from \"lodash-es\";\nimport { usePermissions } from \"modules/account\";\nimport { selectors as ContactsSelectors } from \"modules/contacts\";\nimport { CreateMinorityTypeModal } from \"modules/contacts/components/create-minority-type-modal\";\nimport { formatMinorityStatusPercent } from \"modules/contacts/components/minority-status-list\";\nimport { preconIdToString, useProjectFieldsMetadata } from \"modules/projects\";\nimport {\n CompanyDropdownFilter,\n CompanyListOption,\n CompanyOption\n} from \"modules/schemas/components/fields/CompanyInput\";\nimport {\n ContactDropdownFilter,\n ContactListOption,\n ContactOption\n} from \"modules/schemas/components/fields/ContactInput\";\nimport { PreConIdInputBase } from \"modules/schemas/components/fields/project-id-input\";\nimport moment from \"moment\";\nimport numeral from \"numeral\";\nimport {\n FC,\n default as React,\n memo,\n useCallback,\n useMemo,\n useState\n} from \"react\";\nimport { OverlayTrigger, Popover } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { Link } from \"react-router-dom\";\nimport MaskedInput from \"react-text-mask\";\nimport { DropdownList } from \"react-widgets\";\nimport styled from \"styled-components\";\nimport createNumberMask from \"text-mask-addons/dist/createNumberMask\";\nimport { DropDownEditor } from \"./single-select-list-editor\";\nconst DateTimeEditorContainer = styled.div`\n & .rw-widget-picker {\n height: 34px;\n }\n & .rw-cell.rw-state-selected {\n color: black !important;\n }\n`;\n\nconst DateEditor = (props: DataTypeProvider.ValueEditorProps) => {\n const { value, onValueChange } = props;\n const column = props.column as TypedDataColumn;\n const includeTime = column.type === DataColumnType.DateTime;\n const dateValue = value ? moment(value).toDate() : undefined;\n\n return (\n \n onValueChange(d && d.toISOString())}\n />\n \n );\n};\n\nexport const DateFormatter = (props: DataTypeProvider.ValueFormatterProps) => {\n const { value } = props;\n const column = props.column as BaseTypedDataColumn;\n if (value) {\n const dateValue = normalizeDate(\n value,\n column.config && column.config.utc,\n column.config && column.config.ignoreTimezone\n );\n\n if (dateValue.isValid()) {\n return (\n \n \n
{dateValue.format(\"L\")}
\n
\n {column.type === DataColumnType.DateTime && (\n
{dateValue.format(\"LT\")}
\n )}\n
\n );\n }\n }\n\n return null;\n};\n\nexport const DateFormatProvider = () => {\n const { columns } = useTableContext();\n\n return React.useMemo(\n () => (\n LockableWrapper(DateEditor, props)}\n for={columns\n .filter(\n column =>\n column.type === DataColumnType.Date ||\n column.type === DataColumnType.DateTime\n )\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nconst NoteFormatter = ({\n value,\n column\n}: DataTypeProvider.ValueFormatterProps) => {\n const popover = (\n \n {value}\n \n );\n return (\n \n
\n {value}\n
\n \n );\n};\nexport const NoteProvider = () => {\n const { columns } = useTableContext();\n\n return React.useMemo(\n () => (\n column.type === DataColumnType.LongText)\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\nconst CurrencyFormatter: FC = ({\n value\n}) => {\n if (value || value === 0) {\n return {formatCurrency(value as number, 2)};\n } else {\n return -;\n }\n};\n\nexport const CurrencyFormatProvider = () => {\n const { columns } = useTableContext();\n return useMemo(\n () => (\n column.type === DataColumnType.Currency)\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nconst PhoneNumberFormatter: FC = ({\n value\n}) => {\n return {formatPhoneNumber(value)};\n};\n\nexport const PhoneNumberFormatProvider = () => {\n const { columns } = useTableContext();\n return useMemo(\n () => (\n column.type === DataColumnType.PhoneNumber)\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nconst PercentageFormatter = (props: DataTypeProvider.ValueFormatterProps) => {\n const { value } = props;\n const column = props.column as BaseTypedDataColumn;\n if (column.config && (value || value === 0)) {\n return {formatPercent(value)};\n }\n return ;\n};\n\nexport const PercentageProvider = () => {\n const { columns } = useTableContext();\n return useMemo(\n () => (\n \n column.config?.showAsPercent &&\n (column.type === DataColumnType.Number ||\n column.type === DataColumnType.Currency)\n )\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nconst DetailLinkFormatter = ({\n column,\n row,\n value\n}: DataTypeProvider.ValueFormatterProps) => {\n const { coloring, columns } = useTableContext();\n\n if (!row) {\n return value;\n }\n\n const typedColumn = column as TypedDataColumn;\n if (typedColumn && typedColumn.config && typedColumn.config.getCellRoute) {\n return {value};\n }\n\n if (!coloring) {\n return {value};\n }\n\n const columnUConfig = columns.filter(\n x => x.name === coloring.coloringColumnName\n )[0];\n if (columnUConfig && columnUConfig.type === DataColumnType.States) {\n const stateIndex = states.findIndex(\n x => x.value === row.fields[columnUConfig.name]\n );\n if (-1 !== stateIndex) {\n return getProjectLinkWithHighLight(stateIndex, row, value);\n }\n } else if (\n columnUConfig &&\n columnUConfig.config &&\n columnUConfig.config.listValues &&\n Object.keys(columnUConfig.config.listValues).length > 0\n ) {\n let listValues = [];\n if (columnUConfig.config.customSort) {\n listValues = columnUConfig.config.listValues;\n } else {\n listValues = sortBy(columnUConfig.config.listValues, opt =>\n opt.display.toLocaleLowerCase()\n );\n }\n const index: number = listValues.findIndex(\n (lisVal: { value: string }) =>\n lisVal.value === row.fields[columnUConfig.name]\n );\n if (-1 !== index) {\n return getProjectLinkWithHighLight(index, row, value);\n }\n }\n\n return {value};\n};\n\nexport const LinkProvider = () => {\n const { columns } = useTableContext();\n return useMemo(\n () => (\n column.config && column.config.link)\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nfunction getProjectLinkWithHighLight(\n index: number,\n row: { id: string },\n value: string\n) {\n const randCol = getHighlightColor(index);\n return (\n \n {value}\n \n );\n}\n\nexport const getHighlightColor = (index: number) => {\n const arrColorCodes = colorbrewer.Set3[12];\n const reminder =\n index >= arrColorCodes.length ? index % arrColorCodes.length : index;\n const finIndex = reminder > 0 ? Math.abs(reminder) : reminder;\n return arrColorCodes[finIndex];\n};\n\nconst HyperLinksFormatter = ({\n value\n}: DataTypeProvider.ValueFormatterProps) => {\n if (!value || value === \"\") {\n return
;\n }\n return (\n \n {value}\n \n );\n};\n\nexport interface HyperLinksProviderProps {\n overrideColumns?: string[];\n}\n\nexport const HyperLinksProvider = ({\n overrideColumns\n}: HyperLinksProviderProps) => {\n const { columns } = useTableContext();\n return useMemo(\n () => (\n column.type === DataColumnType.Links)\n .map(column => column.name)\n }\n />\n ),\n [overrideColumns, columns]\n );\n};\n\nconst FenixLinkFormatter = ({\n row,\n value\n}: DataTypeProvider.ValueFormatterProps) => {\n const url = `${config.endpoints.FENIX}/estimates/${row.id}/pricing/proposal`;\n return (\n \n {value}\n \n );\n};\n\nexport const FenixLinksProvider = () => {\n const { columns } = useTableContext();\n return useMemo(\n () => (\n column.config && column.config.link)\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nexport const LatLongFormatter = ({\n value\n}: DataTypeProvider.ValueFormatterProps) => {\n if (typeof value === \"string\") return
{value}
;\n return
{formatLatLong(value)}
;\n};\n\nexport const LatLongEditor = ({\n value,\n onValueChange,\n column\n}: DataTypeProvider.ValueEditorProps) => {\n const [inputValue, setInputValue] = useState(() => formatLatLong(value));\n const handleChange = useCallback(\n (e: React.ChangeEvent) => {\n setInputValue(e.target.value);\n onValueChange(e.target.value);\n },\n [onValueChange]\n );\n\n const permissions = usePermissions();\n //@ts-ignore\n const adminFailure = !permissions.admin && column.adminOnly;\n const fieldIsEditable = permissions.write && !adminFailure;\n\n return (\n \n );\n};\n\nconst LatLongLockableComponent = (props: DataTypeProvider.ValueEditorProps) =>\n LockableWrapper(LatLongEditor, props);\nexport const LatLongProvider = () => {\n const { columns } = useTableContext();\n\n return (\n column?.config?.[\"latLong\"])\n .map(column => column.name)}\n formatterComponent={LatLongFormatter}\n editorComponent={LatLongLockableComponent}\n />\n );\n};\n\nexport const PreConIdFormatter = ({\n value\n}: DataTypeProvider.ValueFormatterProps) => (\n
{preconIdToString(value)}
\n);\n\nexport const PreConIdEditor = (props: DataTypeProvider.ValueEditorProps) => {\n const { columns } = useTableContext();\n const { onValueChange, value: initialValue } = props;\n const [value, setValue] = useDebouncedGridValue(initialValue, onValueChange);\n const preconIdColumn = columns.find(col => col.id === \"preconId\");\n const isDisabled = preconIdColumn?.readOnly ?? false;\n\n return (\n \n );\n};\n\nexport const PreConIdProvider = () => {\n const { columns } = useTableContext();\n return useMemo(\n () => (\n column?.id === \"preconId\")\n .map(column => column.name)}\n formatterComponent={PreConIdFormatter}\n editorComponent={props => LockableWrapper(PreConIdEditor, props)}\n />\n ),\n [columns]\n );\n};\n\nconst CompanyFormatter = ({ value }: DataTypeProvider.ValueFormatterProps) => {\n return (\n \n {Array.isArray(value) ? value.map(v => v.code).join(\", \") : value?.code}\n \n );\n};\n\nconst ContactFormatter = ({ value }: DataTypeProvider.ValueFormatterProps) => {\n if (value === null || value === undefined) return ;\n\n return (\n \n {Array.isArray(value)\n ? value\n .map(v => `${v?.firstName} ${v?.lastName} [${v.companyName}]`)\n .join(\", \")\n : `${value?.firstName} ${value?.lastName} [${value.companyName}]`}\n \n );\n};\n\nconst CompanyEditor = (props: DataTypeProvider.ValueEditorProps) => {\n const { value, onValueChange } = props;\n const column = props.column as BaseTypedDataColumn;\n const filters: string[] = column?.config?.filters;\n const vendorDataOptions = useSelector(ContactsSelectors.getVendorDataOptions);\n type MappedOption = Partial;\n let options: MappedOption[] = vendorDataOptions.map(data => {\n return { display: data.code, value: data, code: data.code };\n });\n\n const companiesExist: boolean = options.length > 0;\n const filtersSelected: boolean = filters?.length > 0;\n\n if (filters) {\n options = options.filter(op => {\n return column?.config?.filters.includes(op.value?.type?.code);\n });\n }\n const handleChange = (nextValue: CompanyListOption) => {\n onValueChange(nextValue.value);\n };\n\n if (value) {\n options.push({ display: \"(clear)\", value: null });\n }\n return (\n \n CompanyDropdownFilter(option, search)}\n textField=\"display\"\n valueField=\"code\"\n value={\n Array.isArray(value) ? value.map(v => v.code).join(\", \") : value?.code\n }\n data={options}\n onChange={handleChange}\n disabled={\n (column?.readOnly ?? false) || (column?.config?.multiSelect ?? false)\n }\n messages={{\n emptyList:\n companiesExist && filtersSelected\n ? strings.projects.setup.message.emptyCompanyListWithFilter\n : strings.projects.setup.message.emptyCompanyList\n }}\n itemComponent={({ item }) => }\n />\n \n );\n};\n\nconst ContactEditor = (props: DataTypeProvider.ValueEditorProps) => {\n const { value, onValueChange } = props;\n const column = props.column as BaseTypedDataColumn;\n const filters: string[] = column?.config?.filters;\n const vendorDataOptions = useSelector(\n ContactsSelectors.getVendorListSortedByCode\n );\n type MappedOption = Partial;\n\n let options: MappedOption[] = [];\n vendorDataOptions.forEach(vendor => {\n const contacts = vendor.contacts.map(contact => {\n const display =\n value?.id === contact.id\n ? `${value?.firstName} ${value?.lastName} [${value?.companyName}]`\n : `${contact.firstName} ${contact.lastName} [${vendor.name}]`;\n return {\n display: display,\n value: {\n id: contact.id,\n firstName: contact.firstName,\n lastName: contact.lastName,\n companyId: vendor.id,\n companyCode: vendor.code,\n companyName: vendor.name,\n email: contact.emailAddress,\n phoneNumber: contact.phoneNumber,\n products: contact.products\n },\n id: contact.id\n };\n });\n options = options.concat(contacts);\n });\n if (filters) {\n options = options.filter(op => {\n if (!op.value?.products || op.value.products.length === 0) return false;\n const contactProductIds = op.value?.products.map(p => p.productTypeId);\n return (\n intersection(column?.config?.filters, contactProductIds).length > 0\n );\n });\n }\n options = sortBy(options, [\n c => c.value?.companyCode?.toLowerCase(),\n c => c.value?.firstName?.toLowerCase(),\n c => c.value?.lastName?.toLowerCase()\n ]);\n\n const handleChange = (nextValue: ContactListOption) => {\n onValueChange(nextValue.value);\n };\n const getContactDropdownValue = (value: any) => {\n if (!value) return;\n if (Array.isArray(value)) {\n return value\n .map(v => `${v.firstName} ${v.lastName} [${v.companyName}]`)\n .join(\", \");\n } else {\n if (some(options, op => op?.value?.id === value.id)) {\n return value.id;\n }\n return `${value.firstName} ${value.lastName} [${value.companyName}]`;\n }\n };\n if (value) {\n options.push({ display: \"(clear)\", value: null });\n }\n return (\n \n ContactDropdownFilter(option, search)}\n textField=\"display\"\n valueField=\"id\"\n value={getContactDropdownValue(value)}\n data={options}\n onChange={handleChange}\n disabled={\n (column?.readOnly ?? false) || (column?.config?.multiSelect ?? false)\n }\n messages={{\n emptyList: strings.projects.setup.message.emptyContactList\n }}\n itemComponent={({ item }) => }\n />\n \n );\n};\n\nexport const CompanyProvider = () => {\n const { columns } = useTableContext();\n return useMemo(() => {\n return (\n column?.config?.[\"company\"])\n .map(column => column.name)}\n formatterComponent={CompanyFormatter}\n editorComponent={props => LockableWrapper(CompanyEditor, props)}\n />\n );\n }, [columns]);\n};\n\nexport const ContactProvider = () => {\n const { columns } = useTableContext();\n return useMemo(() => {\n return (\n column?.config?.[\"contact\"])\n .map(column => column.name)}\n formatterComponent={ContactFormatter}\n editorComponent={props => LockableWrapper(ContactEditor, props)}\n />\n );\n }, [columns]);\n};\n\nconst MinorityStatusFormatter = ({\n value\n}: DataTypeProvider.ValueFormatterProps) => {\n return {value?.code};\n};\n\nexport interface IMinorityTypeOption {\n value: IMinorityTypeDto;\n label: string;\n}\n\nconst MinorityStatusEditor = (props: DataTypeProvider.ValueEditorProps) => {\n const { value, onValueChange } = props;\n const minorityTypeOptions = useSelector(\n ContactsSelectors.getMinorityStatusOptions\n );\n const [\n showCreateMinorityTypeModal,\n setShowCreateMinorityTypeModal\n ] = useState(false);\n const [prefillValue, setPrefillValue] = useState(\"\");\n const [inputValue, setInputValue] = useState(\"\");\n const [mappedOptions, setMappedOptions] = useState(\n minorityTypeOptions.map(mt => ({\n value: mt.value,\n label: mt.display\n }))\n );\n const mappedValue = mappedOptions.find(mt => mt.label === value);\n\n const handleChange = (nextValue: {\n value: IMinorityTypeDto;\n label: string;\n }) => {\n onValueChange(nextValue.value);\n };\n\n const handleInputChange = (inputValue: any) => {\n if (inputValue === null || inputValue === undefined) return;\n setInputValue(inputValue);\n };\n\n const addMinorityType = (newMinorityType: IMinorityTypeOption) => {\n if (\n mappedOptions.map(o => o.value.code).includes(newMinorityType.value.code)\n ) {\n notify(\n \"danger\",\n `Minority type with code '${newMinorityType.value.code}' already exists.`\n );\n return;\n }\n const newOptions = mappedOptions;\n newOptions.push(newMinorityType);\n newOptions.sort((a, b) => a.label.localeCompare(b.label));\n setMappedOptions(newOptions);\n handleChange(newMinorityType);\n };\n\n const formatCreateLabel = (inputValue: string) =>\n isValidString(inputValue)\n ? `Create \"${inputValue.toUpperCase()}\"`\n : \"To add a new option: type a value, press Enter\";\n\n const isValidNewOption = (inputValue: string, options: any): boolean => {\n const optionLabels = options?.map((o: any) => o.label) ?? [];\n return !optionLabels.includes(inputValue.toUpperCase());\n };\n\n return (\n <>\n \n {\n setPrefillValue(inputValue);\n setShowCreateMinorityTypeModal(true);\n }}\n onChange={handleChange}\n onInputChange={handleInputChange}\n options={mappedOptions}\n value={mappedValue}\n inputValue={inputValue}\n isValidNewOption={isValidNewOption}\n formatCreateLabel={formatCreateLabel}\n />\n \n );\n};\n\nexport const MinorityTypeProvider = () => {\n const { columns } = useTableContext();\n return useMemo(() => {\n return (\n column?.config?.[\"minorityType\"])\n .map(column => column.name)}\n formatterComponent={MinorityStatusFormatter}\n editorComponent={MinorityStatusEditor}\n />\n );\n }, [columns]);\n};\n\nconst MinorityPercentEditor = (props: DataTypeProvider.ValueEditorProps) => {\n const { value, onValueChange } = props;\n\n const handleChange = (props: React.ChangeEvent) => {\n onValueChange(props.target.value);\n };\n const handleBlur = () => {\n const formatted = formatMinorityStatusPercent(value);\n onValueChange(formatted);\n };\n return (\n \n );\n};\n\nexport const MinorityPercentProvider = () => {\n const { columns } = useTableContext();\n return useMemo(() => {\n return (\n column?.name === \"percent\")\n .map(column => column.name)}\n editorComponent={MinorityPercentEditor}\n />\n );\n }, [columns]);\n};\n\nexport const MinorityTypeCodeProvider = () => {\n const { columns } = useTableContext();\n return useMemo(() => {\n return (\n column?.name === \"code\")\n .map(column => column.name)}\n formatterComponent={MinorityTypeCodeFormatter}\n editorComponent={MinorityTypeCodeEditor}\n />\n );\n }, [columns]);\n};\n\nconst MinorityTypeCodeFormatter = ({\n value\n}: DataTypeProvider.ValueFormatterProps) => {\n return {value};\n};\n\nconst MinorityTypeCodeEditor = (props: DataTypeProvider.ValueEditorProps) => {\n const { value, onValueChange } = props;\n\n const handleChange = (props: React.ChangeEvent) => {\n onValueChange(props.target.value);\n };\n\n return (\n \n );\n};\n\nexport const PreConTextProvider = () => {\n const { columns } = useTableContext();\n return React.useMemo(\n () => (\n LockableWrapper(TextEditor, props)}\n for={columns\n .filter(\n column =>\n column.type === DataColumnType.ShortText ||\n column.type === DataColumnType.LongText\n )\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nconst BooleanFormatter = ({ value }: DataTypeProvider.ValueFormatterProps) => {\n const checked = value === true ? true : false;\n return (\n
\n {checked && }\n
\n );\n};\n\nexport const PreConBooleanFormatProvider = () => {\n const { columns } = useTableContext();\n\n return useMemo(\n () => (\n LockableWrapper(BooleanEditor, props)}\n for={columns\n .filter(column => column.type === DataColumnType.Boolean)\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nexport const PreConDropDownFormatProvider = () => {\n const { columns } = useTableContext();\n\n return useMemo(\n () => (\n LockableWrapper(DropDownEditor, props)}\n for={columns\n .filter(\n column =>\n column.type === DataColumnType.List ||\n column.type === DataColumnType.States\n )\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nexport const NumericInputEditor = (\n props: DataTypeProvider.ValueEditorProps\n) => {\n const { onValueChange, value, autoFocus, disabled } = props;\n const column = props.column as TypedDataColumn;\n const isPercentage = column.config?.showAsPercent;\n let valueState = value?.toString() || \"\";\n if (isPercentage && valueState != \"\") {\n valueState = formatPercent(value);\n }\n const [stringNumber, setStringNumber] = useState(valueState);\n const isCalculatedField =\n column.config?.preConType === SchemaFieldType.Calculated;\n\n if (isCalculatedField && !isFinite(value)) {\n return (\n \n );\n }\n\n const isCurrency = column.type === DataColumnType.Currency;\n const numberMask = createNumberMask({\n allowDecimal: true,\n allowNegative: true,\n prefix: isCurrency ? \"$\" : \"\",\n suffix: isPercentage ? \"%\" : \"\",\n decimalLimit: isCurrency || isPercentage ? 2 : 5,\n integerLimit: 10,\n allowLeadingZeroes: true\n });\n\n const handleChange = (e: any) => {\n const value = e.target.value;\n const numberValue = numeral(value).value();\n onValueChange(numberValue);\n setStringNumber(value);\n };\n const handleBlur = (e: any) => {\n const value = e.target.value;\n setStringNumber(value);\n };\n return (\n \n );\n};\nexport const extendedNumberFormatter = (\n props: DataTypeProvider.ValueFormatterProps\n) => {\n if (props.value === Infinity || props.value === -Infinity) {\n return {props.value} ;\n }\n\n return NumberFormatter(props);\n};\n\nexport const PreConNumberFormatProvider = () => {\n const { columns } = useTableContext();\n\n return useMemo(\n () => (\n LockableWrapper(NumericInputEditor, props)}\n for={columns\n .filter(\n column =>\n column.type === DataColumnType.Number ||\n column.type === DataColumnType.Currency\n )\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\nconst LockedPopover = memo(({ locked }: { locked: boolean }) => {\n if (locked) {\n return (\n \n Locked\n \n );\n }\n\n return <>;\n});\n\nexport const LockableWrapper = (\n FormatterComponent: React.FC,\n props: DataTypeProvider.ValueEditorProps\n) => {\n const { checkIfFieldIsLocked } = useProjectFieldsMetadata(props.row.id);\n const isFieldLocked = checkIfFieldIsLocked(props.column.name);\n const isDisabled =\n //@ts-ignore\n props.column.readOnly || props.disabled || isFieldLocked;\n const newColumn = { ...props.column };\n //@ts-ignore\n newColumn.readOnly = isDisabled;\n return (\n }\n >\n
\n \n
\n \n );\n};\n\nexport const CompanyInputContainer = styled.div`\n & .rw-widget-input {\n height: 34px;\n }\n`;\n\nexport const ContactInputContainer = styled.div`\n & .rw-widget-input {\n height: 34px;\n }\n`;\n\nconst StyledSelect = styled(Creatable)`\n .react-select__control {\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n max-height: 34px !important;\n min-height: 34px !important;\n }\n\n .react-select__input {\n height: 15px;\n }\n\n .react-select__single-value {\n padding-bottom: 5px;\n padding-left: 7px;\n }\n .react-select__multi-value {\n background-color: ${ConcreteColors.gray200};\n }\n\n .react-select__value-container {\n padding: 2px;\n }\n`;\n","import { Button, Icon } from \"hcss-components\";\nimport * as React from \"react\";\nimport Modal from \"./\";\nimport { strings } from \"localization\";\n\nexport interface ConfirmDeleteProps {\n title?: string;\n children?: React.ReactNode;\n show: boolean;\n handleClose: () => void;\n handleDelete?: () => void;\n style?: React.CSSProperties;\n footer?: React.ReactChild;\n}\n\nexport default class ConfirmDelete extends React.PureComponent<\n ConfirmDeleteProps\n> {\n render() {\n const props = this.props;\n return (\n \n {props.children}\n \n );\n }\n footer = () => {\n return (\n
\n \n \n
\n );\n };\n}\n","import { initializeApp } from \"firebase/app\";\nimport { getAuth } from \"firebase/auth\";\nimport config from \"./config\";\nexport const firebaseApp = initializeApp(config.firebaseConfig);\nexport const auth = getAuth(firebaseApp);\n","import { strings } from \"localization\";\n\nexport const estimateExtendedSchema = () => ({\n fields: {\n \"values.code\": {\n id: \"values.code\",\n name: strings.heavyBid.code,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {},\n required: false\n },\n \"values.name\": {\n id: \"values.name\",\n name: strings.heavyBid.name,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {},\n required: false\n },\n \"values.lastModified\": {\n id: \"values.lastModified\",\n name: strings.heavyBid.lastActivity,\n type: 9,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: true,\n ignoreTimezone: false\n },\n required: false\n },\n \"values.isActiveEstimate\": {\n id: \"values.isActiveEstimate\",\n name: strings.heavyBid.activeEstimate,\n type: 6,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: true,\n config: {},\n required: false\n },\n \"values.isExcludedEstimate\": {\n id: \"values.isExcludedEstimate\",\n name: strings.heavyBid.excludedEstimate,\n type: 6,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n hiddenInEdit: true,\n config: {},\n required: false\n },\n \"values.processedStatus\": {\n id: \"values.processedStatus\",\n name: strings.heavyBid.processedStatus.title,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n hiddenInEdit: true,\n config: {},\n required: false\n },\n \"values.heavyBidDivision\": {\n id: \"values.heavyBidDivision\",\n name: strings.heavyBid.division,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.projectName\": {\n id: \"values.filters.projectName\",\n name: strings.heavyBid.projectName,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.projectNumber\": {\n id: \"values.filters.projectNumber\",\n name: strings.heavyBid.projectNumber,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 20\n },\n required: false\n },\n \"values.filters.status\": {\n id: \"values.filters.status\",\n name: strings.heavyBid.status,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.engineer\": {\n id: \"values.filters.engineer\",\n name: strings.heavyBid.engineer,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.estimator\": {\n id: \"values.filters.estimator\",\n name: strings.heavyBid.estimator,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.owner\": {\n id: \"values.filters.owner\",\n name: strings.heavyBid.owner,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.bidDate\": {\n id: \"values.filters.bidDate\",\n name: strings.heavyBid.bidDate,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.filters.startDate\": {\n id: \"values.filters.startDate\",\n name: strings.heavyBid.startDate,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.filters.reviewDate\": {\n id: \"values.filters.reviewDate\",\n name: strings.heavyBid.reviewDate,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.filters.createdDate\": {\n id: \"values.filters.createdDate\",\n name: strings.heavyBid.createdDate,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.totals.bidTotal_Bid\": {\n id: \"values.totals.bidTotal_Bid\",\n name: strings.heavyBid.bidTotal,\n type: 8,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {},\n required: false\n },\n \"values.totals.totalCost_Takeoff\": {\n id: \"values.totals.totalCost_Takeoff\",\n name: strings.heavyBid.totalCost,\n type: 8,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {},\n required: false\n },\n \"values.filters.state\": {\n id: \"values.filters.state\",\n name: strings.heavyBid.state,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.typeOfWork\": {\n id: \"values.filters.typeOfWork\",\n name: strings.heavyBid.typeOfWork,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.estimateTag1\": {\n id: \"values.filters.estimateTag1\",\n name: strings.heavyBid.filter1,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.estimateTag2\": {\n id: \"values.filters.estimateTag2\",\n name: strings.heavyBid.filter2,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.estimateTag3\": {\n id: \"values.filters.estimateTag3\",\n name: strings.heavyBid.filter3,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.estimateTag4\": {\n id: \"values.filters.estimateTag4\",\n name: strings.heavyBid.filter4,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.estimateTag5\": {\n id: \"values.filters.estimateTag5\",\n name: strings.heavyBid.filter5,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.estimateTag6\": {\n id: \"values.filters.estimateTag6\",\n name: strings.heavyBid.filter6,\n type: 3,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n \"values.filters.userDefinedText1\": {\n id: \"values.filters.userDefinedText1\",\n name: strings.heavyBid.text1,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText2\": {\n id: \"values.filters.userDefinedText2\",\n name: strings.heavyBid.text2,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText3\": {\n id: \"values.filters.userDefinedText3\",\n name: strings.heavyBid.text3,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText4\": {\n id: \"values.filters.userDefinedText4\",\n name: strings.heavyBid.text4,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText5\": {\n id: \"values.filters.userDefinedText5\",\n name: strings.heavyBid.text5,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText6\": {\n id: \"values.filters.userDefinedText6\",\n name: strings.heavyBid.text6,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText7\": {\n id: \"values.filters.userDefinedText7\",\n name: strings.heavyBid.text7,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText8\": {\n id: \"values.filters.userDefinedText8\",\n name: strings.heavyBid.text8,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText9\": {\n id: \"values.filters.userDefinedText9\",\n name: strings.heavyBid.text9,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText10\": {\n id: \"values.filters.userDefinedText10\",\n name: strings.heavyBid.text10,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText11\": {\n id: \"values.filters.userDefinedText11\",\n name: strings.heavyBid.text11,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText12\": {\n id: \"values.filters.userDefinedText12\",\n name: strings.heavyBid.text12,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText13\": {\n id: \"values.filters.userDefinedText13\",\n name: strings.heavyBid.text13,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText14\": {\n id: \"values.filters.userDefinedText14\",\n name: strings.heavyBid.text14,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText15\": {\n id: \"values.filters.userDefinedText15\",\n name: strings.heavyBid.text15,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText16\": {\n id: \"values.filters.userDefinedText16\",\n name: strings.heavyBid.text16,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText17\": {\n id: \"values.filters.userDefinedText17\",\n name: strings.heavyBid.text17,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText18\": {\n id: \"values.filters.userDefinedText18\",\n name: strings.heavyBid.text18,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText19\": {\n id: \"values.filters.userDefinedText19\",\n name: strings.heavyBid.text19,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedText20\": {\n id: \"values.filters.userDefinedText20\",\n name: strings.heavyBid.text20,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 50\n },\n required: false\n },\n \"values.filters.userDefinedInteger1\": {\n id: \"values.filters.userDefinedInteger1\",\n name: strings.heavyBid.integer1,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999,\n max: 999999999999,\n decimalScale: 0,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedInteger2\": {\n id: \"values.filters.userDefinedInteger2\",\n name: strings.heavyBid.integer2,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999,\n max: 999999999999,\n decimalScale: 0,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedInteger3\": {\n id: \"values.filters.userDefinedInteger3\",\n name: strings.heavyBid.integer3,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999,\n max: 999999999999,\n decimalScale: 0,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedInteger4\": {\n id: \"values.filters.userDefinedInteger4\",\n name: strings.heavyBid.integer4,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999,\n max: 999999999999,\n decimalScale: 0,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedInteger5\": {\n id: \"values.filters.userDefinedInteger5\",\n name: strings.heavyBid.integer5,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999,\n max: 999999999999,\n decimalScale: 0,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber1\": {\n id: \"values.filters.userDefinedNumber1\",\n name: strings.heavyBid.number1,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber2\": {\n id: \"values.filters.userDefinedNumber2\",\n name: strings.heavyBid.number2,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber3\": {\n id: \"values.filters.userDefinedNumber3\",\n name: strings.heavyBid.number3,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber4\": {\n id: \"values.filters.userDefinedNumber4\",\n name: strings.heavyBid.number4,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber5\": {\n id: \"values.filters.userDefinedNumber5\",\n name: strings.heavyBid.number5,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber6\": {\n id: \"values.filters.userDefinedNumber6\",\n name: strings.heavyBid.number6,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber7\": {\n id: \"values.filters.userDefinedNumber7\",\n name: strings.heavyBid.number7,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber8\": {\n id: \"values.filters.userDefinedNumber8\",\n name: strings.heavyBid.number8,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber9\": {\n id: \"values.filters.userDefinedNumber9\",\n name: strings.heavyBid.number9,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber10\": {\n id: \"values.filters.userDefinedNumber10\",\n name: strings.heavyBid.number10,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber11\": {\n id: \"values.filters.userDefinedNumber11\",\n name: strings.heavyBid.number11,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber12\": {\n id: \"values.filters.userDefinedNumber12\",\n name: strings.heavyBid.number12,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber13\": {\n id: \"values.filters.userDefinedNumber13\",\n name: strings.heavyBid.number13,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber14\": {\n id: \"values.filters.userDefinedNumber14\",\n name: strings.heavyBid.number14,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber15\": {\n id: \"values.filters.userDefinedNumber15\",\n name: strings.heavyBid.number15,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber16\": {\n id: \"values.filters.userDefinedNumber16\",\n name: strings.heavyBid.number16,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber17\": {\n id: \"values.filters.userDefinedNumber17\",\n name: strings.heavyBid.number17,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber18\": {\n id: \"values.filters.userDefinedNumber18\",\n name: strings.heavyBid.number18,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber19\": {\n id: \"values.filters.userDefinedNumber19\",\n name: strings.heavyBid.number19,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedNumber20\": {\n id: \"values.filters.userDefinedNumber20\",\n name: strings.heavyBid.number20,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n min: -99999999999.9999,\n max: 999999999999.9999,\n decimalScale: 4,\n setCellValue: (value: number | null) => value ?? 0\n },\n required: false\n },\n \"values.filters.userDefinedDate1\": {\n id: \"values.filters.userDefinedDate1\",\n name: strings.heavyBid.date1,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.filters.userDefinedDate2\": {\n id: \"values.filters.userDefinedDate2\",\n name: strings.heavyBid.date2,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.filters.userDefinedDate3\": {\n id: \"values.filters.userDefinedDate3\",\n name: strings.heavyBid.date3,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.filters.userDefinedDate4\": {\n id: \"values.filters.userDefinedDate4\",\n name: strings.heavyBid.date4,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.filters.userDefinedDate5\": {\n id: \"values.filters.userDefinedDate5\",\n name: strings.heavyBid.date5,\n type: 2,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n utc: false,\n ignoreTimezone: true\n },\n required: false\n },\n \"values.filters.address\": {\n id: \"values.filters.address\",\n name: strings.heavyBid.address,\n type: 0,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n maxLength: 250\n },\n required: false\n },\n \"values.filters.latitude\": {\n id: \"values.filters.latitude\",\n name: strings.heavyBid.latitude,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n hiddenInEdit: false,\n config: {},\n required: false\n },\n \"values.filters.longitude\": {\n id: \"values.filters.longitude\",\n name: strings.heavyBid.longitude,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: false,\n hiddenInForm: true,\n hiddenInTable: false,\n hiddenInEdit: false,\n config: {},\n required: false\n },\n \"values.totals.manhours_Total\": {\n id: \"values.totals.manhours_Total\",\n name: strings.heavyBid.manhours,\n type: 7,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {},\n required: false\n }\n },\n id: \"estimatesextended\",\n name: \"EstimatesExtended\",\n schemaName: \"estimatesExtended\",\n orderedSections: [\n \"info\",\n \"tags\",\n \"userDefinedText\",\n \"userDefinedInts\",\n \"userDefinedNumbers\",\n \"userDefinedDates\"\n ],\n sections: {\n info: {\n id: \"info\",\n name: strings.heavyBid.estimateInfo,\n fields: [\n \"values.code\",\n \"values.name\",\n \"values.lastModified\",\n \"values.isActiveEstimate\",\n \"values.heavyBidDivision\",\n \"values.filters.projectName\",\n \"values.filters.projectNumber\",\n \"values.filters.status\",\n \"values.filters.engineer\",\n \"values.filters.estimator\",\n \"values.filters.owner\",\n \"values.filters.bidDate\",\n \"values.filters.startDate\",\n \"values.filters.reviewDate\",\n \"values.filters.createdDate\",\n \"values.totals.bidTotal_Bid\",\n \"values.totals.totalCost_Takeoff\",\n \"values.filters.state\",\n \"values.filters.typeOfWork\",\n \"values.processedStatus\",\n \"values.isExcludedEstimate\",\n \"values.filters.address\",\n \"values.filters.latitude\",\n \"values.filters.longitude\",\n \"values.totals.manhours_Total\"\n ]\n },\n tags: {\n id: \"tags\",\n name: strings.heavyBid.tags,\n fields: [\n \"values.filters.estimateTag1\",\n \"values.filters.estimateTag2\",\n \"values.filters.estimateTag3\",\n \"values.filters.estimateTag4\",\n \"values.filters.estimateTag5\",\n \"values.filters.estimateTag6\"\n ]\n },\n userDefinedText: {\n id: \"userDefinedText\",\n name: strings.heavyBid.userDefinedText,\n fields: [\n \"values.filters.userDefinedText1\",\n \"values.filters.userDefinedText2\",\n \"values.filters.userDefinedText3\",\n \"values.filters.userDefinedText4\",\n \"values.filters.userDefinedText5\",\n \"values.filters.userDefinedText6\",\n \"values.filters.userDefinedText7\",\n \"values.filters.userDefinedText8\",\n \"values.filters.userDefinedText9\",\n \"values.filters.userDefinedText10\",\n \"values.filters.userDefinedText11\",\n \"values.filters.userDefinedText12\",\n \"values.filters.userDefinedText13\",\n \"values.filters.userDefinedText14\",\n \"values.filters.userDefinedText15\",\n \"values.filters.userDefinedText16\",\n \"values.filters.userDefinedText17\",\n \"values.filters.userDefinedText18\",\n \"values.filters.userDefinedText19\",\n \"values.filters.userDefinedText20\"\n ]\n },\n userDefinedInts: {\n id: \"userDefinedInts\",\n name: strings.heavyBid.userDefinedIntegers,\n fields: [\n \"values.filters.userDefinedInteger1\",\n \"values.filters.userDefinedInteger2\",\n \"values.filters.userDefinedInteger3\",\n \"values.filters.userDefinedInteger4\",\n \"values.filters.userDefinedInteger5\"\n ]\n },\n userDefinedNumbers: {\n id: \"userDefinedNumbers\",\n name: strings.heavyBid.userDefinedNumbers,\n fields: [\n \"values.filters.userDefinedNumber1\",\n \"values.filters.userDefinedNumber2\",\n \"values.filters.userDefinedNumber3\",\n \"values.filters.userDefinedNumber4\",\n \"values.filters.userDefinedNumber5\",\n \"values.filters.userDefinedNumber6\",\n \"values.filters.userDefinedNumber7\",\n \"values.filters.userDefinedNumber8\",\n \"values.filters.userDefinedNumber9\",\n \"values.filters.userDefinedNumber10\",\n \"values.filters.userDefinedNumber11\",\n \"values.filters.userDefinedNumber12\",\n \"values.filters.userDefinedNumber13\",\n \"values.filters.userDefinedNumber14\",\n \"values.filters.userDefinedNumber15\",\n \"values.filters.userDefinedNumber16\",\n \"values.filters.userDefinedNumber17\",\n \"values.filters.userDefinedNumber18\",\n \"values.filters.userDefinedNumber19\",\n \"values.filters.userDefinedNumber20\"\n ]\n },\n userDefinedDates: {\n id: \"userDefinedDates\",\n name: strings.heavyBid.userDefinedDates,\n fields: [\n \"values.filters.userDefinedDate1\",\n \"values.filters.userDefinedDate2\",\n \"values.filters.userDefinedDate3\",\n \"values.filters.userDefinedDate4\",\n \"values.filters.userDefinedDate5\"\n ]\n }\n }\n});\n","import { formatPercent } from \"core/util/format\";\nimport { numberCompare } from \"hcss-tables\";\nimport { strings } from \"localization\";\n\nexport const bidResultsSchema = () => ({\n id: \"bidresults\",\n name: strings.bidResults.title,\n schemaName: \"bidresults\",\n fields: {\n winner: {\n id: \"winner\",\n name: strings.bidResults.table.winner,\n type: 6,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n name: {\n id: \"name\",\n name: strings.bidResults.table.companyName,\n type: 0,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n amount: {\n id: \"amount\",\n name: strings.bidResults.table.amount,\n type: 8,\n config: {},\n readOnly: false,\n required: false,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n fromLowBid: {\n id: \"fromLowBid\",\n name: strings.bidResults.table.fromLowBid,\n type: 8,\n config: {},\n readOnly: true,\n required: false,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n leftOnTable: {\n id: \"leftOnTable\",\n name: strings.bidResults.table.leftOnTable,\n type: 8,\n config: {},\n readOnly: true,\n required: false,\n standard: true,\n protected: true,\n hiddenInTable: true,\n hiddenInForm: false,\n lookup: false\n },\n percentFromLowBid: {\n id: \"percentFromLowBid\",\n name: strings.bidResults.table.percentFromLowBid,\n type: 7,\n config: {\n showAsPercent: true\n },\n readOnly: true,\n required: false,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n }\n },\n sections: {\n \"efac79ed-2b22-4381-897d-39bf0ef88d6f\": {\n id: \"efac79ed-2b22-4381-897d-39bf0ef88d6f\",\n name: \"Bid Results\",\n fields: [\n \"winner\",\n \"name\",\n \"amount\",\n \"fromLowBid\",\n \"leftOnTable\",\n \"percentFromLowBid\"\n ]\n }\n },\n orderedSections: [\"efac79ed-2b22-4381-897d-39bf0ef88d6f\"]\n});\n","import { SchemaFieldType } from \"api\";\nimport { strings } from \"localization\";\n\nexport const activityCodebooksSchema = () => ({\n id: \"activityCodebooks\",\n name: strings.estimates.codebooks.schema.name,\n schemaName: \"activityCodebooks\",\n fields: {\n \"codebook.code\": {\n id: \"codebook.code\",\n name: strings.estimates.codebooks.schema.codebookCode,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"codebook.description\": {\n id: \"codebook.description\",\n name: strings.estimates.codebooks.schema.codebookDescription,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"codebook.level\": {\n id: \"codebook.level\",\n name: strings.estimates.codebooks.schema.codebookLevel,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"codebook.units\": {\n id: \"codebook.units\",\n name: strings.estimates.codebooks.schema.codebookUnits,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"codebook.lastUpdate\": {\n id: \"codebook.lastUpdate\",\n name: strings.estimates.codebooks.schema.codebookLastUpdate,\n type: SchemaFieldType.Date,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"codebook.timesUsed\": {\n id: \"codebook.timesUsed\",\n name: strings.estimates.codebooks.schema.codebookTimesUsed,\n type: SchemaFieldType.Number,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"codebook.timesModified\": {\n id: \"codebook.timesModified\",\n name: strings.estimates.codebooks.schema.codebookTimesModified,\n type: SchemaFieldType.Number,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"codebook.partitionId\": {\n id: \"codebook.partitionId\",\n name: strings.estimates.codebooks.schema.codebookPartitionId,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"codebook.modifiedCount\": {\n id: \"codebook.modifiedCount\",\n name: strings.estimates.codebooks.schema.codebookModifiedCount,\n type: SchemaFieldType.Number,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"activity.code\": {\n id: \"activity.code\",\n name: strings.estimates.codebooks.schema.activityCode,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"activity.description\": {\n id: \"activity.description\",\n name: strings.estimates.codebooks.schema.activityDescription,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"activity.units\": {\n id: \"activity.units\",\n name: strings.estimates.codebooks.schema.activityUnits,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"activity.biditem\": {\n id: \"activity.biditem\",\n name: strings.estimates.codebooks.schema.biditem,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"activity.estimate\": {\n id: \"activity.estimate\",\n name: strings.estimates.codebooks.schema.estimate,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"activity.lastModified\": {\n id: \"activity.lastModified\",\n name: strings.estimates.codebooks.schema.activityLastModified,\n type: SchemaFieldType.DateTime,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n },\n \"activity.partitionId\": {\n id: \"activity.partitionId\",\n name: strings.estimates.codebooks.schema.activityPartitionId,\n type: SchemaFieldType.ShortText,\n config: {},\n readOnly: false,\n required: true,\n standard: true,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: false,\n lookup: false\n }\n },\n sections: {\n codebookInfo: {\n id: \"codebookInfo\",\n name: \"Codebook Info\",\n fields: [\n \"codebook.code\",\n \"codebook.description\",\n \"codebook.units\",\n \"codebook.level\",\n \"codebook.lastUpdate\",\n \"codebook.partitionId\",\n \"codebook.modifiedCount\",\n \"codebook.timesUsed\",\n \"codebook.timesModified\",\n \"activity.code\",\n \"activity.description\",\n \"activity.units\",\n \"activity.biditem\",\n \"activity.estimate\",\n \"activity.lastModified\",\n \"activity.partitionId\"\n ]\n }\n },\n orderedSections: [\"codebookInfo\"]\n});\n","import produce from \"immer\";\nimport { find } from \"lodash-es\";\nimport {\n ActionType,\n createAction,\n createAsyncAction,\n getType\n} from \"typesafe-actions\";\nimport uuid from \"uuid/v4\";\nimport { Schema, SchemaField, SchemaSection } from \"api\";\nimport { WithId } from \"core\";\nimport { estimateExtendedSchema } from \"./standard-schemas/estimate-extended-schema\";\nimport { bidResultsSchema } from \"./standard-schemas/bidresults-schema\";\nimport { quoteDashboardSchema } from \"./standard-schemas/quote-dashboard-schema\";\nimport { generateColumnConfig } from \"./selectors\";\nimport { activityCodebooksSchema } from \"./standard-schemas/activity-codebooks-schema\";\n\nexport const STATE_KEY = \"schemas\";\n\n// Models\nexport interface State {\n allIds: string[];\n projectSchemaId?: string;\n workingCopy: { [key: string]: WithId };\n original: { [key: string]: WithId };\n loading: boolean;\n loaded: boolean;\n saving: boolean;\n saved: boolean;\n errors: string[];\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n loadSchemas: createAsyncAction(\n \"SCHEMAS/LOAD_REQUEST\",\n \"SCHEMAS/LOAD_SUCCESS\",\n \"SCHEMAS/LOAD_FAILURE\"\n )[], Error>(),\n\n saveSchema: createAsyncAction(\n \"SCHEMAS/SAVE_REQUEST\",\n \"SCHEMAS/SAVE_SUCCESS\",\n \"SCHEMAS/SAVE_FAILURE\"\n )<\n {\n schema: WithId;\n meta?: {\n type?: string;\n message?: string;\n silent?: boolean;\n inRedux?: boolean;\n };\n },\n WithId,\n Error\n >(),\n\n reloadStandardSchemas: createAction(\"SCHEMAS/RELOAD_STANDARD\", resolve => {\n return () => resolve();\n }),\n\n moveSchemaField: createAction(\"SCHEMAS/MOVE_FIELD\", resolve => {\n return (\n schemaId: string,\n fieldId: string,\n original: { sectionId: string; index: number },\n destination: { sectionId: string; index: number }\n ) =>\n resolve({\n schemaId,\n fieldId,\n original,\n destination\n });\n }),\n\n addSchemaField: createAction(\"SCHEMAS/ADD_FIELD\", resolve => {\n return (\n schemaId: string,\n fieldType: number,\n destination: { sectionId: string; index: number },\n config?: { [key: string]: any }\n ) => resolve({ schemaId, fieldType, destination, config });\n }),\n\n saveSchemaField: createAction(\"SCHEMAS/SAVE_FIELD\", resolve => {\n return (\n schemaId: string,\n field: SchemaField,\n meta?: { autosave: boolean }\n ) => resolve({ schemaId, field, meta });\n }),\n\n saveDataSyncPreference: createAction(\n \"SCHEMAS/SAVE_DATA_SYNC_PREFERENCE\",\n resolve => {\n return (\n schemaId: string,\n dataSyncPreference: string,\n meta?: { autosave: boolean }\n ) => resolve({ schemaId, dataSyncPreference, meta });\n }\n ),\n\n addSchemaFieldOption: createAction(\"SCHEMAS/ADD_FIELD_OPTION\", resolve => {\n return (\n schemaId: string,\n fieldId: string,\n listValue: { display: string; value: string },\n saveSchema?: boolean\n ) => resolve({ schemaId, fieldId, listValue }, { saveSchema });\n }),\n\n removeSchemaField: createAction(\"SCHEMAS/REMOVE_FIELD\", resolve => {\n return (schemaId: string, fieldId: string) =>\n resolve({ schemaId, fieldId });\n }),\n\n saveSchemaSection: createAction(\"SCHEMAS/SAVE_SECTION\", resolve => {\n return (schemaId: string, section: SchemaSection) =>\n resolve({ schemaId, section });\n }),\n\n removeSchemaSection: createAction(\"SCHEMAS/REMOVE_SECTION\", resolve => {\n return (schemaId: string, id: string) => resolve({ schemaId, id });\n }),\n\n moveSchemaSection: createAction(\"SCHEMAS/MOVE_SECTION\", resolve => {\n return (\n schemaId: string,\n sectionId: string,\n originalIndex: number,\n destinationIndex: number\n ) =>\n resolve({\n schemaId,\n sectionId,\n originalIndex,\n destinationIndex\n });\n }),\n\n addSchemaSection: createAction(\"SCHEMAS/ADD_SECTION\", resolve => {\n return (schemaId: string, index: number) => resolve({ schemaId, index });\n }),\n\n resetSchema: createAction(\"SCHEMAS/RESET\", resolve => {\n return (schemaId: string) => resolve({ schemaId });\n }),\n\n updateSchemas: createAction(\"SCHEMAS/UPDATE\", resolve => {\n return (schemas: WithId[]) => resolve({ schemas });\n })\n};\n\nexport type SchemaActions = ActionType;\n\nconst estimatesextended = estimateExtendedSchema();\nconst bidresults = bidResultsSchema();\nconst quoteDashboard = quoteDashboardSchema();\nconst activityCodebooks = activityCodebooksSchema();\n\nconst initialState: State = {\n allIds: [\n estimatesextended.id,\n bidresults.id,\n quoteDashboard.id,\n activityCodebooks.id\n ],\n workingCopy: {\n estimatesextended,\n bidresults,\n quoteDashboard,\n activityCodebooks\n },\n original: {\n estimatesextended,\n bidresults,\n quoteDashboard,\n activityCodebooks\n },\n loading: false,\n loaded: false,\n saving: false,\n saved: true,\n errors: []\n};\n\nexport const bidResultsLookupFields = [\n \"winningBidCompany\",\n \"winningBidAmount\",\n \"fromLowBid\",\n \"percentFromLowBid\",\n \"leftOnTable\",\n \"percentLeftOnTable\"\n];\n\nexport const estimateLookupFields = [\n \"values.code\",\n \"values.totals.totalCost_Takeoff\",\n \"values.totals.bidTotal_Bid\",\n \"values.totals.totalLabor_Total\",\n \"values.totals.permanentMaterial_Total\",\n \"values.totals.constructionMaterial_Total\",\n \"values.totals.subcontract_Total\",\n \"values.totals.totalEqp_Total\",\n \"values.totals.bond\",\n \"values.totals.addon_Cost\",\n \"values.totals.addon_Total\",\n \"values.totals.manhours_Total\",\n \"values.totals.markupPercentCost_Takeoff\",\n \"values.totals.markupPercentCost_Bid\",\n \"values.totals.markupPercentSales_Takeoff\",\n \"values.totals.markupPercentSales_Bid\",\n \"values.totals.balMarkup_Bid\",\n \"values.totals.balMarkup_Takeoff\",\n \"values.totals.actualMarkup_Bid\",\n \"values.totals.actualMarkup_Takeoff\"\n];\n\nconst hJJobLookUpFields = [\"hJJob.Code\", \"hJJob.Description\"];\n//This field should show as one single field in Customize Setup, therefore we should\n// have logic for this field similar to the estimateLookupFields and bid results fields\nexport const lastModifiedByFieldId = \"lastModifiedBy\";\n\n// Reducer\nexport const reducer = (state = initialState, action: SchemaActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.reloadStandardSchemas): {\n const estimatesextended = estimateExtendedSchema();\n const bidresults = bidResultsSchema();\n draft.original.estimatesextended = estimatesextended;\n draft.workingCopy.estimatesextended = estimatesextended;\n draft.original.bidresults = bidresults;\n draft.workingCopy.bidresults = bidresults;\n draft.original.quoteDashboard = quoteDashboard;\n draft.workingCopy.quoteDashboard = quoteDashboard;\n draft.original.activityCodebooks = activityCodebooks;\n draft.workingCopy.activityCodebooks = activityCodebooks;\n break;\n }\n case getType(actions.loadSchemas.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n case getType(actions.loadSchemas.success): {\n action.payload.forEach(schema => {\n if (!(schema.id in draft.original)) {\n draft.allIds.push(schema.id);\n }\n draft.workingCopy[schema.id] = schema;\n draft.original[schema.id] = schema;\n });\n\n draft.loading = false;\n draft.loaded = true;\n\n const projectSchema = find(\n action.payload,\n schema => schema.schemaName === \"projects\"\n );\n if (projectSchema) {\n draft.projectSchemaId = projectSchema.id;\n }\n break;\n }\n case getType(actions.loadSchemas.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error loading schemas: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.saveSchema.request): {\n draft.saving = true;\n draft.saved = false;\n break;\n }\n\n case getType(actions.saveSchema.success): {\n draft.original[action.payload.id] = action.payload;\n draft.workingCopy[action.payload.id] = action.payload;\n draft.saving = false;\n draft.saved = true;\n const currentIndex = draft.allIds.indexOf(action.payload.id);\n if (currentIndex === -1) {\n draft.allIds.push(action.payload.id);\n }\n break;\n }\n\n case getType(actions.saveSchema.failure): {\n draft.saving = false;\n draft.saved = false;\n break;\n }\n\n case getType(actions.updateSchemas): {\n const { schemas } = action.payload;\n schemas.forEach(schema => {\n const currentIndex = draft.allIds.indexOf(schema.id);\n\n if (schema.deleted) {\n if (currentIndex > -1) {\n draft.allIds.splice(currentIndex, 1);\n }\n if (schema.id in draft.workingCopy) {\n delete draft.workingCopy[schema.id];\n }\n if (schema.id in draft.original) {\n delete draft.original[schema.id];\n }\n } else {\n draft.workingCopy[schema.id] = schema;\n draft.original[schema.id] = schema;\n if (currentIndex === -1) {\n draft.allIds.push(schema.id);\n }\n }\n });\n break;\n }\n case getType(actions.resetSchema): {\n draft.workingCopy[action.payload.schemaId] =\n state.original[action.payload.schemaId];\n break;\n }\n case getType(actions.moveSchemaField): {\n const { original, destination, fieldId, schemaId } = action.payload;\n const sections = draft.workingCopy[action.payload.schemaId].sections;\n sections[original.sectionId].fields.splice(original.index, 1);\n sections[destination.sectionId].fields.splice(\n destination.index,\n 0,\n fieldId\n );\n\n reorderFields(draft.workingCopy[schemaId]);\n break;\n }\n case getType(actions.addSchemaField): {\n const { destination, fieldType, schemaId, config } = action.payload;\n const schema = draft.workingCopy[schemaId];\n const newField: SchemaField = {\n id: uuid(),\n hiddenInForm: false,\n hiddenInTable: false,\n lookup: false,\n name: \"\",\n readOnly: false,\n required: false,\n standard: false,\n protected: false,\n adminOnly: false,\n type: fieldType,\n config: generateColumnConfig(fieldType, config)\n };\n\n schema.fields[newField.id] = newField;\n schema.sections[destination.sectionId].fields.splice(\n destination.index,\n 0,\n newField.id\n );\n\n reorderFields(schema);\n break;\n }\n\n case getType(actions.saveSchemaField): {\n const { schemaId, field } = action.payload;\n const schema = draft.workingCopy[schemaId];\n schema.fields[field.id] = field;\n if (field.id === \"hJJob\") {\n // Job field is always hidden from the table\n const heavyJobFields = [\"hJJob.Code\", \"hJJob.Description\"];\n heavyJobFields.forEach(hJField => {\n schema.fields[hJField].hiddenInTable = field.hiddenInForm;\n schema.fields[hJField].hiddenInForm = true;\n });\n schema.fields[\"hJJob\"].hiddenInTable = true;\n }\n break;\n }\n\n case getType(actions.saveDataSyncPreference): {\n const { schemaId, dataSyncPreference } = action.payload;\n const schema = draft.workingCopy[schemaId];\n schema.dataSyncPreference = dataSyncPreference;\n break;\n }\n\n case getType(actions.addSchemaFieldOption): {\n const { schemaId, fieldId, listValue } = action.payload;\n const field = draft.workingCopy[schemaId].fields[fieldId];\n if (field.config && field.config.listValues) {\n const values: string[] = field.config.listValues.map(\n (listObject: any) => listObject.value\n );\n if (!values.includes(listValue.value)) {\n field.config.listValues.push(listValue);\n }\n }\n break;\n }\n\n case getType(actions.removeSchemaField): {\n const { schemaId, fieldId } = action.payload;\n const schema = draft.workingCopy[schemaId];\n if (!schema.fields[fieldId].protected) {\n Object.keys(schema.sections).forEach(sectionId => {\n schema.sections[sectionId].fields = schema.sections[\n sectionId\n ].fields.filter(id => id !== fieldId);\n });\n\n delete schema.fields[fieldId];\n }\n break;\n }\n\n case getType(actions.saveSchemaSection): {\n const { schemaId, section } = action.payload;\n const schema = draft.workingCopy[schemaId];\n schema.sections[section.id] = section;\n break;\n }\n\n case getType(actions.removeSchemaSection): {\n const { schemaId, id } = action.payload;\n const schema = draft.workingCopy[schemaId];\n if (schema.sections[id].fields.length === 0) {\n delete schema.sections[id];\n schema.orderedSections = schema.orderedSections.filter(\n sectionId => sectionId !== id\n );\n }\n break;\n }\n\n case getType(actions.moveSchemaSection): {\n const sections =\n draft.workingCopy[action.payload.schemaId].orderedSections;\n sections.splice(action.payload.originalIndex, 1);\n sections.splice(\n action.payload.destinationIndex,\n 0,\n action.payload.sectionId\n );\n break;\n }\n\n case getType(actions.addSchemaSection): {\n const { schemaId, index } = action.payload;\n const schema = draft.workingCopy[schemaId];\n const newSection: SchemaSection = {\n id: uuid(),\n name: \"\",\n fields: []\n };\n schema.sections[newSection.id] = newSection;\n schema.orderedSections.splice(index, 0, newSection.id);\n break;\n }\n }\n });\n};\n\nfunction reorderFields(schema: Schema) {\n // remove fields from all sections\n Object.values(schema.sections).forEach(section => {\n estimateLookupFields.forEach(fieldId => {\n const fieldIndex = section.fields.indexOf(fieldId);\n if (fieldIndex > -1) {\n section.fields.splice(fieldIndex, 1);\n }\n });\n\n bidResultsLookupFields.forEach(fieldId => {\n const fieldIndex = section.fields.indexOf(fieldId);\n if (fieldIndex > -1) {\n section.fields.splice(fieldIndex, 1);\n }\n });\n\n hJJobLookUpFields.forEach(fieldId => {\n const fieldIndex = section.fields.indexOf(fieldId);\n if (fieldIndex > -1) {\n section.fields.splice(fieldIndex, 1);\n }\n });\n //remove lastModifiedBy\n const fieldIndex = section.fields.indexOf(lastModifiedByFieldId);\n if (fieldIndex > -1) section.fields.splice(fieldIndex, 1);\n });\n\n // add estimate fields back in\n const estimateLocation = findField(schema, \"estimates\");\n if (estimateLocation) {\n const section = schema.sections[estimateLocation.sectionId];\n estimateLookupFields.forEach((fieldId, index) => {\n section.fields.splice(\n estimateLocation.fieldIndex + index + 1,\n 0,\n fieldId\n );\n });\n }\n\n // add bid results fields back in\n const bidResultsLocation = findField(schema, \"bidResults\");\n if (bidResultsLocation) {\n const section = schema.sections[bidResultsLocation.sectionId];\n bidResultsLookupFields.forEach((fieldId, index) => {\n section.fields.splice(\n bidResultsLocation.fieldIndex + index + 1,\n 0,\n fieldId\n );\n });\n }\n // add HeavyJob Job fields back in\n const hJJobFieldLocation = findField(schema, \"hJJob\");\n if (hJJobFieldLocation) {\n const section = schema.sections[hJJobFieldLocation.sectionId];\n hJJobLookUpFields.forEach((fieldId, index) => {\n section.fields.splice(\n hJJobFieldLocation.fieldIndex + index + 1,\n 0,\n fieldId\n );\n });\n }\n //add lastModifiedBy field back in\n const lastModifiedLocation = findField(schema, \"lastModified\");\n if (lastModifiedLocation) {\n const section = schema.sections[lastModifiedLocation.sectionId];\n section.fields.splice(\n lastModifiedLocation.fieldIndex + 1,\n 0,\n lastModifiedByFieldId\n );\n }\n\n return schema;\n}\n\nfunction findField(schema: Schema, fieldId: string) {\n const sections = Object.values(schema.sections);\n const section = sections.find(section =>\n section.fields.find(field => field === fieldId)\n );\n\n if (!section) {\n return undefined;\n }\n\n return {\n sectionId: section.id,\n fieldIndex: section.fields.findIndex(field => field === fieldId)\n };\n}\n","import {\n browserSessionPersistence,\n getAuth,\n setPersistence,\n signInWithCustomToken,\n UserCredential\n} from \"firebase/auth\";\nimport { GuestUserPayload, UserPayload } from \"../state\";\nimport { call } from \"redux-saga/effects\";\nimport axios, { AxiosResponse } from \"axios\";\nimport { UserDto, BusinessUnit } from \"api/GeneratedClients/precon\";\n\nimport {\n CurrentUser,\n GuestUserClaims,\n AuthenticationMethod,\n UserClaims,\n UserType,\n isSandboxEnabled\n} from \"core\";\nimport { getSelectedBusinessUnitIdSaga } from \"../../../api/api-saga-factory\";\nimport { PagedResults } from \"../../../api/RestApi\";\nimport { SANDBOX_CONSTANTS } from \"mirage/db/constants\";\n\nexport function createGuestUser(claims: GuestUserClaims) {\n const user: CurrentUser = {\n hcssUserId: \"\",\n companyId: \"\",\n companyName: \"\",\n homeBusinessUnitId: \"\",\n homeBusinessUnitName: \"\",\n selectedBusinessUnitId: \"\",\n selectedBusinessUnitName: \"\",\n firstName: \"\",\n lastName: \"\",\n email: claims.email,\n type: UserType.Guest,\n //is this correct?\n accessibleBusinessUnits: [],\n isCredentialAdmin: false,\n userName: \"\"\n };\n\n return user;\n}\n\nexport function createGuestUserPayload(\n user: CurrentUser,\n firUser: any,\n claims: GuestUserClaims\n) {\n const payload: GuestUserPayload = {\n user,\n firUser,\n claims,\n authorization: {\n canAccessHeavyBidInsights: false,\n canAccessQuoteManagement: true,\n canAccessHcssConnect: false,\n canAccessLimitedPrecon: false,\n canAccessFullReadonlyPrecon: false,\n canAccessFullPrecon: false\n },\n type: AuthenticationMethod.OneClickLink\n };\n\n return payload;\n}\n\nconst selectedBusinessUnit = (\n homeBusinessUnit: BusinessUnit,\n accessibleBusinessUnits: BusinessUnit[],\n userId: string\n) => {\n const lsKey = `user.business.unit-${userId}`;\n const lsBusinessUnit = JSON.parse(localStorage.getItem(lsKey) || \"{}\");\n\n const selectedBU =\n accessibleBusinessUnits.find(bu => bu.id === lsBusinessUnit.id) ??\n homeBusinessUnit;\n\n if (selectedBU.id === homeBusinessUnit.id)\n localStorage.setItem(\n lsKey,\n JSON.stringify({ id: selectedBU.id, code: selectedBU.code })\n );\n\n return {\n selectedBusinessUnitId: selectedBU.id ?? \"\",\n selectedBusinessUnitName: selectedBU.code ?? \"\"\n };\n};\n\nexport function createHcssUser(\n accessToken: string,\n claims: UserClaims,\n businessUnit: BusinessUnit,\n accessibleBusinessUnits: BusinessUnit[],\n userName: string\n) {\n const type = claims.isSubcontractorUser\n ? UserType.Subcontractor\n : UserType.HcssSubscription;\n\n const {\n selectedBusinessUnitId,\n selectedBusinessUnitName\n } = selectedBusinessUnit(\n businessUnit,\n accessibleBusinessUnits,\n claims.hcssUserId\n );\n\n const homeBu =\n accessibleBusinessUnits.find(bu => bu.code === claims.businessUnitName) ??\n businessUnit;\n\n const user: CurrentUser = {\n idsrvAccessToken: accessToken,\n hcssUserId: claims.hcssUserId,\n companyId: claims.companyId,\n companyName: claims.companyName,\n homeBusinessUnitId: homeBu.id!,\n homeBusinessUnitName: homeBu.code,\n selectedBusinessUnitId,\n selectedBusinessUnitName,\n firstName: claims.firstName,\n lastName: claims.lastName,\n email: claims.email,\n type,\n accessibleBusinessUnits,\n isCredentialAdmin: claims.isCredentialAdmin,\n userName: userName\n };\n\n return isSandboxEnabled()\n ? createSandboxUser(\n accessToken,\n claims,\n businessUnit,\n accessibleBusinessUnits\n )\n : user;\n}\n\nfunction createSandboxUser(\n accessToken: string,\n claims: UserClaims,\n businessUnit: BusinessUnit,\n accessibleBusinessUnits: BusinessUnit[]\n) {\n const homeBu =\n accessibleBusinessUnits.find(bu => bu.code === claims.businessUnitName) ??\n businessUnit;\n\n const user: CurrentUser = {\n idsrvAccessToken: accessToken,\n hcssUserId: SANDBOX_CONSTANTS.USER_ID,\n companyId: SANDBOX_CONSTANTS.COMPANY_ID,\n companyName: SANDBOX_CONSTANTS.COMPANY_NAME,\n homeBusinessUnitId: homeBu.id ?? \"\",\n homeBusinessUnitName: homeBu.code,\n selectedBusinessUnitId: SANDBOX_CONSTANTS.BUSINESS_UNIT_ID,\n selectedBusinessUnitName: SANDBOX_CONSTANTS.BUSINESS_UNIT_NAME,\n firstName: SANDBOX_CONSTANTS.USER_FIRST_NAME,\n lastName: SANDBOX_CONSTANTS.USER_LAST_NAME,\n email: claims.email,\n type: UserType.HcssSubscription,\n accessibleBusinessUnits,\n isCredentialAdmin: true,\n userName: SANDBOX_CONSTANTS.USER_NAME\n };\n return user;\n}\n\nexport function createHcssUserPayload(\n user: CurrentUser,\n firUser: any,\n userInfo: UserDto,\n claims: UserClaims\n) {\n const { isFullUser, isLimitedUser, isBetaUser, isSubcontractorUser } = claims;\n\n const canAccessHeavyBidInsights = isFullUser || isLimitedUser || isBetaUser;\n const canAccessQuoteManagement = isBetaUser || isSubcontractorUser;\n const canAccessHcssConnect = isFullUser;\n\n const canAccessLimitedPrecon =\n isFullUser || (isLimitedUser && !userInfo.companyHasFullPreconLicenses);\n const canAccessFullReadonlyPrecon = isFullUser || isLimitedUser;\n const canAccessFullPrecon = isFullUser;\n\n const payload: UserPayload = {\n firUser,\n user,\n type: AuthenticationMethod.HcssCredentials,\n authorization: {\n canAccessHeavyBidInsights,\n canAccessQuoteManagement,\n canAccessHcssConnect,\n canAccessLimitedPrecon: canAccessLimitedPrecon,\n canAccessFullReadonlyPrecon: canAccessFullReadonlyPrecon,\n canAccessFullPrecon: canAccessFullPrecon\n },\n preferences: userInfo.preferences,\n permissions: userInfo.permissions\n };\n\n return isSandboxEnabled()\n ? createSandboxPayload(user, firUser, userInfo)\n : payload;\n}\n\nfunction createSandboxPayload(\n user: CurrentUser,\n firUser: any,\n userInfo: UserDto\n) {\n const payload: UserPayload = {\n firUser,\n user,\n type: AuthenticationMethod.HcssCredentials,\n authorization: {\n canAccessHeavyBidInsights: true,\n canAccessQuoteManagement: false,\n canAccessHcssConnect: false,\n canAccessLimitedPrecon: true,\n canAccessFullReadonlyPrecon: true,\n canAccessFullPrecon: true\n },\n preferences: userInfo.preferences,\n permissions: {\n admin: true,\n estimateInsights: true,\n heavyBidNumbers: true,\n write: true,\n contactWrite: true\n }\n };\n\n return payload;\n}\n\nexport function* signinWithFirebase(token: string, getClaims: boolean) {\n const auth = getAuth();\n void setPersistence(auth, browserSessionPersistence);\n\n const creds: UserCredential = yield call(signInWithCustomToken, auth, token);\n\n const firUser = creds.user;\n\n if (!firUser) {\n throw new Error(\"Invalid Credentials: Unable to signin\");\n }\n\n let claims: GuestUserClaims | undefined = undefined;\n\n if (getClaims) {\n const decoded = yield call([firUser, firUser.getIdTokenResult]);\n claims = {\n email: decoded.claims.email,\n resourceId: decoded.claims.resourceId\n };\n }\n\n return { firUser, claims };\n}\n\nexport function* getBusinessUnits(accessToken: string) {\n const response: AxiosResponse> = yield call(\n [axios, axios.get],\n \"/api/v1/businessUnits\",\n { headers: { Authorization: `Bearer ${accessToken}` } }\n );\n return response.data.results;\n}\n\nexport function* getUserInfo(\n accessToken: string,\n userId: string,\n homeBusinessUnitCode: string\n) {\n let selectedBusinessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n if (!selectedBusinessUnitId || selectedBusinessUnitId.length === 0) {\n const lsBusinessUnit = JSON.parse(\n localStorage.getItem(`user.business.unit-${userId}`) || \"{}\"\n );\n if (lsBusinessUnit && lsBusinessUnit.id)\n selectedBusinessUnitId = lsBusinessUnit.id;\n }\n\n if (!selectedBusinessUnitId || selectedBusinessUnitId.length === 0) {\n const businessUnits = yield call(getBusinessUnits, accessToken);\n const selectedBusinessUnit = (businessUnits as BusinessUnit[]).find(\n bu => bu.code === homeBusinessUnitCode\n );\n if (selectedBusinessUnit) {\n selectedBusinessUnitId = selectedBusinessUnit.id;\n }\n }\n\n const userResponse: AxiosResponse = yield call(\n [axios, axios.get],\n `/api/v1/businessUnits/${selectedBusinessUnitId}/user`,\n { headers: { Authorization: `Bearer ${accessToken}` } }\n );\n if (!userResponse.data) {\n throw new Error(\"Invalid user info response: Unable to Login\");\n }\n\n return userResponse.data;\n}\n","import { getAuth } from \"firebase/auth\";\nimport { ActionType } from \"typesafe-actions\";\nimport { AxiosResponse } from \"axios\";\nimport { actions } from \"../state\";\nimport { call, put } from \"redux-saga/effects\";\nimport { languages, regions, switchLanguage, switchRegion } from \"localization\";\nimport { getUserClaimsFromProfile } from \"core\";\nimport { isSandboxEnabled } from \"core/util/sandbox\";\nimport { accountService } from \"../services/account-service\";\nimport {\n CredentialsUserDetailsDto,\n UserDto\n} from \"api/GeneratedClients/precon\";\nimport { actions as schemaActions } from \"modules/schemas\";\nimport { oidcService } from \"../services/oidc-service\";\n\nimport {\n createGuestUser,\n createGuestUserPayload,\n signinWithFirebase,\n getUserInfo,\n createHcssUser,\n createHcssUserPayload\n} from \"./helpers\";\n\nexport function* signInWithEmailLink(\n action: ActionType\n) {\n try {\n if (action.payload.mode) {\n const checkExistingResponse: AxiosResponse = yield call(\n [accountService, accountService.checkExistingUser],\n action.payload.id,\n action.payload.email,\n action.payload.token\n );\n // If they have an existing subcontractor account, direct them to login.\n // If they have an existing GC account, make sure they have access to the site before directing them to login,\n // if they're a GC user without access to the site, send them to the guest portal so they don't see access denied.\n if (\n checkExistingResponse.data.userId &&\n (checkExistingResponse.data.isSubcontractor ||\n checkExistingResponse.data.hasQuotesApplication ||\n checkExistingResponse.data.hasPreConApplication ||\n checkExistingResponse.data.hasInsightsApplication)\n ) {\n if (action.payload.mode === \"proposal\") {\n yield call(\n [oidcService, oidcService.signinRedirect],\n `/quotes/proposals/${action.payload.id}/review`\n );\n } else {\n yield call(\n [oidcService, oidcService.signinRedirect],\n `/quotes/solicitations/${action.payload.id}/requests`\n );\n }\n }\n }\n\n const response: AxiosResponse = yield call(\n [accountService, accountService.confirmInvitation],\n action.payload.id,\n action.payload.email,\n action.payload.token\n );\n\n const { firUser, claims } = yield call(\n signinWithFirebase,\n response.data,\n true\n );\n\n const user = createGuestUser(claims);\n const payload = createGuestUserPayload(user, firUser, claims);\n switchRegion(\"en-us\");\n switchLanguage(\"en\");\n yield put(actions.signInWithEmailLink.success(payload));\n\n if (action.payload.fingerPrint) {\n try {\n yield call(\n [accountService, accountService.logEulaAcceptance],\n action.payload.fingerPrint,\n action.payload.email\n );\n } catch (logError) {\n console.error(logError);\n }\n }\n } catch (error) {\n console.error(error);\n yield put(actions.signInWithEmailLink.failure(error));\n }\n}\n\nexport function* signInWithHcss(\n action: ActionType\n) {\n const claims = getUserClaimsFromProfile(action.payload.profile);\n const accessToken = action.payload.access_token;\n const homeBu = claims.businessUnitName;\n\n try {\n const userInfo: UserDto = yield call(\n getUserInfo,\n accessToken,\n claims.hcssUserId,\n homeBu\n );\n const region = userInfo.preferences.region || \"en-us\";\n const language = userInfo.preferences.language || \"en\";\n\n switchRegion(region as keyof typeof regions);\n switchLanguage(language as keyof typeof languages);\n\n if (region !== \"en-us\") {\n yield put(schemaActions.reloadStandardSchemas());\n }\n\n const firUser = undefined;\n if (!isSandboxEnabled()) {\n const { firUser } = yield call(\n signinWithFirebase,\n userInfo.firebaseToken,\n false\n );\n }\n\n const user = createHcssUser(\n accessToken,\n claims,\n userInfo.businessUnit,\n userInfo.accessibleBusinessUnits,\n userInfo.userName\n );\n const payload = createHcssUserPayload(user, firUser, userInfo, claims);\n yield put(actions.signInWithHcssCredentials.success(payload));\n } catch (error) {\n console.error(error);\n yield put(actions.signInWithHcssCredentials.failure(error));\n }\n}\n\nexport function* signOut() {\n const auth = getAuth();\n yield call([auth, auth.signOut]);\n}\n","import { onAuthStateChanged } from \"firebase/auth\";\nimport { User as FirebaseUser } from \"firebase/auth\";\nimport { auth } from \"firebase-app\";\nimport { getType, ActionType } from \"typesafe-actions\";\nimport { eventChannel } from \"redux-saga\";\nimport { oidcService } from \"../services/oidc-service\";\nimport { actions, StateSlice } from \"../state\";\nimport { call, put, takeEvery, take, fork, select } from \"redux-saga/effects\";\nimport { UserDto } from \"api/GeneratedClients/precon\";\nimport { User } from \"oidc-client\";\n\nimport {\n GuestUserClaims,\n AuthenticationMethod,\n getUserClaimsFromProfile\n} from \"core\";\n\nimport {\n createHcssUser,\n getUserInfo,\n createHcssUserPayload,\n createGuestUser,\n createGuestUserPayload\n} from \"./helpers\";\n\nimport { isSandboxEnabled } from \"core/util/sandbox\";\n\nexport function* updateOidcUserState({\n payload: oidcUser\n}: ActionType) {\n const firUser: FirebaseUser | undefined = yield select(\n ({ account }: StateSlice) => account.firUser\n );\n\n yield call(publishHcssUser, oidcUser, firUser);\n}\n\nexport function* startAuthListener() {\n const channel = yield call(createAuthListener);\n yield fork(cancelAuthListener, channel);\n\n try {\n yield takeEvery(channel, handleFirebaseAuthState);\n } catch (error) {\n console.error(error);\n yield put(actions.unsubscribeFromAuthState());\n }\n}\n\nexport function* cancelAuthListener(channel: any) {\n yield take(getType(actions.unsubscribeFromAuthState));\n channel.close();\n}\n\nfunction createAuthListener() {\n return eventChannel(emitter => {\n const unsubscribe = onAuthStateChanged(auth, user => {\n emitter({ user });\n });\n\n return () => {\n unsubscribe();\n };\n });\n}\n\nfunction* handleFirebaseAuthState({ user: firUser }: { user?: FirebaseUser }) {\n const method: AuthenticationMethod = yield select(\n ({ account }: StateSlice) => account.authenticationMethod\n );\n\n if (method === AuthenticationMethod.OneClickLink) {\n yield call(updateGuestUserState, firUser);\n } else if (method === AuthenticationMethod.HcssCredentials) {\n const oidcUser: User | null = yield call([\n oidcService,\n oidcService.getUser\n ]);\n\n if (oidcUser) yield call(publishHcssUser, oidcUser, firUser);\n else yield put(actions.updateUserAuthState(undefined));\n }\n}\n\nfunction* updateGuestUserState(firUser?: FirebaseUser) {\n if (!firUser) {\n yield put(actions.updateGuestAuthState(undefined));\n return;\n }\n\n const decoded = yield call([firUser, firUser.getIdTokenResult]);\n if (!decoded) {\n yield put(actions.updateGuestAuthState(undefined));\n return;\n }\n\n const claims = decoded.claims as GuestUserClaims;\n const user = createGuestUser(claims);\n const payload = createGuestUserPayload(user, firUser, claims);\n yield put(actions.updateGuestAuthState(payload));\n}\n\nfunction* publishHcssUser(oidcUser: User, firUser?: FirebaseUser) {\n if (!firUser && !isSandboxEnabled()) {\n yield put(actions.updateUserAuthState(undefined));\n return;\n }\n\n const claims = getUserClaimsFromProfile(oidcUser.profile);\n const userInfo: UserDto = yield call(\n getUserInfo,\n oidcUser.access_token,\n claims.hcssUserId,\n claims.businessUnitName\n );\n\n const user = createHcssUser(\n oidcUser.access_token,\n claims,\n userInfo.businessUnit,\n userInfo.accessibleBusinessUnits,\n userInfo.userName\n );\n\n const payload = createHcssUserPayload(user, firUser, userInfo, claims);\n yield put(actions.updateUserAuthState(payload));\n}\n","import { getType } from \"typesafe-actions\";\nimport { takeEvery, takeLatest } from \"redux-saga/effects\";\nimport { actions } from \"../state\";\nimport { signOut, signInWithHcss, signInWithEmailLink } from \"./auth-signin\";\nimport { startAuthListener, updateOidcUserState } from \"./auth-listeners\";\nimport { getUser } from \"./auth-user\";\nimport { declineInivitation } from \"./auth-decline\";\n\nexport const sagas = [\n takeLatest(getType(actions.signOut), signOut),\n takeLatest(getType(actions.subscribeToAuthState), startAuthListener),\n takeLatest(getType(actions.getUser.request), getUser),\n takeLatest(getType(actions.updateOidcUser), updateOidcUserState),\n takeEvery(getType(actions.declineInvitation.request), declineInivitation),\n takeEvery(getType(actions.signInWithHcssCredentials.request), signInWithHcss),\n takeEvery(getType(actions.signInWithEmailLink.request), signInWithEmailLink)\n];\n","import { ActionType } from \"typesafe-actions\";\nimport { oidcService } from \"../services/oidc-service\";\nimport { User } from \"oidc-client\";\nimport { actions } from \"../state\";\nimport { call, put } from \"redux-saga/effects\";\nimport { signInWithHcss } from \"./auth-signin\";\n\nexport function* getUser(action: ActionType) {\n try {\n const oidcUser: User = yield call([oidcService, oidcService.getUser]);\n\n if (oidcUser && !oidcUser.expired) {\n yield call(\n signInWithHcss,\n actions.signInWithHcssCredentials.request(oidcUser)\n );\n } else {\n const redirect = action.payload;\n yield call([oidcService, oidcService.signinRedirect], redirect);\n }\n\n yield put(actions.getUser.success());\n } catch (error) {\n console.error(error);\n yield put(actions.getUser.failure(error));\n }\n}\n","import { ActionType } from \"typesafe-actions\";\nimport { call, put } from \"redux-saga/effects\";\nimport { actions } from \"../state\";\nimport { accountService } from \"../services/account-service\";\n\nexport function* declineInivitation(\n action: ActionType\n) {\n try {\n yield call(\n [accountService, accountService.declineInvitation],\n action.payload.id,\n action.payload.token\n );\n\n yield put(actions.declineInvitation.success());\n } catch (error) {\n console.error(error);\n yield put(actions.declineInvitation.failure(error));\n }\n}\n","import { call, put, select, takeEvery } from \"redux-saga/effects\";\nimport { getType, ActionType } from \"typesafe-actions\";\nimport * as notify from \"../../../core/components/notify\";\nimport { actions, StateSlice } from \"../state\";\nimport { strings } from \"localization\";\nimport { apiSagaFactory } from \"api/api-saga-factory\";\nimport { UserConfigDto as UserPreferences } from \"api/GeneratedClients/precon\";\n\nconst genericSagas = apiSagaFactory({\n apiPath: \"/user\",\n isBusinessUnitApi: true\n});\n\nfunction* updatePreferences(\n action: ActionType\n) {\n const preferences: UserPreferences = yield select(\n ({ account }: StateSlice) => account.preferences\n );\n if (preferences) {\n try {\n const api = yield call(genericSagas.getApi);\n const data = yield call([api, api.update], action.payload);\n yield put(actions.updatePreferences.success(data.data));\n notify.save(strings.users.messages.saved.success);\n } catch (error) {\n console.error(error);\n yield put(actions.updatePreferences.failure(error));\n notify.error(strings.users.messages.saved.error);\n }\n }\n}\n\nfunction* setTutorialCompleted(\n action: ActionType\n) {\n const preferences = yield select(\n ({ account }: StateSlice) => account.preferences\n );\n if (preferences) {\n try {\n const api = yield call(genericSagas.getApi);\n yield call([api, api.update], {\n ...preferences,\n tutorials: {\n ...preferences.tutorials,\n [action.payload.tutorialId]: true\n }\n });\n } catch (error) {\n console.error(error);\n }\n }\n}\n\nexport const sagas = [\n takeEvery(getType(actions.updatePreferences.request), updatePreferences),\n takeEvery(getType(actions.setTutorialCompleted), setTutorialCompleted)\n];\n","import { call, put, takeEvery } from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport * as notify from \"../../../core/components/notify\";\nimport { actions } from \"../state\";\nimport { strings } from \"localization\";\nimport {\n apiSagaFactory,\n getSelectedBusinessUnitIdSaga\n} from \"api/api-saga-factory\";\nimport { AxiosResponse } from \"axios\";\nimport {\n CredentialsUserDto,\n IdentityClientsDto\n} from \"api/GeneratedClients/precon\";\n\nconst genericSagas = apiSagaFactory({\n apiPath: \"/v1/businessUnits\"\n});\n\nfunction* getCompanyUsers(\n action: ActionType\n) {\n try {\n const api = yield call(genericSagas.getApi);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const data: AxiosResponse = yield call(\n [api, api.get],\n `${businessUnitId}/company/users`\n );\n const successPayload = {\n id: action.payload.user.companyId,\n users: data.data\n };\n yield put(actions.getCompanyUsers.success(successPayload));\n } catch (error) {\n console.error(error);\n yield put(actions.getCompanyUsers.failure(error));\n notify.error(strings.users.messages.saved.error);\n }\n}\n\nfunction* requestClientsAfterSignIn(\n action: ActionType\n) {\n yield put(actions.getCompanyClients.request());\n}\n\nfunction* getCompanyClients() {\n try {\n const api = yield* genericSagas.getApi();\n const businessUnitId = yield* getSelectedBusinessUnitIdSaga();\n\n const data: AxiosResponse = yield call(\n [api, api.get],\n `${businessUnitId}/company/clients`\n );\n const successPayload = {\n clients: data.data\n };\n\n yield put(actions.getCompanyClients.success(successPayload));\n } catch (error) {\n console.error(error);\n yield put(actions.getCompanyClients.failure(error as Error));\n notify.error(strings.users.messages.saved.error);\n }\n}\n\nfunction* getBusinessUnitUsers(\n action: ActionType\n) {\n try {\n const api = yield call(genericSagas.getApi);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const data: AxiosResponse = yield call(\n [api, api.get],\n `${businessUnitId}/company/users/businessUnit`\n );\n const successPayload = {\n id: businessUnitId,\n users: data.data\n };\n yield put(actions.getBusinessUnitUsers.success(successPayload));\n } catch (error) {\n console.error(error);\n yield put(actions.getBusinessUnitUsers.failure(error));\n notify.error(strings.users.messages.saved.error);\n }\n}\n\nexport const sagas = [\n takeEvery(\n getType(actions.signInWithHcssCredentials.success),\n getCompanyUsers\n ),\n takeEvery(\n getType(actions.signInWithHcssCredentials.success),\n requestClientsAfterSignIn\n ),\n takeEvery(getType(actions.getCompanyClients.request), getCompanyClients),\n takeEvery(getType(actions.getCompanyUsers.success), getBusinessUnitUsers)\n];\n","import { sagas as authSagas } from \"./sagas/auth\";\nimport { sagas as userSagas } from \"./sagas/user\";\nimport { sagas as companySagas } from \"./sagas/company\";\n\nexport * from \"./state\";\nexport * from \"./hooks\";\n\nexport const sagas = [...authSagas, ...userSagas, ...companySagas];\n","import axios, { AxiosInstance } from \"axios\";\nimport { envService } from \"./env-service\";\nimport { BrowserFingerPrint } from \"../components/confirm/confirm-panel\";\nimport { SharedResourceType } from \"core\";\n\nclass AccountService {\n instance: AxiosInstance;\n baseUrl: string;\n\n constructor(baseUrl: string) {\n this.instance = axios.create();\n this.baseUrl = baseUrl;\n }\n\n confirmInvitation(id: string, email: string, token: string) {\n return this.instance.post(\n `${this.baseUrl}/api/account/confirm/${id}`,\n {\n email,\n token\n }\n );\n }\n\n declineInvitation(id: string, token: string) {\n return this.instance.post(\n `${this.baseUrl}/api/account/decline/${id}`,\n {\n token\n }\n );\n }\n\n logEulaAcceptance(fingerPrint: BrowserFingerPrint, email: string) {\n return axios.post(`${this.baseUrl}/api/account/eula`, {\n email,\n fingerPrint\n });\n }\n\n startEmailVerification(email: string, accessToken: string) {\n const data = { email };\n const config = { headers: { Authorization: `bearer ${accessToken}` } };\n\n return axios.post(\n `${this.baseUrl}/api/account/verification/start`,\n data,\n config\n );\n }\n\n completeEmailVerification(token: string) {\n return axios.post(\n `${this.baseUrl}/api/account/verification/complete`,\n { token }\n );\n }\n\n getEmailVerificationStatus(accessToken: string) {\n const config = { headers: { Authorization: `bearer ${accessToken}` } };\n return axios.get(\n `${this.baseUrl}/api/account/verification/status`,\n config\n );\n }\n\n canAccessResource(\n resourceId: string,\n resourceType: SharedResourceType,\n accessToken: string\n ) {\n const config = { headers: { Authorization: `bearer ${accessToken}` } };\n return axios.get(\n `${this.baseUrl}/api/account/access/resource/${resourceId}?type=${resourceType}`,\n config\n );\n }\n\n checkExistingUser(id: string, email: string, token: string) {\n return this.instance.post(\n `${this.baseUrl}/api/account/checkExisting/${id}`,\n {\n email,\n token\n }\n );\n }\n}\n\nexport const accountService = new AccountService(envService.baseUrl);\n","import { useLocalStorage } from \"hcss-hooks\";\nimport { filterConstants } from \"modules/schemas/components/filters/common\";\nimport moment from \"moment\";\nimport { calculateValuesFromRange } from \"modules/schemas/components/filters/dateTimeUtils\";\nimport { useSelectedBusinessUnitId } from \"modules/account\";\n\nexport interface CodebooksDateRange {\n range: string;\n from: string | undefined;\n to: string | undefined;\n}\n\nconst defaultCodebooksDateRange: CodebooksDateRange = {\n range: filterConstants.dates.nowM6month,\n from: undefined,\n to: undefined\n};\n\nexport const useCodebooksDateRange = () => {\n const businessUnitId = useSelectedBusinessUnitId();\n const [dateRange, setDateRange] = useLocalStorage(\n `${businessUnitId}-codebooks-date-range`,\n defaultCodebooksDateRange\n );\n\n return { dateRange, setDateRange };\n};\n\nexport const GetDateValues = (settings?: CodebooksDateRange) => {\n if (!settings) settings = defaultCodebooksDateRange;\n const values = {\n range: settings.range ? settings.range : undefined,\n from: settings.from ? moment(settings.from).toDate() : undefined,\n to: settings.to ? moment(settings.to).toDate() : undefined\n };\n\n const calcValuesFromRange = settings.range !== filterConstants.dates.custom;\n\n if (calcValuesFromRange && settings.range) {\n const calculatedValues = calculateValuesFromRange(settings.range);\n values.from = calculatedValues?.from.startOf(\"day\").toDate();\n values.to = calculatedValues?.to.endOf(\"day\").toDate();\n }\n\n return values;\n};\n","import { createBrowserHistory } from \"history\";\nimport { track } from \"./usage-tracking\";\nimport { isNullOrWhitespace } from \"core\";\nimport { isLocal } from \"config\";\nexport const history = createBrowserHistory();\n\nconst guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\nconst firRegex = /^[0-9A-Za-z]{20}$/i;\n// Listen for changes to the current location.\nhistory.listen(location => {\n try {\n if (!isLocal) {\n // replace ids with placeholder\n const normalizedPath = normalizePath(location.pathname);\n track(`PAGE CHANGE - ${normalizedPath.toUpperCase()}`, {\n redux: false,\n router: true\n });\n }\n } catch (error) {\n console.error(error);\n }\n});\n\nfunction normalizePath(pathname: string) {\n const segments = pathname.split(\"/\");\n return segments.reduce((prev, segment) => {\n if (isNullOrWhitespace(segment)) {\n return prev;\n }\n\n if (guidRegex.test(segment) || firRegex.test(segment)) {\n return `${prev}/:id`;\n }\n\n return `${prev}/${segment}`;\n }, \"\");\n}\n","import {\n ApplicationInsights,\n IExceptionTelemetry,\n SeverityLevel\n} from \"@microsoft/applicationinsights-web\";\nimport { ReactPlugin } from \"@microsoft/applicationinsights-react-js\";\nimport config, { isLocal } from \"config\";\nimport { ErrorInfo } from \"react\";\nimport { history } from \"./history\";\n\nlet appInsights: ApplicationInsights;\nconst reactPlugin = new ReactPlugin();\nconst initializeAppInsights = () => {\n appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: `${config.keys.APPINSIGHTS}`,\n disableAjaxTracking: isLocal,\n disableExceptionTracking: isLocal, // disable for local dev\n enableAutoRouteTracking: false,\n extensions: [reactPlugin],\n extensionConfig: {\n [reactPlugin.identifier]: { history: history }\n }\n }\n });\n\n appInsights.loadAppInsights();\n\n return appInsights;\n};\n\nconst formatErrorText = (error: string, stack: string) => {\n return `Unexpected error: ${error} \\n Occured at: ${stack}`;\n};\n\nconst trackReactError = (error: Error, errorInfo: ErrorInfo) => {\n if (isLocal) {\n console.error(error);\n console.info(\n \"Errors are not reported to app insights during local development\"\n );\n return;\n }\n\n const exception: IExceptionTelemetry = {\n exception: new Error(\n formatErrorText(error.toString(), errorInfo.componentStack)\n ),\n severityLevel: SeverityLevel.Critical\n };\n\n appInsights.trackException(exception);\n};\n\nexport { appInsights, initializeAppInsights, trackReactError, reactPlugin };\n","import { track } from \"./usage-tracking\";\nimport { currentEnvironment, isLocal } from \"config\";\nimport { Middleware } from \"redux\";\nimport {\n AccountAuthorization,\n actions as accountActions,\n UserPayload\n} from \"modules/account\";\nimport { actions as projectActions } from \"modules/projects\";\nimport { actions as schemaActions } from \"modules/schemas\";\nimport { actions as calendarActions } from \"modules/calendars\";\nimport { actions as estimateActions } from \"modules/estimates\";\nimport { actions as viewActions } from \"modules/views\";\nimport { getType } from \"typesafe-actions\";\nimport { appInsights } from \"logging/app-insights\";\n\nexport const loggingMiddleware: Middleware = store => next => action => {\n try {\n if (!isLocal) {\n authIntercepter(action);\n gainsightAuthIntercepter(action);\n pendoAuthIntercepter(action);\n }\n } catch (error) {\n console.error(error);\n } finally {\n next(action);\n }\n};\n\ninterface UnknownAction {\n type?: string;\n\n payload?: unknown;\n}\n\nfunction actionLogger({ type }: UnknownAction) {\n if (type && actionFilter[type]) {\n track(type, { redux: true });\n }\n}\n\nconst actionFilter: Record = {\n [getType(projectActions.saveProject.success)]: true,\n [getType(projectActions.linkEstimatesToProject.success)]: true,\n [getType(schemaActions.saveSchema.success)]: true,\n [getType(calendarActions.saveCalendar.success)]: true,\n [getType(estimateActions.saveEstimate.success)]: true,\n // fix me - Circular Dependency here when running yarn test\n // [getType(profileActions.updateProfile.success)]: true,\n // [getType(profileActions.addLogo.success)]: true,\n // [getType(profileActions.addMinorityStatus.success)]: true,\n [getType(viewActions.saveView.success)]: true,\n [getType(viewActions.updateViewColoring)]: true,\n [getType(viewActions.updateCalendarConfig)]: true,\n [getType(viewActions.updateLayout)]: true,\n [getType(viewActions.updateViewFilters)]: true,\n [getType(viewActions.updateChartConfig)]: true,\n [getType(viewActions.updateViewOrdering)]: true,\n [getType(viewActions.updateViewGrouping)]: true,\n [getType(viewActions.updateViewType)]: true,\n [getType(viewActions.updateViewFilter)]: true,\n [getType(viewActions.updateViewSorting)]: true,\n [getType(viewActions.updateViewDisplayedColumns)]: true,\n [getType(viewActions.setSelectedView)]: true,\n [getType(viewActions.resetView)]: true,\n [getType(accountActions.updatePreferences.success)]: true,\n\n [getType(accountActions.declineInvitation.success)]: true\n};\n\nfunction authIntercepter(action: UnknownAction) {\n if (\n action.type === getType(accountActions.signInWithHcssCredentials.success)\n ) {\n const payload = action.payload as UserPayload;\n const { idsrvAccessToken, ...user } = payload.user;\n appInsights.setAuthenticatedUserContext(user.hcssUserId, user.companyId);\n }\n}\n\nfunction getProductTier(authorization: AccountAuthorization): string {\n if (authorization.canAccessFullPrecon) {\n return \"FullPrecon\";\n } else if (authorization.canAccessLimitedPrecon) {\n return \"LimitedPrecon\";\n } else if (authorization.canAccessFullReadonlyPrecon) {\n return \"FullReadonlyPrecon\";\n } else {\n return \"\";\n }\n}\n\nfunction gainsightAuthIntercepter(action: UnknownAction) {\n if (\n action.type === getType(accountActions.signInWithHcssCredentials.success)\n ) {\n const payload = action.payload as UserPayload;\n const { idsrvAccessToken, companyId, companyName, ...user } = payload.user;\n\n const productTier = getProductTier(payload.authorization);\n\n const aptrinsicUser = {\n ...user,\n id: user.hcssUserId,\n productTier: productTier\n };\n const aptrinsicCompany = {\n id: companyId,\n name: companyName\n };\n (window as any)?.aptrinsic(\"identify\", aptrinsicUser, aptrinsicCompany);\n }\n}\n\nconst pendoAuthIntercepter = (action: UnknownAction) => {\n if (\n action.type === getType(accountActions.signInWithHcssCredentials.success)\n ) {\n const payload = action.payload as UserPayload;\n const { companyId, companyName, ...user } = payload.user;\n\n const productTier = getProductTier(payload.authorization);\n const visitor = {\n idsrvAccessToken: user.idsrvAccessToken,\n id: user.hcssUserId,\n productTier: productTier,\n companyName: companyName,\n homeBusinessUnitId: user.homeBusinessUnitId,\n homeBusinessUnitName: user.homeBusinessUnitName,\n selectedBusinessUnitId: user.selectedBusinessUnitId,\n selectedBusinessUnitName: user.selectedBusinessUnitName,\n firstName: user.firstName,\n lastName: user.lastName,\n email: user.email,\n type: user.type,\n accessibleBusinessUnits: user.accessibleBusinessUnits.map(\n bu => bu.businessUnitId\n ),\n isCredentialAdmin: user.isCredentialAdmin,\n userName: user.userName,\n environment: currentEnvironment\n };\n\n const account = {\n id: companyId,\n name: companyName,\n planLevel: productTier,\n environment: currentEnvironment\n };\n\n (window as any)?.pendo.initialize({ visitor, account });\n }\n};\n","import { datadogRum } from \"@datadog/browser-rum\";\nimport config from \"../config\";\n\nexport const initializeDatadogRum = () => {\n const { rumEnabled, rumConfigOptions } = config.rum || {\n rumEnabled: false,\n rumConfigOptions: null\n };\n\n if (!rumEnabled || !rumConfigOptions) {\n console.info(\"Datadog RUM is disabled or not properly configured.\");\n return;\n }\n\n try {\n datadogRum.init(rumConfigOptions);\n console.info(\"Datadog RUM initialized successfully.\");\n } catch (error) {\n console.error(\"Failed to initialize Datadog RUM:\", error);\n }\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\n\nimport { Button, Icon } from \"hcss-components\";\nimport { Link } from \"react-router-dom\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport const NotFound = () => {\n return (\n \n
\n \n
\n
\n

{strings.notFound.title}

\n

{strings.notFound.message}

\n \n \n \n
\n
\n );\n};\n\nconst iconStyle = {\n \"--fa-primary-color\": \"#ee9e58\",\n \"--fa-secondary-color\": \"#7070708c\"\n} as React.CSSProperties;\n\nconst Container = styled.div`\n height: 100vh;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .icon {\n margin-right: 36px;\n }\n\n .content {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n .error {\n color: #5a5c69;\n font-size: 10rem;\n }\n\n .title {\n text-transform: uppercase;\n font-size: 2.5rem;\n letter-spacing: 1.2px;\n }\n\n .message {\n max-width: 450px;\n text-align: center;\n }\n`;\n","import * as projects from \"./projects\";\nimport * as views from \"./views\";\nimport * as schemas from \"./schemas\";\nimport * as configurationSettings from \"./configurationSettings\";\nimport * as account from \"./account\";\nimport { createSelector } from \"reselect\";\n\nexport const getErrorsState = createSelector(\n [\n account.selectors.getErrors,\n configurationSettings.selectors.getErrors,\n projects.selectors.getErrors,\n schemas.selectors.getErrors,\n views.selectors.getErrors\n ],\n (\n accountErrors: string[],\n configErrors: string[],\n projectsErrors: string[],\n schemasErrors: string[],\n viewsErrors: string[]\n ) => {\n return [\n ...accountErrors,\n ...configErrors,\n ...projectsErrors,\n ...schemasErrors,\n ...viewsErrors\n ];\n }\n);\n\nexport const getSiteBreakingErrors = createSelector(\n [getErrorsState],\n errors => {\n return errors.filter(e => !errorShouldBeIgnored(e));\n }\n);\n\nconst errorShouldBeIgnored = (error: string) => {\n return errorsToIgnore.some(code => error.includes(code));\n};\n\nconst errorsToIgnore = [\"400\", \"403\", \"404\"];\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\nimport { Button, Icon } from \"hcss-components\";\nimport { useSelector } from \"react-redux\";\nimport { getErrorsState } from \"modules/selectors\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\n\nexport interface GenericErrorProps {\n errors: string[];\n}\n\nexport const GenericError = () => {\n const errors: string[] = useSelector(getErrorsState);\n\n const onBtnClick = () => {\n window.location.href = \"/\";\n };\n\n return (\n \n
\n \n
\n
\n

{strings.genericError.title}

\n

{strings.genericError.message}

\n
\n {errors &&\n errors.length > 0 &&\n errors.map(e =>

{e}

)}\n \n
\n \n );\n};\n\nconst iconStyle = {\n \"--fa-primary-color\": \"#ee9e58\",\n \"--fa-secondary-color\": \"#7070708c\"\n} as React.CSSProperties;\n\nconst Container = styled.div`\n height: 100vh;\n display: flex;\n justify-content: center;\n align-items: center;\n\n .icon {\n margin-right: 36px;\n }\n\n .content {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n }\n\n .error {\n color: #5a5c69;\n font-size: 10rem;\n }\n\n .title {\n text-transform: uppercase;\n font-size: 2.5rem;\n letter-spacing: 1.2px;\n }\n\n .message {\n max-width: 450px;\n text-align: center;\n }\n`;\n","import React from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { EmptyState } from \"core/components/empty-state\";\nimport { strings } from \"localization\";\n\nexport const EstimatingGetStarted = () => {\n return (\n \n }\n />\n );\n};\n","import React from \"react\";\nimport { useLocation, Redirect } from \"react-router-dom\";\nimport { useQueryParam } from \"core\";\nimport { useHcssToken } from \"modules/account\";\nimport { useCompareEstimatesDirect } from \"api/GeneratedClients/insights\";\nimport { getPathForIndicators, getPathForEstimate, paths } from \"./paths\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\n\nexport const EstimateLookup = () => {\n const location = useLocation();\n const estimateCode = useQueryParam(\"estimateCode\", location.search);\n const partitionId = useQueryParam(\"partitionId\", location.search);\n const view = useQueryParam<\"kpi\">(\"view\", location.search);\n const token = useHcssToken();\n\n const { data, loading } = useCompareEstimatesDirect({\n queryParams: { estimateCode, partitionId },\n requestOptions: { headers: { Authorization: `BEARER ${token}` } }\n });\n\n if (loading) {\n return ;\n }\n\n if (data) {\n if (view === \"kpi\") {\n return ;\n }\n return ;\n }\n\n return ;\n};\n","import React, { lazy } from \"react\";\nimport FullPageLoading from \"../../layout/components/FullPageLoading\";\nimport { paths } from \"./paths\";\nimport { useSelector } from \"react-redux\";\nimport { StateSlice } from \"../state\";\nimport { Switch, Route, Redirect } from \"react-router-dom\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\nimport { EstimatingGetStarted } from \"../components/common/estimating-get-started\";\nimport { EstimateLookup } from \"./estimate-lookup\";\nimport { useFeatureFlags } from \"modules/configurationSettings/use-feature-flags\";\nimport { isSandboxEnabled } from \"core/util/sandbox\";\n\nconst EstimatesPage = lazy(() =>\n import(/* webpackChunkName: \"estimates-page\" */ \"../components/EstimatesPage\")\n);\n\nconst CodebooksPage = lazy(() =>\n import(/* webpackChunkName: \"codebooks-page\" */ \"../components/CodebooksPage\")\n);\n\nconst EstimateEdit = lazy(() =>\n import(/* webpackChunkName: \"estimate-edit\" */ \"../components/EstimateEdit\")\n);\n\nconst CustomizeReportingPage = lazy(() =>\n import(\n /* webpackChunkName: \"estimates-customize-reporting\" */ \"../components/customize-reporting/activity-totals/activity-totals-page\"\n )\n);\n\nconst EstimateDetails = lazy(() =>\n import(\n /* webpackChunkName: \"estimates-sub-module\" */ \"../components/EstimateDetailsSubModule\"\n )\n);\n\nconst EstimatesRouter = () => {\n const loaded = useSelector(({ estimates }: StateSlice) => estimates.loaded);\n const authorization = useAuthorization();\n const permissions = usePermissions();\n const { isFeatureEnabled: isCodebooksFeatureEnabled } = useFeatureFlags(\n \"Codebooks\"\n );\n const enableCustomizeReporting =\n authorization.canAccessFullPrecon && permissions.admin;\n\n if (!permissions.estimateInsights) {\n return ;\n } else {\n if (!authorization.canAccessHeavyBidInsights) {\n return ;\n }\n }\n\n if (!loaded) {\n return ;\n }\n\n return (\n }>\n \n \n \n {!isSandboxEnabled() && isCodebooksFeatureEnabled && (\n \n )}\n \n {enableCustomizeReporting && (\n \n )}\n \n \n \n \n );\n};\n\nexport const Views = () => (\n \n);\n","import React from \"react\";\nimport { Route, Switch, Redirect } from \"react-router-dom\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n actions as contactsActions,\n selectors as contactsSelectors\n} from \"modules/contacts\";\nimport { notify } from \"hcss-components\";\nimport { useContactBUContextError } from \"../hooks/useBUContextError\";\nimport { strings } from \"localization\";\nimport { Fab } from \"@mui/material\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport { ProtectedRoute } from \"../../account/components/protected-route\";\n\nconst VendorList = React.lazy(() =>\n import(\n /* webpackChunkName: \"contacts-vendor-list\" */ \"../components/vendor-list\"\n )\n);\n\nconst VendorDetails = React.lazy(() =>\n import(\n /* webpackChunkName: \"contacts-vendor-details\" */ \"../components/vendor-details\"\n )\n);\n\nconst VendorEditDetails = React.lazy(() =>\n import(\n /* webpackChunkName: \"contacts-vendor-edit-details\" */ \"../components/vendor-edit-details\"\n )\n);\n\nconst ImportContacts = React.lazy(() =>\n import(/* webpackChunkName: \"import-contacts\" */ \"../components/import/index\")\n);\n\nconst ContactsSetup = React.lazy(() =>\n import(/* webpackChunkName: \"contact-setup\" */ \"../components/contact-setup\")\n);\n\nconst paths = {\n base: \"/contacts\",\n detail: \"/contacts/:vendorId\",\n edit: \"/contacts/:vendorId/edit\",\n setup: \"/contacts/setup\",\n import: \"/contacts/import\"\n};\n\nexport const Views = () => {\n const dispatch = useDispatch();\n const showSearchModal = useSelector(contactsSelectors.getShowSearchModal);\n const existsInBUError = useContactBUContextError();\n\n if (existsInBUError) {\n notify(\"warning\", strings.contactManagement.notInBU);\n return ;\n }\n\n return (\n <>\n {\n dispatch(contactsActions.setShowSearchModal(!showSearchModal));\n }}\n >\n \n {strings.contactManagement.contactSearchButton.name}\n \n }>\n \n }\n />\n }\n />\n }\n />\n } />\n \n }\n />\n \n \n \n );\n};\n","import { useSelector } from \"react-redux\";\nimport { useRouteMatch } from \"react-router-dom\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\n\nexport function useContactBUContextError() {\n const vendorList = useSelector(contactsSelectors.getVendorList);\n const loading = useSelector(contactsSelectors.getLoading);\n const vendorDetailsMatch = useRouteMatch<{ vendorId: string }>({\n path: \"/contacts/:vendorId\"\n });\n\n if (\n vendorDetailsMatch?.params.vendorId === \"new\" ||\n vendorDetailsMatch?.params.vendorId === \"import\" ||\n vendorDetailsMatch?.params.vendorId === \"setup\"\n )\n return false;\n\n const idFromParams = vendorDetailsMatch\n ? vendorDetailsMatch.params.vendorId\n : undefined;\n\n const existsInBUError =\n !!idFromParams &&\n !loading &&\n !vendorList.find(vendor => vendor.id === idFromParams);\n\n return existsInBUError;\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nexport const TermsAndConditions = () => {\n return (\n
\n \n Estimating for Subcontractors\n \n \n  \n \n \n Terms and Conditions\n \n \n \n PLEASE READ THIS AGREEMENT CAREFULLY BEFORE USING THIS APPLICATION.\n \n \n \n \n BY USING THE APPLICATION OR CLICKING “AGREE” YOU ARE\n AGREEING TO BE BOUND BY THIS AGREEMENT. IF YOU ARE AGREEING TO THESE\n TERMS ON BEHALF OF OR FOR THE BENEFIT OF YOUR EMPLOYER OR A THIRD\n PARTY, THEN YOU REPRESENT AND WARRANT THAT YOU HAVE THE NECESSARY\n AUTHORITY TO AGREE TO THIS AGREEMENT ON THEIR BEHALF.\n \n \n \n \n This Agreement is for the Alpha offering. The Definitive Terms and\n Conditions will be available prior to General Release of the\n Application.\n {\" \"}\n This agreement is between Heavy Construction Systems Specialists, Inc. a\n Texas corporation (HCSS) and the customer entering into this agreement\n (Customer).\n \n \n PROPRIETARY RIGHTS. The Application is the proprietary\n property of HCSS and its licensors, and all right, title and interest in\n and to the Application, including all associated intellectual property\n rights, remain only with HCSS and its licensors. The Application is\n protected by copyright and other intellectual property laws. \n Customer may not remove any product identification, copyright, trademark\n or other notice from the Application. HCSS reserves all rights not\n expressly granted.\n \n \n \n WARRANTY AND DISCLAIMER. CUSTOMER WARRANTS THAT (I) IT COMPLIES WITH\n ALL APPLICABLE LAWS AND REGULATIONS WHILE USING THE APPLICATION\n INCLUDING WHILE OPERATING HEAVY EQUIPMENT, AND (II) IT USES ITS BEST\n JUDGMENT IN CHECKING AND ASSURING THE ACCURACY OF THE\n APPLICATION’S RESULTS, AND ASKS HCSS ABOUT, OR LETS HCSS KNOW OF\n ANY RESULT THAT APPEARS SUSPECT. THE APPLICATION IS PROVIDED ‘AS\n IS’ WITHOUT WARRANTY. HCSS DISCLAIMS ALL IMPLIED WARRANTIES,\n INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTY OF MERCHANTABILITY\n AND FITNESS FOR A PARTICULAR PURPOSE.  CUSTOMER UNDERSTANDS THAT\n THE APPLICATION MAY NOT BE ERROR FREE, AND USE MAY BE INTERRUPTED.\n HCSS DISCLAIMS RESPONSIBILITY FOR (I) CUSTOMER’S USE OF THE\n APPLICATION AND THE RESULTS OF THE  APPLICATION, AND (II) ANY\n INJURIES OR LOSSES OCCURING DURING CUSTOMER’S USE OF THE \n APPLICATION.\n \n \n \n LIMIT ON LIABILITY.\n \n
    \n
  • \n Exclusion of Indirect Damages. HCSS is not liable for any indirect,\n special, incidental, or consequential damages arising out of or\n related to this agreement (including, without limitation, costs of\n delay; loss of or unauthorized access to data or information; and lost\n profits, revenue, or anticipated cost savings), even if it knows of\n the possibility or foreseeability of such damage or loss.\n
  • \n
  • \n Total Limit on Liability. HCSS's total liability arising out of or\n related to this agreement (whether in contract, tort, or otherwise)\n does not exceed $100.\n
  • \n
\n \n GOVERNING LAW AND EXCLUSIVE FORUM. This agreement is\n governed by the laws of the State of Texas (without regard to conflicts\n of law principles) for any dispute between the parties or relating in\n any way to the subject matter of this agreement.  Any suit or legal\n proceeding must be exclusively brought in the federal or state courts\n for Harris County, Texas, and Customer submits to this personal\n jurisdiction and venue.  Nothing in this agreement prevents either\n party from seeking injunctive relief in a court of competent\n jurisdiction.  The prevailing party in litigation is entitled to\n recover its attorneys’ fees and costs from the other party. \n \n
\n );\n};\n\nconst SpacedSection = styled.div`\n margin-bottom: 8px;\n`;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport fp from \"fingerprintjs2\";\nimport config from \"config\";\n\nimport { strings } from \"localization\";\nimport { FormControl } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { selectors } from \"../../state\";\nimport { TermsAndConditions } from \"../../../../core/terms-and-conditions\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n Button,\n FormGroup,\n HelpBlock,\n Icon,\n Checkbox,\n Modal\n} from \"hcss-components\";\n\nexport interface BrowserFingerPrint {\n acceptedAt: number;\n components: string;\n hash: string;\n}\n\ninterface Props {\n validationState: \"error\" | null;\n email: string;\n errorMessage: string;\n onEmailChange: (email: string) => void;\n onConfirm: (fingerPrint?: BrowserFingerPrint) => void;\n onSignIn: (e: any) => void;\n}\nexport const ConfirmationPanel = ({\n validationState,\n email,\n errorMessage,\n onEmailChange,\n onConfirm,\n onSignIn\n}: Props) => {\n const { confirming } = useSelector(selectors.getAccount);\n const [showTC, setShowTC] = useState(false);\n const [isChecked, setIsChecked] = useState(false);\n\n const getFingerprint = async (): Promise => {\n try {\n const components = await fp.getPromise();\n const acceptedAt = Date.now();\n const raw = JSON.stringify(components);\n const values = components.map(c => c.value);\n const hash = fp.x64hash128(\n values.join(\"\"),\n config.defaults.fingerPrintHashSeed\n );\n\n return {\n acceptedAt,\n hash,\n components: raw\n };\n } catch (error) {\n console.error(error);\n }\n\n return undefined;\n };\n\n const handleConfirm = async () => {\n const fingerPrint = await getFingerprint();\n onConfirm(fingerPrint);\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.keyCode === 13 && isChecked) {\n handleConfirm();\n }\n };\n\n const handleChange = (e: React.FormEvent) => {\n e.persist();\n if (e && e.currentTarget) {\n onEmailChange((e.target as HTMLInputElement).value);\n }\n };\n\n const renderButtonContent = () => {\n if (confirming) {\n return (\n \n \n  {strings.account.confirm.confirming}\n \n );\n }\n\n return (\n \n \n  {strings.account.confirm.confirm}\n \n );\n };\n\n return (\n <>\n \n
\n \n {errorMessage}\n \n \n
\n \n setIsChecked(isChecked => !isChecked)}\n />\n I agree to the{\" \"}\n ) => {\n e.preventDefault();\n setShowTC(true);\n }}\n >\n terms and conditions.\n \n
\n
\n handleConfirm()}\n title={\n !isChecked ? \"You must agree to the terms and conditions\" : \"\"\n }\n >\n {renderButtonContent()}\n \n
\n\n {/* \n Already have an account?\n Sign-In\n */}\n {showTC && (\n
\n setShowTC(false)} show={showTC}>\n \n {`Terms & Conditions`}\n \n\n \n \n \n\n \n setShowTC(false)}\n >\n Close\n \n \n \n
\n )}\n \n \n );\n};\n\nconst ConfirmContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 420px;\n max-width: 500px;\n padding: 40px 50px 50px 50px;\n margin-bottom: 40px;\n background-color: white;\n border-radius: 8px;\n box-shadow: 0 6px 6px 0 rgba(0, 0, 0, 0.2);\n\n .email-input {\n margin-top: 25px;\n\n .form-group {\n margin-bottom: 0px;\n }\n }\n\n .confirm-button {\n margin-top: 10px;\n\n .btn {\n width: 160px;\n font-size: 11px;\n padding: 8px 24px;\n }\n }\n`;\n\nconst IconContainer = styled.div`\n .icon .fa-primary {\n fill: rgb(181, 181, 181);\n opacity: 0.9;\n }\n\n .icon .fa-secondary {\n fill: rgb(221, 221, 221);\n opacity: 0.9;\n }\n`;\n\n// const SignInLinkContainer = styled.div`\n// margin-top: 60px;\n// font-size: 13px;\n// font-weight: 500;\n// color: ${ConcreteColors.gray500};\n// `;\n\n// const StyledLink = styled.a`\n// cursor: pointer;\n// font-weight: 600;\n// margin-left: 3px;\n// `;\n\nconst StyledModal = styled(Modal)`\n .modal-dialog {\n overflow: hidden;\n border-radius: 8px;\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { StandardColors, ConcreteColors } from \"hcss-components\";\n\nexport const DeclinePanel = () => {\n return (\n \n
\n \n
\n\n
Response Updated
\n
\n You can change the status and see quote details at any time. Just click\n 'See Details' in the email.\n
\n \n );\n};\n\nconst DeclineContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n min-width: 420px;\n max-width: 500px;\n padding: 50px;\n margin-bottom: 30px;\n background-color: white;\n border-radius: 8px;\n box-shadow: 0 6px 6px 0 rgba(0, 0, 0, 0.2);\n\n .title {\n font-size: 26px;\n font-weight: 600;\n color: ${ConcreteColors.gray600};\n }\n\n .subtitle {\n margin-top: 5px;\n font-size: 13px;\n font-weight: 500;\n color: ${ConcreteColors.gray500};\n text-align: center;\n }\n\n .success-container {\n color: ${StandardColors.hcssHeavyBid};\n margin-bottom: 40px;\n }\n\n .signin-link {\n margin-top: 60px;\n }\n`;\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\nimport { ConcreteColors, StandardColors } from \"hcss-components\";\nimport { Redirect } from \"react-router\";\nimport {\n useLocation,\n useParams,\n useHistory,\n useRouteMatch\n} from \"react-router-dom\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useOidcContext } from \"modules/account/services/oidc-context\";\nimport { actions, selectors } from \"../../state\";\nimport { ConfirmationPanel, BrowserFingerPrint } from \"./confirm-panel\";\nimport { DeclinePanel } from \"./decline-panel\";\nimport { useQueryParam } from \"core/hooks/use-query-params\";\nimport { AuthenticationMethod, SharedResourceType } from \"core/models/enums\";\nimport { isValidEmail } from \"core/util/strings\";\nimport { strings } from \"localization\";\nimport { accountService } from \"modules/account/services/account-service\";\n\nconst init = { show: false, message: \"\" };\ntype VerifyMode = \"confirm\" | \"decline\" | \"proposal\" | undefined;\n\nexport const ConfirmPage = () => {\n const signInWithEmailLink = actions.signInWithEmailLink.request;\n const declineInvitation = actions.declineInvitation.request;\n\n const dispatch = useDispatch();\n const location = useLocation();\n const history = useHistory();\n const account = useSelector(selectors.getAccount);\n const legacyMode = useQueryParam(\"m\", location.search);\n const newMode = useRouteMatch<{ id: string; mode: string }>({\n path: \"/account/verify/:id/:mode\",\n exact: false\n })?.params.mode;\n const mode = legacyMode || newMode;\n const token = useQueryParam(\"t\", location.search)!;\n const { id } = useParams<{ id: string }>();\n const { oidcService } = useOidcContext();\n const [email, setEmail] = useState(\"\");\n const [autoLogonLoading, setAutoLogonLoading] = useState(true);\n const [displayErrors, setDisplayErrors] = useState(init);\n\n document.title = \"ProSubs Quoting\";\n\n useEffect(() => {\n const autoLogon = async () => {\n try {\n let attemptFailed = true;\n if (mode === \"confirm\" || mode === \"proposal\") {\n const user = await oidcService.getUser();\n if (user && !user.expired) {\n const { data: hasAccess } = await accountService.canAccessResource(\n id,\n mode === \"confirm\"\n ? SharedResourceType.VendorSolicitation\n : SharedResourceType.VendorProposal,\n user.access_token\n );\n\n if (hasAccess) {\n attemptFailed = false;\n\n if (mode === \"proposal\") {\n history.replace(`/quotes/proposals/${id}/review`);\n } else {\n history.replace(`/quotes/solicitations/${id}/requests`);\n }\n }\n }\n }\n\n if (attemptFailed) setAutoLogonLoading(false);\n } catch (error) {\n console.error(error);\n }\n };\n\n autoLogon();\n }, [dispatch, signInWithEmailLink, history, oidcService, id, token, mode]);\n\n useEffect(() => {\n if (account.authenticationError) {\n setDisplayErrors({\n show: true,\n message: strings.account.confirm.invalidMessage\n });\n }\n }, [account.authenticationError]);\n\n useEffect(() => {\n if (mode === \"decline\") {\n dispatch(declineInvitation({ id, token }));\n }\n }, [mode, dispatch, declineInvitation, id, token]);\n\n const handleConfirm = (fingerPrint?: BrowserFingerPrint) => {\n if (account.confirming) return;\n\n if (isValidEmail(email)) {\n setDisplayErrors({ show: false, message: \"\" });\n dispatch(signInWithEmailLink({ id, email, token, fingerPrint, mode }));\n } else {\n setDisplayErrors({\n show: true,\n message: strings.account.confirm.invalidEmail\n });\n }\n };\n\n const userHasAccess = (): boolean => {\n if (\n account.isAuthenticated &&\n account.authenticationMethod === AuthenticationMethod.OneClickLink\n ) {\n return id === account.authorizedResource;\n }\n\n return false;\n };\n\n if (!token || !mode) {\n return ;\n }\n\n if (userHasAccess()) {\n return mode === \"proposal\" ? (\n \n ) : (\n \n );\n }\n\n if (account.loading || autoLogonLoading) {\n return ;\n }\n\n return (\n \n \n \n \n \n <strong>ProSubs</strong> Quoting\n \n {mode === \"confirm\" && (\n {strings.account.confirm.verifyTitleRfq}\n )}\n {mode === \"proposal\" && (\n {strings.account.confirm.verifyTitleProposal}\n )}\n {mode !== \"confirm\" && mode !== \"proposal\" && (\n \n Learn More\n \n )}\n \n\n {mode === \"confirm\" || mode === \"proposal\" ? (\n setEmail(email)}\n onConfirm={handleConfirm}\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onSignIn={() => {}}\n errorMessage={displayErrors.message}\n validationState={displayErrors.show ? \"error\" : null}\n />\n ) : (\n \n )}\n \n \n \n );\n};\n\nconst PageWrapper = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n`;\n\nconst MainContent = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n margin: 40px;\n padding-top: 80px;\n`;\n\nconst Container = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n align-items: center;\n`;\n\nexport const TitleContainer = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-bottom: 20px;\n margin-bottom: 10px;\n`;\n\nconst Title = styled.div`\n font-family: \"ProximaNova\";\n font-size: 32px;\n font-weight: 400;\n padding-bottom: 8px;\n\n & strong {\n font-family: \"ProximaNova Heavy\";\n font-weight: 800;\n }\n\n & .darktext {\n color: #444;\n }\n`;\n\nconst Subtitle = styled.div`\n font-size: 15px;\n font-weight: 500;\n color: ${ConcreteColors.gray500};\n`;\n\nconst LearnMoreLink = styled.div`\n font-size: 18px;\n font-weight: 500;\n color: ${ConcreteColors.gray500};\n`;\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { useQueryParam } from \"core/hooks/use-query-params\";\nimport { useLocation, Link } from \"react-router-dom\";\nimport { accountService } from \"modules/account/services/account-service\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { ConcreteColors, Button } from \"hcss-components\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\nimport { strings } from \"localization\";\n\nexport const EmailVerificationPage = () => {\n const location = useLocation();\n const token = useQueryParam(\"t\", location.search)!;\n const [loading, setloading] = useState(true);\n const [isInvalid, setIsInvalid] = useState(false);\n\n useEffect(() => {\n const completeVerification = async () => {\n try {\n await accountService.completeEmailVerification(token);\n } catch (error) {\n console.error(error);\n setIsInvalid(true);\n }\n\n setloading(false);\n };\n\n completeVerification();\n }, [token]);\n\n return (\n <>\n {loading ? (\n \n ) : isInvalid ? (\n \n ) : (\n \n )}\n \n );\n};\n\nconst SuccessfulVerification = () => {\n return (\n \n \n
{strings.account.emailVerification.success}
\n
{strings.account.emailVerification.successMsg}
\n \n \n \n
\n );\n};\n\nconst FailVerification = () => {\n return (\n \n \n
{strings.account.emailVerification.fail}
\n
{strings.account.emailVerification.failMsg}
\n
\n );\n};\n\nconst baseIconStyle: object = {\n \"--fa-primary-color\": \"#7070708c\",\n \"padding-left\": \"25px\",\n \"margin-top\": \"20px\"\n};\n\nconst defaultIconStyle: object = {\n ...baseIconStyle,\n \"--fa-secondary-color\": ConcreteColors.green200\n};\n\nconst errorIconStyle: object = {\n ...baseIconStyle,\n \"--fa-secondary-color\": ConcreteColors.red200\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 60px;\n\n .title {\n font-size: 35px;\n color: #5a5c69;\n }\n\n .body {\n font-size: 20px;\n margin-top: 6px;\n max-width: 650px;\n text-align: center;\n }\n`;\n","import React, { useEffect } from \"react\";\nimport { Redirect } from \"react-router\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { actions, selectors } from \"../../state\";\nimport { useOidcContext } from \"../../services/oidc-context\";\nimport FullPageloading from \"modules/layout/components/FullPageLoading\";\n\nexport const OidcCallback = () => {\n const signInHcss = actions.signInWithHcssCredentials.request;\n const dispatch = useDispatch();\n const { oidcService } = useOidcContext();\n const { isAuthenticated } = useSelector(selectors.getAccount);\n const errors = useSelector(selectors.getErrors);\n\n useEffect(() => {\n const handleCallback = async () => {\n try {\n const user = await oidcService.signinRedirectCallback();\n dispatch(signInHcss(user));\n } catch (error) {\n console.error(\"[OIDC Client] Signin Callback\", error);\n dispatch(actions.signInWithHcssCredentials.failure(error));\n }\n };\n\n handleCallback();\n }, [dispatch, oidcService, signInHcss]);\n\n if (errors && errors.length > 0) {\n return ;\n }\n\n if (isAuthenticated) {\n const redirectPath = oidcService.getRedirect();\n return ;\n }\n\n return ;\n};\n","import { useEffect } from \"react\";\nimport { useOidcContext } from \"../../services/oidc-context\";\n\nexport const OidcSilentRenew = () => {\n const { oidcService } = useOidcContext();\n\n useEffect(() => {\n const handleCallback = async () => {\n try {\n await oidcService.signinSilentCallback();\n } catch (error) {\n console.error(\"[OIDC Client] Renewal Callback:\", error);\n }\n };\n\n handleCallback();\n }, [oidcService]);\n\n return null;\n};\n","import React, { useEffect } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { useOidcContext } from \"../../services/oidc-context\";\nimport { selectors, actions } from \"../../state\";\nimport FullPageloading from \"modules/layout/components/FullPageLoading\";\n\nexport const OidcLogout = () => {\n const dispatch = useDispatch();\n const { oidcService } = useOidcContext();\n const { isAuthenticated } = useSelector(selectors.getAccount);\n\n useEffect(() => {\n const handleCallback = async () => {\n try {\n await oidcService.signoutRedirectCallback();\n dispatch(actions.signOut);\n } catch (error) {\n console.error(\"[OIDC Client] Signout:\", error);\n }\n };\n\n handleCallback();\n }, [dispatch, oidcService]);\n\n if (!isAuthenticated) {\n oidcService.signinRedirect();\n }\n\n return ;\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { Button, ConcreteColors } from \"hcss-components\";\nimport { useOidcContext } from \"modules/account/services/oidc-context\";\n\nexport const SubSignup = () => {\n const { oidcService } = useOidcContext();\n\n const onSignupClick = () => {\n oidcService.signinRedirect(undefined, {\n acr_values: \"tenant:subcontractor redirect:signup\"\n });\n };\n\n const onLoginClick = () => {\n oidcService.signinRedirect(undefined, {\n acr_values: \"tenant:subcontractor\"\n });\n };\n\n return (\n \n \n
\n \"Your\n
\n \n Log In\n \n \n Sign Up for Free\n \n
\n
\n \n \n What are the advantages of signing up for a FREE HCSS\n Subcontractor account?\n \n\n \n Great question! HCSS wants to provide you with <b>ONE</b>{\" \"}\n <b>website</b> where you can:\n \n
\n
    \n
  • Track all of your company’s leads, upcoming & active jobs.
  • \n
  • Reply to quote solicitations received from GCs.
  • \n
  • \n {\" \"}\n Create professional quote proposals with your company logo.\n
  • \n
  • Estimate your prices & add markup.
  • \n
  • \n Send quotes to ANY general contractor. They do not need to be\n HeavyBid users.\n
  • \n
  • Access previously sent quotes & re-use them for new quotes.
  • \n
  • Manage your contacts.
  • \n
  • \n Work together with your co-workers. They would be able to see the\n same solicitation dashboard too!\n
  • \n
  • Create one quote proposal and send to multiple contractors.
  • \n
  • Access your quotes online anytime.
  • \n
\n \n \n \n
\n ProSubs Quoting{\" \"}\n \n Learn more\n \n
\n
\n
\n
\n );\n};\n\nconst Header = styled.div`\n .login {\n color: black;\n font-weight: 600;\n top: 10px;\n right: 10px;\n position: relative;\n }\n\n .login:hover {\n cursor: pointer;\n }\n\n .btnGrp {\n float: right !important;\n position: relative;\n top: 15px;\n height: 45px;\n }\n\n .signUpButton,\n .signUpButton:hover {\n background-color: #009639 !important;\n border-color: green;\n position: relative;\n top: 10px;\n }\n`;\n\nconst ContentFooter = styled.div`\n margin-top: 30px;\n\n .signUpButton,\n .signUpButton:hover {\n background-color: #009639 !important;\n border-color: green;\n position: relative;\n left: 35%;\n }\n\n .floatRight {\n float: right;\n }\n`;\n\nconst Body = styled.div`\n padding-left: 50px;\n padding-top: 30px;\n`;\n\nconst MainContent = styled.div`\n height: 100%;\n padding: 30px;\n ul.benifits-ul {\n font-family: \"ProximaNova\";\n font-weight: 900;\n font-size: 16px;\n }\n`;\n\nconst Brand = styled.div`\n font-family: \"ProximaNova Heavy\";\n font-size: 18px;\n font-weight: bold;\n margin-bottom: 16px;\n\n b {\n color: green;\n font: bold;\n }\n`;\n\nconst Title = styled.div`\n font-family: \"ProximaNova\";\n font-size: 18px;\n font-weight: 900;\n\n b {\n font-family: \"ProximaNova Heavy\";\n }\n`;\n\nconst Container = styled.div`\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n","import React from \"react\";\nimport { ConfirmPage } from \"../components/confirm\";\nimport { EmailVerificationPage } from \"../components/email-verification\";\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport { OidcCallback } from \"../components/oidc/oidc-callback\";\nimport { OidcSilentRenew } from \"../components/oidc/oidc-silent-renew\";\nimport { OidcLogout } from \"../components/oidc/oidc-logout\";\nimport { SubSignup } from \"modules/account/components/sub-signup\";\n\nexport const Views = () => {\n return (\n \n \n \n \n }\n />\n \n );\n};\n\nexport const OidcRoutes = () => {\n return (\n \n \n \n \n \n );\n};\n","import React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { Route } from \"react-router-dom\";\nimport { RouteComponentProps, Redirect, withRouter } from \"react-router\";\nimport { PageLoadingOverlay } from \"core/components/loaders\";\nimport { AuthenticationMethod, CurrentUser, UserType } from \"core\";\nimport { selectors, AccountAuthorization } from \"../state\";\nimport { useOidcContext } from \"../services/oidc-context\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\nimport { useAuthorization, useHcssUser } from \"../hooks\";\ninterface PrivateRouteProps extends RouteComponentProps {\n path: string;\n exact?: boolean;\n component:\n | React.ComponentType>\n | React.ComponentType;\n}\nexport const PrivateRoute = withRouter(\n ({ component, location, path, exact = false }: PrivateRouteProps) => {\n const account = useSelector(selectors.getAccount);\n const auth = useAuthorization();\n const user = useHcssUser();\n const { oidcService } = useOidcContext();\n\n const renderFn = (Component: any) => (props: any) => {\n return ;\n };\n\n if (account.loading) {\n return ;\n }\n\n if (!account.isAuthenticated) {\n oidcService.signinRedirect(location.pathname);\n return ;\n }\n\n if (account.authenticationMethod === AuthenticationMethod.OneClickLink) {\n const authorizedRequest = `/quotes/solicitations/${account.authorizedResource}/requests`;\n const authorizeProposal = `/quotes/proposals/${account.authorizedResource}/review`;\n\n if (\n !location.pathname.startsWith(authorizedRequest) &&\n !location.pathname.startsWith(authorizeProposal)\n ) {\n return ;\n }\n }\n\n if (!checkAccess(user, auth, location.pathname)) {\n return ;\n }\n\n return ;\n }\n);\n\n/**\n * This methods checks whether a user can go to a specific route.\n * Only users who have access to project tracking can go there.\n * Only HCSS users can go to Estimating, if they do not have the proper\n * subscription, they will see instructios when they get there.\n * Only users who have access to Quote management can go there.\n * All users should be able to see contacts.\n * @param {AccountAuthorization} auth\n * @param {string} path\n * @returns\n */\nconst checkAccess = (\n user: CurrentUser,\n auth: AccountAuthorization,\n path: string\n) => {\n if (path.startsWith(\"/projects\")) {\n return user.type === UserType.HcssSubscription;\n }\n\n if (path.startsWith(\"/estimates\")) {\n return user.type === UserType.HcssSubscription;\n }\n\n if (path.startsWith(\"/contacts\")) {\n return true;\n }\n\n if (path.startsWith(\"/settings\")) {\n if (user.type !== UserType.Guest) {\n return checkSettings(auth, path);\n }\n }\n\n return false;\n};\n\nconst checkSettings = (auth: AccountAuthorization, path: string) => {\n if (path.startsWith(\"/settings/permissions\")) {\n return auth.canAccessFullPrecon;\n }\n\n if (path.startsWith(\"/settings/smtp\")) {\n return auth.canAccessQuoteManagement;\n }\n\n if (path.startsWith(\"/settings/profile\")) {\n return true;\n }\n return false;\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { IconProp } from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface InfoCardProps {\n icon: IconProp;\n title: string;\n body: string;\n help: string;\n helpLocation: string;\n helpLinkTestId?: string;\n}\nexport const InfoCard = ({\n icon,\n title,\n body,\n help,\n helpLocation,\n helpLinkTestId\n}: InfoCardProps) => {\n return (\n \n
\n \n {title}\n
\n\n
\n

{body}

\n
\n\n \n
\n );\n};\n\nconst Card = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow: hidden;\n min-height: 220px;\n min-width: 35%;\n max-width: 35%;\n padding: 20px;\n margin: 40px 25px 0px;\n box-shadow: 0 3px 6px 0 rgba(0, 0, 0, 0.15);\n transition: 0.3s;\n background: white;\n border-radius: 10px;\n border: 0.5px solid #fafafa;\n\n &:hover {\n box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2);\n }\n\n .card-info-header {\n display: flex;\n flex-direction: row;\n align-items: center;\n color: ${ConcreteColors.gray700};\n\n .fa-2x {\n color: ${ConcreteColors.gray600};\n }\n\n span {\n margin-left: 12px;\n font-size: 17px;\n font-weight: 600;\n }\n }\n\n .card-info-body {\n display: flex;\n flex-direction: row;\n margin-top: 15px;\n\n p {\n font-size: 15px;\n font-weight: 400;\n color: ${ConcreteColors.gray500};\n }\n }\n\n .card-info-footer {\n display: flex;\n flex-direction: row;\n flex: 1;\n align-items: flex-end;\n\n a {\n font-weight: 500;\n font-size: 15px;\n color: ${ConcreteColors.blue200};\n text-decoration-line: none;\n transition: 0.3s;\n\n :hover {\n font-size: 16px;\n }\n }\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\nimport { ConcreteColors, Button, Icon } from \"hcss-components\";\nimport { useOidcContext } from \"modules/account/services/oidc-context\";\nimport { InfoCard, InfoCardProps } from \"./info-card\";\nimport { Roadblock } from \"./roadblock\";\n\nconst addPreconAccessLink =\n \"https://help.hcss.com/s/article/How-to-Add-Pre-Construction-Access-to-a-Subscription-Group\";\n\nexport const Unauthorized = () => {\n const { oidcService } = useOidcContext();\n\n // HACK: Required to be here for translations.\n const cardData: InfoCardProps[] = [\n {\n icon: [\"far\", \"box\"],\n title: strings.userAdmin.unauthorized.sandbox.title,\n body: strings.userAdmin.unauthorized.sandbox.body,\n help: strings.userAdmin.unauthorized.sandbox.help,\n helpLocation: \"/?sandbox=true\",\n helpLinkTestId: \"try-sanbox-button\"\n },\n {\n icon: [\"far\", \"smile\"],\n title: strings.userAdmin.unauthorized.supportPortal.title,\n body: strings.userAdmin.unauthorized.supportPortal.body,\n help: strings.userAdmin.unauthorized.supportPortal.help,\n helpLocation: \"https://support.hcss.com/\"\n }\n ];\n\n return (\n \n \n \n \n \n \n \n HeavyBid |\n Pre-Construction\n \n \n

{strings.userAdmin.unauthorized.jumbotron.title}

\n
\n

\n {strings.userAdmin.unauthorized.jumbotron.heavyBid}\n {strings.userAdmin.unauthorized.jumbotron.text1}\n

\n
    \n
  • \n {strings.userAdmin.unauthorized.projectTracking.title} \n {strings.userAdmin.unauthorized.jumbotron.listItem1}\n
  • \n
  • \n {strings.userAdmin.unauthorized.heavybidInsights.title} \n {strings.userAdmin.unauthorized.jumbotron.listItem2}\n
  • \n
  • \n {strings.userAdmin.unauthorized.jumbotron.listItem3}\n {strings.userAdmin.unauthorized.contactManagement.title} \n
  • \n
\n
\n

\n {strings.userAdmin.unauthorized.jumbotron.text2}\n \n {strings.userAdmin.unauthorized.jumbotron.text3}\n \n {strings.userAdmin.unauthorized.jumbotron.text4}\n

\n
\n

{strings.userAdmin.unauthorized.jumbotron.text5}

\n
\n oidcService.signoutRedirect()}\n >\n \n {strings.userAdmin.unauthorized.jumbotron.logout}\n \n
\n
\n \n
\n \n
\n
\n
\n
\n\n \n {cardData.map(d => (\n \n ))}\n \n
\n );\n};\n\nconst PageWrapper = styled.div`\n height: 100vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n /* background-color: white; */\n`;\n\nconst Jumbotron = styled.div`\n display: flex;\n margin: 70px 15% 60px 15%;\n`;\n\nconst ContentWrapper = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n align-items: center;\n width: 100%;\n`;\n\nconst Blurb = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1 1 50%;\n margin-top: 30px;\n margin-bottom: 40px;\n padding-right: 0px;\n\n h1 {\n color: ${ConcreteColors.gray700};\n font-size: 38px;\n font-weight: 700;\n line-height: 1.075;\n margin-bottom: 10px;\n width: 100%;\n }\n\n p {\n color: ${ConcreteColors.gray600};\n font-size: 18px;\n font-weight: 400;\n }\n\n div > button {\n display: flex;\n flex-direction: row;\n align-items: baseline;\n font-size: small;\n margin-top: 30px;\n padding-top: 8px;\n padding-bottom: 6px;\n }\n`;\n\nconst ImageContainer = styled.div`\n display: flex;\n align-items: center;\n flex: 1 1 37%;\n flex-direction: row-reverse;\n\n @media (max-width: 300px) {\n display: none;\n }\n`;\n\nconst CardContainer = styled.div`\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n margin: 20px 20px 100px;\n`;\n\nconst StyledSiteTitle = styled.span`\n font-size: 18px;\n font-family: \"ProximaNova\";\n display: flex;\n align-items: center;\n\n .heavyBidClr {\n color: hsla(150, 95%, 26%, 1);\n }\n\n .headerLogo {\n width: 20%;\n }\n\n .heavyBidClr:hover {\n color: hsla(150, 95%, 22%, 1);\n }\n\n .heavyBidClr:focus {\n color: hsla(150, 95%, 22%, 1);\n }\n\n a {\n font-size: inherit;\n font-family: inherit;\n color: inherit;\n text-decoration-line: none;\n }\n\n a:hover,\n a:focus {\n color: inherit;\n }\n\n & strong {\n font-family: \"ProximaNova Heavy\";\n }\n\n & .darktext {\n color: #444;\n }\n`;\n","import constate from \"constate\";\nimport { useState, useEffect } from \"react\";\nimport { useCurrentEstimateContext } from \"../../estimates/context/CurrentEstimateContext\";\nimport { useHcssUser } from \"modules/account\";\nimport { VendorProposalRepo } from \"../repository/vendor-proposal-repo\";\nimport { MasterProposalRepo } from \"../repository/master-proposal-repo\";\nimport {\n VendorProposalEntity,\n MasterProposalEntity,\n VendorProposal,\n MasterProposal\n} from \"core\";\nimport { onSnapshot } from \"firebase/firestore\";\n\nexport interface ProposalContext {\n outboundVendorProposals: VendorProposalEntity[];\n inboundVendorProposals: VendorProposalEntity[];\n masterProposals: MasterProposalEntity[];\n loading: boolean;\n}\nconst useProposals = (): ProposalContext => {\n const master = useMasterProposals();\n const outbound = useOutboundProposals();\n const inbound = useInboundProposals();\n\n return {\n outboundVendorProposals: outbound.proposals,\n inboundVendorProposals: inbound.proposals,\n masterProposals: master.proposals,\n loading: outbound.loading || inbound.loading || master.loading\n };\n};\n\nconst useMasterProposals = () => {\n const { companyId } = useHcssUser();\n const { currentEstimateId } = useCurrentEstimateContext();\n const [loading, setLoading] = useState(false);\n const [proposals, setProposals] = useState([]);\n\n useEffect(() => {\n const subscribe = () => {\n setLoading(true);\n\n const q = MasterProposalRepo.subscribe(companyId, currentEstimateId);\n const unsubscribe = onSnapshot(\n q,\n snapshots => {\n const results: MasterProposalEntity[] = [];\n snapshots.forEach(doc =>\n results.push({ ...(doc.data() as MasterProposal), id: doc.id })\n );\n setProposals(results);\n setLoading(false);\n },\n error => {\n console.error(error);\n setLoading(false);\n }\n );\n\n return () => unsubscribe();\n };\n\n if (companyId) return subscribe();\n }, [companyId, currentEstimateId]);\n\n return {\n loading,\n proposals\n };\n};\n\nconst useOutboundProposals = () => {\n const { companyId } = useHcssUser();\n const { currentEstimateId } = useCurrentEstimateContext();\n const [loading, setLoading] = useState(false);\n const [proposals, setProposals] = useState([]);\n\n useEffect(() => {\n const subscribe = () => {\n setLoading(true);\n\n const q = VendorProposalRepo.getOutboundSubscription(\n companyId,\n currentEstimateId\n );\n const unsubscribe = onSnapshot(\n q,\n snapshots => {\n const results: VendorProposalEntity[] = [];\n snapshots.forEach(doc =>\n results.push({ ...(doc.data() as VendorProposal), id: doc.id })\n );\n setProposals(results);\n setLoading(false);\n },\n error => {\n console.error(error);\n setLoading(false);\n }\n );\n\n return () => unsubscribe();\n };\n\n if (companyId) return subscribe();\n }, [companyId, currentEstimateId]);\n\n return {\n loading,\n proposals\n };\n};\n\nconst useInboundProposals = () => {\n const { companyId } = useHcssUser();\n const { currentEstimateId } = useCurrentEstimateContext();\n const [loading, setLoading] = useState(false);\n const [proposals, setProposals] = useState([]);\n\n useEffect(() => {\n const subscribe = () => {\n setLoading(true);\n\n const q = VendorProposalRepo.getInboundSubscription(companyId);\n const unsubscribe = onSnapshot(\n q,\n snapshots => {\n const results: VendorProposalEntity[] = [];\n snapshots.forEach(doc =>\n results.push({ ...(doc.data() as VendorProposal), id: doc.id })\n );\n setProposals(results);\n setLoading(false);\n },\n error => {\n console.error(error);\n setLoading(false);\n }\n );\n\n return () => unsubscribe();\n };\n\n if (companyId) return subscribe();\n }, [companyId, currentEstimateId]);\n\n return {\n loading,\n proposals\n };\n};\n\nconst [provider, context] = constate(useProposals);\nexport const ProposalProvider = provider;\nexport const useProposalContext = context;\n","import constate from \"constate\";\nimport { CommunicationLogRepo } from \"../../quote-management/repository/communication-log-repo\";\nimport { useState, useEffect } from \"react\";\nimport { useCurrentEstimateContext } from \"../../estimates/context/CurrentEstimateContext\";\nimport { CommunicationLogEntity } from \"core\";\nimport { useHcssUser } from \"modules/account\";\nimport { onSnapshot } from \"firebase/firestore\";\n\nexport interface VendorCommunicationContext {\n vendorCommunicationLogs: CommunicationLogEntity[];\n loading: boolean;\n}\nexport const useVendorCommunication = (): VendorCommunicationContext => {\n const { companyId } = useHcssUser();\n const { currentEstimateId } = useCurrentEstimateContext();\n const [loading, setLoading] = useState(false);\n const [communicationLogs, setCommunicationLogs] = useState<\n CommunicationLogEntity[]\n >([]);\n\n useEffect(() => {\n const subscribe = () => {\n setLoading(true);\n\n const q = CommunicationLogRepo.subscribe(companyId, currentEstimateId);\n const unsubscribe = onSnapshot(\n q,\n snapshots => {\n const results: any[] = [];\n snapshots.forEach(doc => results.push({ ...doc.data(), id: doc.id }));\n setCommunicationLogs(results);\n setLoading(false);\n },\n error => {\n console.error(error);\n setLoading(false);\n }\n );\n\n return () => unsubscribe();\n };\n\n if (companyId) return subscribe();\n }, [currentEstimateId, companyId]);\n\n return {\n vendorCommunicationLogs: communicationLogs,\n loading: loading\n };\n};\n\nconst [provider, context] = constate(useVendorCommunication);\nexport const VendorCommunicationProvider = provider;\nexport const useVendorCommunicationContext = context;\n","import FullPageLoading from \"modules/layout/components/FullPageLoading\";\nimport React, { FC, lazy, Suspense } from \"react\";\nimport { shouldLoadDevTools } from \"./util\";\n\nconst DevToolsCore = lazy(() =>\n import(/* webpackChunkName: \"dev-tools\" */ \"./dev-tools\")\n);\n\nexport const DevTools: FC = ({ children }) => {\n return shouldLoadDevTools() ? (\n }>\n {children}\n \n ) : (\n <>{children}\n );\n};\n","import { currentEnvironment, Environment } from \"../config\";\n\nexport function shouldLoadDevTools() {\n // this allows you to explicitly disable it in development for example\n const explicitlyDisabled =\n window.location.search.includes(\"dev-tools=false\") ||\n window.localStorage.getItem(\"dev-tools\") === \"false\";\n const explicitlyEnabled =\n window.location.search.includes(\"dev-tools=true\") ||\n window.localStorage.getItem(\"dev-tools\") === \"true\";\n // we want it enabled by default everywhere but production and we also want\n // to support the dev tools in production (to make us more productive triaging production issues).\n // you can enable the DevTools via localStorage or the query string.\n\n if (explicitlyDisabled) return false;\n if (explicitlyEnabled) return true;\n if (\n currentEnvironment !== Environment.Production &&\n currentEnvironment !== Environment.PreProd\n )\n return true;\n\n return false;\n}\n","import React from \"react\";\nimport { CurrentEstimateProvider } from \"./modules/estimates/context/CurrentEstimateContext\";\nimport { CodebooksProvider } from \"./modules/estimates/context/CodebooksContext\";\nimport { SolcitationProvider } from \"./modules/quote-management/context/solicitation-context\";\nimport { ProposalProvider } from \"modules/quote-management/context/proposal-context\";\nimport { VendorCommunicationProvider } from \"modules/quote-management/context/vendor-communication-context\";\nimport { RecentEstimateProvider } from \"modules/estimates/components/recent-estimates/use-recent-estimates\";\nimport { TutorialProvider } from \"./modules/tutorials/use-tutorial\";\nimport { HcssConnectProvider } from \"core/services/hcss-connect\";\nimport { DevTools } from \"./dev-tools\";\nimport { RestfulProvider } from \"restful-react\";\nimport { useHcssToken } from \"modules/account\";\n\ninterface AppProvidersProps {\n children?: React.ReactNode;\n}\nexport const AppProviders = ({ children }: AppProvidersProps) => {\n return (\n \n \n \n \n \n \n \n \n \n {children}\n \n \n \n \n \n \n \n \n \n );\n};\n\nconst RestfulReactProvider: React.FC = ({ children }) => {\n const token = useHcssToken();\n return (\n \n {children}\n \n );\n};\n","import React from \"react\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { CSSTransition } from \"react-transition-group\";\nimport styled from \"styled-components\";\nimport { useSessionStorage } from \"hcss-hooks\";\nimport { isSupportedBrowser } from \"core/util/is-supported-browser\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { strings } from \"localization\";\n\nexport const UnsupportedBrowserBanner = () => {\n const [showBanner, setShowBanner] = useSessionStorage(\n `browserWarning`,\n !isSupportedBrowser()\n );\n\n return (\n \n \n \n \n \n \n {strings.unsupportedBrowser.bannerTitle}\n setShowBanner(false)}\n aria-expanded=\"false\"\n type=\"button\"\n >\n \n \n \n \n
\n <>\n
\n {strings.unsupportedBrowser.bannerDetail}{\" \"}\n \n {strings.unsupportedBrowser.here}.\n \n
\n\n
\n \n \n \n
\n \n
\n
\n
\n \n );\n};\n\nconst warningIconStyle: object = {\n \"--fa-primary-color\": \"#2c4369\"\n};\n\nconst closeIconStyle: object = {\n \"--fa-primary-color\": \"#2c4369\"\n};\n\nconst Banner = styled.div`\n background-color: #f8d7da;\n border-radius: 3px;\n box-sizing: border-box;\n box-shadow: 0 0 1px rgba(9, 30, 66, 0.31),\n 0 20px 32px -8px rgba(9, 30, 66, 0.25);\n color: #2c4369;\n padding: 16px;\n transition: background-color 200ms;\n width: 100%;\n z-index: 600;\n margin-bottom: 50px;\n min-height: 120px;\n`;\n\nconst MainInfo = styled.div`\n display: flex;\n align-items: center;\n height: 32px;\n`;\n\nconst WarningIconContainer = styled.div`\n flex: 0 0 auto;\n width: 40px;\n height: 24px;\n`;\n\nconst Title = styled.span`\n font-weight: 600;\n flex: 1;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst CloseIconContainer = styled.button`\n appearance: none;\n background: none;\n border: none;\n border-radius: 3px;\n cursor: pointer;\n flex: 0 0 auto;\n margin-left: 8px;\n padding: 2px 3px;\n white-space: nowrap;\n\n :focus {\n outline: none;\n box-shadow: 0 0 0 2px #4c9aff;\n }\n`;\n\nconst DetailInfo = styled.div`\n display: flex;\n flex: 1 1 100%;\n flex-direction: column;\n justify-content: center;\n min-width: 0;\n padding: 0 0 0 40px;\n\n .wrapper {\n max-height: 150px;\n opacity: 1;\n overflow: visible;\n transition: max-height 0.3s, opacity 0.3s;\n\n .blurb {\n /* color: #42526e; */\n word-wrap: break-word;\n margin-bottom: 8px;\n }\n\n .action-container {\n display: flex;\n flex-wrap: wrap;\n padding-top: 8px;\n transform: translateX(-4px);\n }\n }\n`;\n\nconst ActionButtonWrapper = styled.div`\n margin-right: 10px;\n\n button {\n font-weight: 500;\n padding: 0 0px !important;\n align-items: baseline;\n border-width: 0;\n box-sizing: border-box;\n display: inline-flex;\n max-width: 100%;\n outline: none !important;\n text-align: center;\n text-decoration: none;\n white-space: nowrap;\n background: none;\n border-radius: 3px;\n box-shadow: 0 0 0 2px inherit;\n color: ${ConcreteColors.blue300};\n cursor: pointer;\n padding: 0 8px;\n transition: background 0.1s ease-out,\n box-shadow 0.15s cubic-bezier(0.47, 0.03, 0.49, 1.38);\n transition-duration: 0.1s, 0.15s;\n vertical-align: middle;\n width: auto;\n\n :hover {\n text-decoration: underline;\n }\n\n span {\n align-self: center;\n display: inline-flex;\n flex-wrap: nowrap;\n max-width: 100%;\n position: relative;\n\n span {\n align-items: center;\n align-self: center;\n flex: 1 1 auto;\n margin: 0 4px;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n transition: opacity 0.3s;\n opacity: 1;\n }\n }\n }\n`;\n","import { auth } from \"./firebase-app\";\nimport * as projects from \"./modules/projects\";\nimport * as estimates from \"./modules/estimates\";\nimport * as views from \"./modules/views\";\nimport * as schemas from \"./modules/schemas\";\nimport * as configurationSettings from \"./modules/configurationSettings\";\nimport * as signalR from \"./modules/signalr\";\nimport * as account from \"./modules/account\";\nimport * as profile from \"./modules/profile\";\nimport * as contacts from \"./modules/contacts\";\nimport * as payItemLibraries from \"./modules/quick-pricing\";\nimport { actions as calendarActions } from \"./modules/calendars\";\nimport React, { useEffect, useState } from \"react\";\nimport momentLocalizer from \"react-widgets-moment\";\nimport SiteLayout from \"./modules/layout/components/site-layout\";\nimport FullPageLoading from \"./modules/layout/components/FullPageLoading\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { NotFound } from \"core/components/not-found\";\nimport { GenericError } from \"core/components/generic-error\";\nimport { createSelector } from \"reselect\";\nimport { Views as EstimatesViews } from \"./modules/estimates/views\";\nimport { Views as ProjectsViews } from \"./modules/projects/views\";\nimport { Views as ContactsViews } from \"./modules/contacts/views\";\nimport { Views as SettingsViews } from \"./modules/settings/views\";\nimport { Views as AccountViews, OidcRoutes } from \"./modules/account/views\";\nimport { Redirect, Route, Switch, useLocation } from \"react-router-dom\";\nimport { PrivateRoute } from \"modules/account/components/private-route\";\nimport { AuthenticationMethod, FeatureFlag, UserType } from \"core\";\nimport { AccountAuthorization } from \"./modules/account\";\nimport { useOidcContext } from \"modules/account/services/oidc-context\";\nimport { Unauthorized } from \"modules/account/components/unauthorized\";\nimport { AppProviders } from \"./app-providers\";\nimport { UnsupportedBrowserBanner } from \"core/components/unsupported-browser-banner\";\nimport { useHcssUser } from \"modules/account\";\nimport { getSiteBreakingErrors } from \"modules/selectors\";\nimport { isSandboxEnabled } from \"core/util/sandbox\";\nimport { initializePrintHelper } from \"print-helper\";\nimport { Notification } from \"hcss-components\";\nimport { useFeatureFlags } from \"modules/configurationSettings/use-feature-flags\";\n\nexport const localizer = momentLocalizer();\ninitializePrintHelper();\n\nexport const App = () => {\n const user = useHcssUser();\n if (user)\n document.title =\n user.type === UserType.Subcontractor || user.type === UserType.Guest\n ? `ProSubs Quoting`\n : `HeavyBid | Pre-Con`;\n\n return (\n \n \n \n }\n />\n \n \n \n \n );\n};\n\ninterface StartupActionResults {\n appIsReady: boolean;\n isAuthenticated: boolean;\n hasErrors: boolean;\n}\n\nexport const MainApp = () => {\n const { getAccount } = account.selectors;\n const { appIsReady, hasErrors } = useStartupActions();\n const { user, isAuthenticated, loading, authorization } = useSelector(\n getAccount\n );\n\n const isLoadingUser = () => {\n let isLoading = loading || !isAuthenticated || !user;\n\n if (!isSandboxEnabled()) {\n isLoading = isLoading || !auth.currentUser;\n }\n\n return isLoading;\n };\n\n // The order of the following statements matter\n\n // 1. The user is loaded & authenticated\n if (isLoadingUser() && !hasErrors) {\n return ;\n }\n\n // 2. The user is authorized\n if (!isAuthorized(authorization, user?.type)) {\n return ;\n }\n\n // 3. The app is initialized\n if (!appIsReady) {\n return ;\n }\n\n // 4. Check for errors during load\n if (hasErrors) {\n return ;\n }\n\n // All Hcss Users should have authorization to at least one of these.\n const redirect =\n user?.type === UserType.HcssSubscription\n ? \"/projects\"\n : user?.type === UserType.Subcontractor\n ? \"/quotes\"\n : \"/estimates\";\n\n return (\n \n \n \n \n \n \n \n \n \n \n } />\n } />\n \n \n \n );\n};\n\nconst useStartupActions = (): StartupActionResults => {\n const getAccount = account.selectors.getAccount;\n const location = useLocation();\n const dispatch = useDispatch();\n const appIsLoaded = useSelector(getLoadedState);\n const errors = useSelector(getSiteBreakingErrors);\n const [hasPreFetched, setHasPreFetched] = useState(false);\n const { oidcService } = useOidcContext();\n const {\n isAuthenticated,\n authenticationMethod,\n authorization,\n user\n } = useSelector(getAccount);\n const { isFeatureEnabled: isCodebooksFeatureEnabled } = useFeatureFlags(\n \"Codebooks\"\n );\n const { isFeatureEnabled: isLinkToHeavyJobFeatureEnabled } = useFeatureFlags(\n FeatureFlag.LinkToHeavyJob\n );\n const { isFeatureEnabled: isQuickPricingEnabledPhase1 } = useFeatureFlags(\n FeatureFlag.QuickPricingPhase1\n );\n const enableQuickPricingPhase1 = (authorization.canAccessFullPrecon && isQuickPricingEnabledPhase1);\n const enableCodebooks =\n (authorization.canAccessFullPrecon ||\n authorization.canAccessFullReadonlyPrecon) &&\n isCodebooksFeatureEnabled;\n\n useEffect(() => {\n const events = oidcService.getEvents();\n\n events.addSilentRenewError(error => {\n if (authenticationMethod === AuthenticationMethod.OneClickLink) return;\n\n console.error(\"[OIDC Client] Renewal Event:\", error);\n void oidcService.signinRedirect();\n });\n\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n events.addAccessTokenExpiring(async () => {\n if (authenticationMethod === AuthenticationMethod.OneClickLink) return;\n\n try {\n console.info(\"[OIDC Client] Starting Renewal\");\n const user = await oidcService.signinSilent();\n dispatch(account.actions.updateOidcUser(user));\n } catch (error) {\n console.error(\"[OIDC Client] Renewal:\", error);\n void oidcService.signinRedirect();\n }\n });\n\n return () => {\n events.removeAccessTokenExpiring(() => { });\n events.removeSilentRenewError(() => { });\n };\n }, [dispatch, oidcService, authenticationMethod]);\n\n useEffect(() => {\n if (!isAuthenticated) {\n dispatch(account.actions.getUser.request(location.pathname));\n }\n }, [dispatch, isAuthenticated, location.pathname]);\n\n useEffect(() => {\n if (hasPreFetched && enableCodebooks) {\n dispatch(estimates.actions.loadHeavybidDivisions.request());\n dispatch(estimates.actions.loadLastProcessedActivityCodebooks.request());\n dispatch(estimates.actions.loadActivityCodebookMissing.request());\n dispatch(estimates.actions.loadActivityCodebookUnused.request());\n dispatch(estimates.actions.loadActivityCodebookUtilized.request());\n }\n }, [dispatch, hasPreFetched, enableCodebooks]);\n\n useEffect(() => {\n if (hasPreFetched && isLinkToHeavyJobFeatureEnabled) {\n dispatch(projects.actions.loadHJJobCostTypeCosts.request({}));\n }\n }, [dispatch, isLinkToHeavyJobFeatureEnabled, hasPreFetched]);\n\n useEffect(() => {\n if (hasPreFetched && enableQuickPricingPhase1) {\n dispatch(payItemLibraries.actions.loadPayItemLibraries.request());\n }\n }, [dispatch, enableQuickPricingPhase1, hasPreFetched]);\n\n useEffect(() => {\n if (\n !appIsLoaded &&\n !hasPreFetched &&\n isAuthenticated &&\n isAuthorized(authorization) &&\n authenticationMethod === AuthenticationMethod.HcssCredentials &&\n user?.type !== UserType.Guest\n ) {\n setHasPreFetched(true);\n if (\n user?.type === UserType.HcssSubscription ||\n user?.type === UserType.Subcontractor\n ) {\n dispatch(account.actions.subscribeToAuthState());\n dispatch(\n configurationSettings.actions.loadConfigurationSettings.request()\n );\n dispatch(schemas.actions.loadSchemas.request());\n dispatch(views.actions.loadViews.request());\n // As of the Activity Totals work, the estimates need to be\n // loaded after the schemas are loaded. See loadInitialEstimates in schemas/sagas\n // dispatch(estimates.actions.loadEstimates.request());\n dispatch(estimates.actions.loadQuoteFolders.request());\n dispatch(estimates.actions.loadEstimateFilters.request());\n dispatch(estimates.actions.loadUserDefinedLabels.request());\n dispatch(estimates.actions.loadHiddenUnlinkedEstimateIds.request());\n dispatch(projects.actions.loadProjects.request());\n dispatch(projects.actions.loadHJJobs.request());\n dispatch(contacts.actions.loadContactsState.request());\n if (!isSandboxEnabled()) {\n dispatch(signalR.actions.startSignalRConnection.request());\n dispatch(calendarActions.loadCalendars.request());\n }\n }\n dispatch(profile.actions.loadProfile.request());\n dispatch(estimates.actions.loadHeavybidDivisions.request());\n }\n }, [\n dispatch,\n appIsLoaded,\n isAuthenticated,\n hasPreFetched,\n authenticationMethod,\n authorization,\n user\n ]);\n\n const checkReadiness = () => {\n const cameFromEmail =\n authenticationMethod === AuthenticationMethod.OneClickLink;\n const subWithoutData =\n user?.type === UserType.Subcontractor &&\n !authorization.canAccessFullReadonlyPrecon;\n const canSkipLoading = cameFromEmail || subWithoutData;\n\n if (isAuthenticated && (appIsLoaded || canSkipLoading)) return true;\n return false;\n };\n\n const appIsReady = checkReadiness();\n return { appIsReady, isAuthenticated, hasErrors: errors.length > 0 };\n};\n\nconst isAuthorized = (\n auth: AccountAuthorization,\n userType: number | undefined = 0\n) => {\n return (\n auth.canAccessFullPrecon ||\n auth.canAccessFullReadonlyPrecon ||\n auth.canAccessLimitedPrecon ||\n userType === UserType.Subcontractor ||\n userType === UserType.Guest\n );\n};\n\nconst getLoadedState = createSelector(\n [\n configurationSettings.selectors.getLoaded,\n projects.selectors.getLoaded,\n schemas.selectors.getLoaded,\n views.selectors.getLoaded\n ],\n (configLoaded, projectsLoaded, schemasLoaded, viewsLoaded) => {\n return configLoaded && projectsLoaded && schemasLoaded && viewsLoaded;\n }\n);\n","export function initializePrintHelper() {\n window.addEventListener(\"beforeprint\", () => {\n // add a class of print to the body tag so that the styles are applied\n const isProjectListDisplayed = document.querySelector(\n '[data-testid=\"projects-list\"]'\n );\n if (isProjectListDisplayed) {\n const map = document.querySelector(\n '[data-testid=\"projects-map-container\"]'\n );\n if (map) {\n map.classList.add(\"display-none\");\n map.closest(\"react-grid-item\")?.classList.add(\"display-none\");\n }\n document.body.classList.add(\"print\");\n }\n });\n window.addEventListener(\"afterprint\", () => {\n document.body.classList.remove(\"print\");\n\n const map = document.querySelector(\n '[data-testid=\"projects-map-container\"]'\n );\n if (map) {\n map.closest(\"react-grid-item\")?.classList.remove(\"display-none\");\n map.classList.remove(\"display-none\");\n }\n });\n}\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\n// tslint:disable:no-console\n// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the 'N+1' visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === \"localhost\" ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === \"[::1]\" ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n process.env.PUBLIC_URL,\n window.location.toString()\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener(\"load\", () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n \"This web app is being served cache-first by a service \" +\n \"worker. To learn more, visit https://goo.gl/SC7cgQ\"\n );\n });\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker) {\n installingWorker.onstatechange = () => {\n if (installingWorker.state === \"installed\") {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a 'New content is\n // available; please refresh.' message in your web app.\n console.log(\"New content is available; please refresh.\");\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // 'Content is cached for offline use.' message.\n console.log(\"Content is cached for offline use.\");\n }\n }\n };\n }\n };\n })\n .catch(error => {\n console.error(\"Error during service worker registration:\", error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n !response.headers.get(\"content-type\")!.includes(\"javascript\")\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\n \"No internet connection found. App is running in offline mode.\"\n );\n });\n}\n\nexport function unregister() {\n if (\"serviceWorker\" in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Icon, ConcreteColors, Link } from \"hcss-components\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { strings } from \"localization\";\n\nexport const AppErrorRedirect = () => {\n return (\n \n \n

{strings.errorBoundary.title}

\n

{strings.errorBoundary.body}

\n \n {strings.errorBoundary.button}\n \n
\n );\n};\n\nconst baseIconStyle: Record = {\n \"--fa-primary-color\": \"#7070708c\",\n \"padding-left\": \"25px\",\n \"margin-top\": \"20px\"\n};\n\nconst errorIconStyle: Record = {\n ...baseIconStyle,\n \"--fa-secondary-color\": ConcreteColors.red200\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 60px;\n\n .title {\n font-size: 35px;\n color: #5a5c69;\n }\n\n .body {\n font-size: 20px;\n margin-top: 6px;\n max-width: 650px;\n text-align: center;\n }\n .button {\n background-color: #0370f5;\n border-color: #0370f5;\n color: white;\n }\n`;\n","import React, { FC, Suspense, lazy } from \"react\";\nimport queryString from \"query-string\";\nimport { isSandboxEnabled } from \"core/util/sandbox\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\n\nconst SandboxCore = lazy(() =>\n import(/* webpackChunkName: \"sandbox\" */ \"./mirage\")\n);\n\nexport const SandboxLoader: FC = ({ children }) => {\n const checkQueryString = () => {\n const { sandbox } = queryString.parse(window.location.search);\n if (sandbox === \"true\") {\n localStorage.setItem(\"sandbox\", \"true\");\n window.location = window.location.origin;\n }\n };\n\n checkQueryString();\n\n return isSandboxEnabled() ? (\n }>\n {children}\n \n ) : (\n <>{children}\n );\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Icon, ConcreteColors, Link } from \"hcss-components\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { strings } from \"localization\";\nimport { disableSandbox, resetSandbox } from \"core/util\";\n\nexport const SandboxErrorRedirect = () => {\n const handleDisable = () => {\n resetSandbox();\n disableSandbox();\n };\n return (\n \n \n

{strings.errorBoundary.sandbox.title}

\n

{strings.errorBoundary.sandbox.body}

\n \n {strings.errorBoundary.sandbox.resetButton}\n \n \n {strings.errorBoundary.sandbox.disableButton}\n \n
\n );\n};\n\nconst baseIconStyle: Record = {\n \"--fa-primary-color\": \"#7070708c\",\n \"padding-left\": \"25px\",\n \"margin-top\": \"20px\"\n};\n\nconst errorIconStyle: Record = {\n ...baseIconStyle,\n \"--fa-secondary-color\": ConcreteColors.red200\n};\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding-top: 60px;\n\n .title {\n font-size: 35px;\n color: #5a5c69;\n }\n\n .body {\n font-size: 20px;\n margin-top: 6px;\n max-width: 650px;\n text-align: center;\n }\n .button {\n background-color: #0370f5;\n border-color: #0370f5;\n color: white;\n }\n`;\n","import \"react-app-polyfill/stable\";\nimport \"./index.css\";\nimport \"moment/locale/en-gb\";\nimport \"moment/locale/en-au\";\nimport \"moment/locale/fr\";\nimport \"moment/locale/es\";\nimport \"moment/locale/de\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport redux from \"./modules/store\";\nimport { App } from \"./App\";\nimport { ThemeProvider, themes } from \"hcss-components\";\nimport { BaseTheme } from \"hcss-core\";\nimport { Provider } from \"react-redux\";\nimport { initializeFontAwesome } from \"./icons\";\nimport { unregister } from \"./registerServiceWorker\";\nimport { PrintProvider } from \"hcss-print\";\nimport { Router } from \"react-router-dom\";\nimport { OidcProvider } from \"./modules/account/services/oidc-context\";\nimport { initializeConsoleOverride } from \"console-override\";\nimport {\n initializeAppInsights,\n history,\n reactPlugin,\n initializeDatadogRum\n} from \"logging\";\nimport { AppInsightsErrorBoundary } from \"@microsoft/applicationinsights-react-js\";\nimport { AppErrorRedirect } from \"core/components/app-error-redirect\";\nimport { SandboxLoader } from \"mirage\";\nimport {\n createTheme,\n ThemeProvider as MuiThemeProvider\n} from \"@mui/material/styles\";\nimport { ThemeOptions } from \"@mui/material/styles/createTheme\";\nimport { isSandboxEnabled } from \"core\";\nimport { SandboxErrorRedirect } from \"core/components/sandbox-error-redirect\";\n\nconst theme = { ...themes.preConstruction, ...BaseTheme };\n\nconst muiTheme = createTheme({\n typography: {\n fontSize: 20\n },\n warningCustom: {\n main: \"rgb(255, 244, 229)\"\n }\n} as ThemeOptions);\n\ninitializeConsoleOverride();\ninitializeFontAwesome();\ninitializeAppInsights();\ninitializeDatadogRum();\n\nconst Root: React.FC = () => {\n const HandleError = () => {\n if (isSandboxEnabled()) {\n return ;\n }\n return ;\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nReactDOM.render(, document.getElementById(\"root\") as HTMLElement);\nunregister();\n","import { library } from \"@fortawesome/fontawesome-svg-core\";\n\nimport {\n faTimes as falTimes,\n faCircle as falCircle,\n faImage as falImage,\n faBuilding as falBuilding,\n faFileCertificate as falFileCertificate\n} from \"@fortawesome/pro-light-svg-icons\";\n\nimport {\n faCaretDown as fasCaretDown,\n faFileSignature as fasFileSignature\n} from \"@fortawesome/free-solid-svg-icons\";\n\nimport { faDigging as fasDigging } from \"@fortawesome/pro-solid-svg-icons\";\n\nimport {\n faAddressBook as fadAddressBook,\n faArchive as fadArchive,\n faBell as fadBell,\n faCalculator as fadCalculator,\n faChartLine as fadChartLine,\n faCommentAltLines as fadCommentAltLines,\n faDollarSign as fadDollarSign,\n faEnvelopeOpenDollar as fadEnvelopeOpenDollar,\n faFileInvoiceDollar as fadFileInvoiceDollar,\n faFolderOpen as fadFolderOpen,\n faMapMarkedAlt as fadMapMarkedAlt,\n faMoneyBill as fadMoneyBill,\n faSpinnerThird as fadSpinnerThird,\n faTrafficCone as fadTrafficCone,\n faUserCircle as fadUserCircle,\n faStopwatch as fadStopwatch,\n faFileSearch as fadFileSearch,\n faUserAlt as fadUserAlt,\n faExclamationTriangle as fadExclamationTriangle,\n faUserCheck as fadUserCheck,\n faUserTimes as fadUserTimes,\n faBuilding as fadBuilding,\n faPencil as fadPencil,\n faTools as fadTools,\n faAlignSlash as fadAlignSlash,\n faAbacus as fadAbacus,\n faConstruction as fadConstruction,\n faTelescope as fadTelescope,\n faTerminal as fadTerminal,\n faSortNumericUpAlt as fadSortNumericUpAlt\n} from \"@fortawesome/pro-duotone-svg-icons\";\n\nimport {\n faAddressBook as farAddressBook,\n faAnalytics as farAnalytics,\n faBell as farBell,\n faCalculator as farCalculator,\n faChartLine as farChartLine,\n faClipboardListCheck as farClipboardListCheck,\n faCogs as farCogs,\n faCommentAlt as farCommentAlt,\n faCommentAltLines as farCommentAltLines,\n faEnvelopeOpenDollar as farEnvelopeOpenDollar,\n faFileImport as farFileImport,\n faFileInvoiceDollar as farFileInvoiceDollar,\n faFolderOpen as farFolderOpen,\n faFolders as farFolders,\n faInboxIn as farInboxIn,\n faHome as farHome,\n faLongArrowRight as farLongArrowRight,\n faInboxOut as farInboxOut,\n faProjectDiagram as farProjectDiagram,\n faRoad as farRoad,\n faSlidersV as farSlidersV,\n faSmile as farSmile,\n faStream as farStream,\n faUsers as farUsers,\n faFileContract as farFileContract,\n faSearchPlus as farSearchPlus,\n faCommentDollar as farCommentDollar,\n faWindow as farWindow,\n faBox as farBox,\n faSortNumericUpAlt as farSortNumericUpAlt,\n faMobile as farMobile,\n faPhone as farPhone,\n faEnvelope as farEnvelope,\n faSearch as farSearch,\n faLink as farLink,\n faUnlink as farUnlink,\n faTimes as farTimes,\n faPlus as farPlus,\n faCheck as farCheck,\n faEyeSlash as farEyeSlash,\n faTable as farTable,\n faLock as farLock,\n faLockOpen as farLockOpen\n} from \"@fortawesome/pro-regular-svg-icons\";\n\nexport const initializeFontAwesome = () => {\n // Ad Light\n library.add(falTimes, falCircle, falImage, falBuilding, falFileCertificate);\n\n // Add Solid\n library.add(fasCaretDown, fasFileSignature, fasDigging);\n\n // Add duotone icons\n library.add(\n fadAddressBook,\n fadAlignSlash,\n fadArchive,\n fadBell,\n fadCalculator,\n fadChartLine,\n fadCommentAltLines,\n fadDollarSign,\n fadEnvelopeOpenDollar,\n fadFileInvoiceDollar,\n fadFolderOpen,\n fadMapMarkedAlt,\n fadMoneyBill,\n fadSpinnerThird,\n fadTrafficCone,\n fadUserCircle,\n fadStopwatch,\n fadFileSearch,\n fadUserAlt,\n fadExclamationTriangle,\n fadUserCheck,\n fadUserTimes,\n fadBuilding,\n fadPencil,\n fadTools,\n fadAbacus,\n fadConstruction,\n fadTelescope,\n fadTerminal,\n fadSortNumericUpAlt\n );\n\n // Add regular icons\n library.add(\n farAddressBook,\n farAnalytics,\n farBell,\n farCalculator,\n farChartLine,\n farClipboardListCheck,\n farCogs,\n farCommentAlt,\n farCommentAltLines,\n farEnvelopeOpenDollar,\n farFileImport,\n farFileInvoiceDollar,\n farFolderOpen,\n farFolders,\n farHome,\n farInboxIn,\n farInboxOut,\n farLongArrowRight,\n farProjectDiagram,\n farRoad,\n farSlidersV,\n farSmile,\n farStream,\n farUsers,\n farFileContract,\n farSearchPlus,\n farCommentDollar,\n farWindow,\n farBox,\n farSortNumericUpAlt,\n farMobile,\n farPhone,\n farEnvelope,\n farSearch,\n farLink,\n farUnlink,\n farTimes,\n farPlus,\n farCheck,\n farEyeSlash,\n farTable,\n farLock,\n farLockOpen\n );\n};\n","import { SchemaField } from \"api\";\nimport {\n IProductDto,\n IVendorDtoV1Response\n} from \"api/GeneratedClients/ContactsClient\";\nimport { CompanyTypeDto } from \"api/GeneratedClients/contacts\";\nimport { IVendorLocationDto } from \"api/contacts-api-dto-interfaces\";\nimport { TextOverflow } from \"core\";\nimport { Overlay } from \"hcss-components\";\nimport { Flex } from \"hcss-core\";\nimport { strings } from \"localization\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\nimport { CompanyPopover } from \"modules/contacts/components/contact-popover\";\nimport {\n PhoneNumber,\n WebAddress\n} from \"modules/contacts/components/vendor-details\";\nimport React, {\n useCallback,\n useMemo,\n useRef,\n useState,\n useEffect,\n memo\n} from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { DropdownList } from \"react-widgets\";\nimport styled from \"styled-components\";\nimport { CompanyAvatar } from \"../../../../core/components/avatar\";\nimport { SchemaFormFieldInputProps } from \"./common\";\nimport { IconButton } from \"@mui/material\";\nimport { Cancel } from \"@mui/icons-material\";\nimport ConfirmDelete from \"../../../../core/components/modals/ConfirmDelete\";\n\nexport interface CompanyFieldData {\n id: string;\n code: string;\n name: string | undefined;\n webAddress: string | undefined;\n phoneNumber: string | undefined;\n type: CompanyTypeDto | undefined;\n products: IProductDto[] | undefined;\n offices: IVendorLocationDto[] | undefined;\n}\n\nexport interface CompanyListOption {\n display: string;\n value: CompanyFieldData | null;\n id: string;\n}\n\nexport interface StaticCompanyFieldInputProps {\n editable?: boolean;\n value?: CompanyFieldData | string | null;\n onDelete: (item: CompanyFieldData) => void;\n}\nexport const StaticCompanyFieldInput = memo(\n (props: StaticCompanyFieldInputProps) => {\n const { editable, value, onDelete } = props;\n\n const vendorDataOptions = useSelector(\n contactsSelectors.getVendorDataOptions\n );\n\n const selectedVendor = useMemo(() => {\n if (typeof value === \"string\") {\n const vendor = vendorDataOptions.find(v => v.id === value);\n return vendor;\n }\n return value;\n }, [value, vendorDataOptions]);\n\n const handleDelete = useCallback(() => {\n if (selectedVendor) onDelete(selectedVendor);\n }, [selectedVendor, onDelete]);\n\n return (\n \n \n {editable && value && (\n \n \n \n )}\n \n );\n }\n);\n\nconst ItemComponent = ({ item }: { item: CompanyListOption }) =>\n item?.value ? :
{`${\"(clear)\"}`}
;\n\nexport interface SingleCompanyFieldInputProps {\n schemaField: SchemaField;\n editable?: boolean;\n value?: CompanyFieldData | string | null;\n onChange: (value?: CompanyFieldData) => void;\n hasErrors?: boolean;\n keepInvalidValues?: boolean;\n}\nexport const SingleCompanyFieldInput = memo(\n (props: SingleCompanyFieldInputProps) => {\n const {\n editable,\n value,\n hasErrors,\n onChange,\n schemaField: { config },\n keepInvalidValues\n } = props;\n\n const filtersSelected: boolean =\n config?.filterEnabled && config.filters?.length > 0;\n const vendorDataOptions = useSelector(\n contactsSelectors.getVendorDataOptions\n );\n\n const selectedVendor = useMemo(() => {\n if (typeof value === \"string\") {\n const vendor = vendorDataOptions.find(v => v.id === value);\n return vendor;\n }\n return value;\n }, [value, vendorDataOptions]);\n\n const options: CompanyListOption[] = useMemo(() => {\n let data: CompanyListOption[] = vendorDataOptions.map(data => {\n return {\n display: data.code,\n value: data,\n code: data.code,\n id: data.id\n };\n });\n\n if (filtersSelected) {\n data = data.filter(op => {\n return config?.filters.includes(op.value?.type?.code);\n });\n }\n\n if (selectedVendor) {\n data.push({ display: \"(clear)\", value: null, id: \"\" });\n }\n\n return data;\n }, [vendorDataOptions, filtersSelected, selectedVendor]);\n\n const companiesExist: boolean = options.length > 0;\n\n const handleChange = useCallback(\n (option?: CompanyListOption) => {\n const data = option?.value;\n if (data) {\n onChange(data);\n } else {\n onChange();\n }\n },\n [onChange]\n );\n\n useEffect(() => {\n if (keepInvalidValues || !selectedVendor) {\n return;\n }\n\n const existSelectedOptions = options.filter(\n d => d.id === selectedVendor.id\n );\n\n if (!existSelectedOptions) {\n handleChange();\n }\n }, [selectedVendor, options, handleChange, keepInvalidValues]);\n\n return (\n \n \n {editable && (\n
\n \n \n CompanyDropdownFilter(option, search)\n }\n textField=\"display\"\n valueField=\"id\"\n defaultValue={selectedVendor}\n value={selectedVendor}\n data={options}\n onChange={handleChange}\n id=\"arrow-dropdown\"\n messages={{\n emptyList:\n companiesExist && filtersSelected\n ? strings.projects.setup.message\n .emptyCompanyListWithFilter\n : strings.projects.setup.message.emptyCompanyList\n }}\n itemComponent={ItemComponent}\n />\n \n
\n )}\n
\n );\n }\n);\n\ninterface MultiCompanyListProps {\n value?: CompanyFieldData | CompanyFieldData[] | string | null;\n editable?: boolean;\n onDelete: (item: CompanyFieldData) => void;\n}\nconst MultiCompanyList = memo((props: MultiCompanyListProps) => {\n const { editable, value, onDelete } = props;\n\n if (Array.isArray(value)) {\n if (value.length > 0) {\n return (\n \n {value?.map((selectedVendor: CompanyFieldData) => (\n \n ))}\n \n );\n } else {\n return (\n \n );\n }\n }\n\n return (\n \n );\n});\n\nexport interface MultiCompanyFieldInputProps {\n schemaField: SchemaField;\n editable?: boolean;\n value?: CompanyFieldData | CompanyFieldData[] | string | string[] | null;\n onChange: (value?: CompanyFieldData[]) => void;\n hasErrors: boolean;\n keepInvalidValues?: boolean;\n}\nexport const MultiCompanyFieldInput = memo(\n (props: MultiCompanyFieldInputProps) => {\n const {\n editable,\n value,\n onChange,\n schemaField: { config },\n schemaField,\n hasErrors,\n keepInvalidValues\n } = props;\n\n const filtersSelected: boolean =\n config?.filterEnabled && config.filters?.length > 0;\n const vendorDataOptions = useSelector(\n contactsSelectors.getVendorDataOptions\n );\n\n const [showConfirmDeleteModal, setShowConfirmDeleteModal] = useState(false);\n const [confirmDeleteItem, setConfirmDeleteItem] = useState<\n CompanyFieldData | undefined\n >();\n\n const convertToCompany = (\n val: string | CompanyFieldData\n ): CompanyFieldData | undefined => {\n if (typeof val !== \"string\") {\n return val;\n }\n\n const vendor = vendorDataOptions.find(v => v.id === val);\n\n return vendor;\n };\n\n const valueArray = useMemo(() => {\n if (!value) {\n return [];\n }\n\n if (Array.isArray(value)) {\n const companiesData = value\n .map(convertToCompany)\n .filter(x => !!x) as CompanyFieldData[];\n\n return [...companiesData];\n }\n\n const company = convertToCompany(value);\n return company ? [company] : [];\n }, [value, vendorDataOptions]);\n\n const handleAdd = useCallback(\n (option?: CompanyListOption) => {\n const data = option?.value;\n if (data) {\n onChange([...valueArray, data]);\n setAddValue(null);\n }\n },\n [onChange, valueArray]\n );\n\n const filteredOptions: CompanyListOption[] = useMemo(() => {\n let data: CompanyListOption[] = vendorDataOptions.map(data => {\n return {\n display: data.code,\n value: data,\n code: data.code,\n id: data.id\n };\n });\n\n if (filtersSelected) {\n data = data.filter(op => {\n return config?.filters.includes(op.value?.type?.code);\n });\n }\n\n return data;\n }, [vendorDataOptions, filtersSelected]);\n\n const options: CompanyListOption[] = useMemo(() => {\n let data = filteredOptions;\n\n const existIds = valueArray.map(v => v.id);\n data = data.filter(op => {\n return !existIds.includes(op.id);\n });\n\n return data;\n }, [filteredOptions, valueArray]);\n\n useEffect(() => {\n if (keepInvalidValues || !valueArray) {\n return;\n }\n\n const filtered = valueArray.filter(v =>\n filteredOptions.some(d => d.id === v.id)\n );\n if (filtered.length != valueArray.length) onChange(filtered);\n }, [valueArray, filteredOptions, onChange, keepInvalidValues]);\n\n const companiesExist: boolean = options.length > 0;\n\n const openDeleteModal = useCallback(\n (item: CompanyFieldData) => {\n setConfirmDeleteItem(item);\n setShowConfirmDeleteModal(true);\n },\n [setConfirmDeleteItem, setShowConfirmDeleteModal]\n );\n\n const handleDelete = useCallback(\n (id: string) => {\n onChange(valueArray.filter(v => v.id !== id));\n },\n [onChange, valueArray]\n );\n\n const [addValue, setAddValue] = useState();\n\n return (\n <>\n {editable && (\n \n \n \n \n CompanyDropdownFilter(option, search)\n }\n textField=\"display\"\n valueField=\"id\"\n data={options}\n onChange={handleAdd}\n id=\"arrow-dropdown\"\n value={addValue}\n messages={{\n emptyList:\n companiesExist && filtersSelected\n ? strings.projects.setup.message\n .emptyCompanyListWithFilter\n : strings.projects.setup.message.emptyCompanyList\n }}\n itemComponent={ItemComponent}\n />\n \n \n )}\n\n \n\n setShowConfirmDeleteModal(false)}\n handleDelete={() => {\n if (confirmDeleteItem) handleDelete(confirmDeleteItem.id);\n setShowConfirmDeleteModal(false);\n }}\n title={schemaField.name}\n >\n

\n {strings.formatString(\n strings.core.modals.confirmDelete.message,\n confirmDeleteItem?.name ?? \"\"\n )}\n

\n \n \n );\n }\n);\n\nexport const CompanyInput = memo((props: SchemaFormFieldInputProps) => {\n const { form, field, schemaField, isLocked } = props;\n const permissions = usePermissions();\n const authorization = useAuthorization();\n const config = schemaField.config;\n const selectedVendor: CompanyFieldData | CompanyFieldData[] | null =\n field.value;\n\n const adminFailure = !permissions.admin && config.adminOnly;\n const fieldIsEditable =\n permissions.write && authorization.canAccessLimitedPrecon && !adminFailure;\n\n const handleSingleChange = useCallback(\n (data?: CompanyFieldData) => {\n form.setFieldValue(field.name, data);\n },\n [form.setFieldValue]\n );\n\n const handleMultiSelectChange = useCallback(\n (data?: CompanyFieldData[]) => {\n form.setFieldValue(field.name, data);\n },\n [form.setFieldValue]\n );\n\n if (config?.multiSelect) {\n return (\n \n );\n } else {\n return (\n \n );\n }\n});\n\nexport const CompanyOption = memo((props: CompanyFieldData) => {\n const { code, name } = props;\n const optionRef = useRef(null);\n const [show, setShow] = useState(false);\n if (!props.id) return
{`${\"(clear)\"}`}
;\n return (\n {\n setShow(true);\n }}\n onMouseLeave={() => setShow(false)}\n onClick={e => {\n setShow(false);\n }}\n >\n \n {code}\n {name}\n \n \n \n \n \n );\n});\n\nexport const CompanyDropdownFilter = (\n { value }: CompanyListOption,\n search: string\n) => {\n if (!value) return false;\n return (\n value.code.toLowerCase().includes(search.toLowerCase()) ||\n (value.name\n ? value.name.toLowerCase().includes(search.toLowerCase())\n : false)\n );\n};\n\ninterface CompanyBadgeProps {\n vendor: CompanyFieldData | IVendorDtoV1Response | undefined | null;\n}\nexport const CompanyBadge = memo((props: CompanyBadgeProps) => {\n const { vendor } = props;\n return (\n <>\n \n \n \n \n {vendor?.code}\n \n \n  - {vendor?.name}\n \n \n {vendor?.webAddress && (\n \n \n \n )}\n {vendor?.phoneNumber && (\n \n \n \n )}\n \n \n );\n});\n\nconst DropdownContainer = styled.div<{ hasErrors?: boolean }>`\n & .rw-widget-input {\n height: 34px;\n ${props => (props.hasErrors ? \"border: 1px solid #a94442;\" : \"\")};\n }\n}\n`;\n\nexport const OptionContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nexport const OptionHeader = styled.div`\n display: flex;\n\n .option-code {\n white-space: nowrap;\n flex: 1;\n font-size: 13px;\n font-weight: 700;\n margin-right: 3px;\n }\n\n .option-name {\n white-space: nowrap;\n flex: 2;\n font-size: 13px;\n }\n`;\n\nconst MultiDropdownContainer = styled.div<{ hasErrors?: boolean }>`\n height: 40px;\n display: flex;\n ${props => (props.hasErrors ? \"border: 1px solid #a94442;\" : \"\")};\n`;\n\nconst ArrowDropdownContainer = styled.div`\n flex: 1;\n`;\n\nconst MultiDividerLine = styled.hr`\n flex: 1;\n`;\n\nconst StaticInputContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n","import styled from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\n\nexport const HeaderContainer = styled.div`\n padding-bottom: 26px;\n padding-left: 12px;\n padding-top: 8px;\n`;\n\nexport const ItemContainer = styled.div`\n font-size: 14px;\n color: ${ConcreteColors.gray600};\n`;\n\nexport const ModuleTitle = styled.div`\n font-size: 16px;\n font-weight: 700;\n color: ${ConcreteColors.gray600};\n`;\n","import produce from \"immer\";\nimport { ActionType, createAction, getType } from \"typesafe-actions\";\n\nexport const STATE_KEY = \"settings\";\n\n// Models\nexport interface State {\n emailPanelActive: boolean;\n calendarPanelActive: boolean;\n businessUnitPanelActive: boolean;\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n toggleEmailPanel: createAction(\"SETTINGS/TOGGLE_EMAIL_PANEL\", resolve => {\n return (show?: boolean) => resolve({ show });\n }),\n toggleCalendarPanel: createAction(\n \"SETTINGS/TOGGLE_CALENDAR_PANEL\",\n resolve => {\n return (show?: boolean) => resolve({ show });\n }\n ),\n toggleBUPanel: createAction(\"SETTINGS/TOGGLE_BU_PANEL\", resolve => {\n return (show?: boolean) => resolve({ show });\n })\n};\n\nexport type SettingsActions = ActionType;\n\nconst initialState: State = {\n emailPanelActive: false,\n calendarPanelActive: false,\n businessUnitPanelActive: false\n};\n\n// Reducer\nexport const reducer = (state = initialState, action: SettingsActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.toggleEmailPanel): {\n const { show } = action.payload;\n if (show !== undefined) {\n draft.emailPanelActive = show;\n } else {\n draft.emailPanelActive = !draft.emailPanelActive;\n }\n break;\n }\n case getType(actions.toggleCalendarPanel): {\n const { show } = action.payload;\n if (show !== undefined) {\n draft.calendarPanelActive = show;\n } else {\n draft.calendarPanelActive = !draft.calendarPanelActive;\n }\n break;\n }\n case getType(actions.toggleBUPanel): {\n const { show } = action.payload;\n if (show !== undefined) {\n draft.businessUnitPanelActive = show;\n } else {\n draft.businessUnitPanelActive = !draft.businessUnitPanelActive;\n }\n break;\n }\n }\n });\n};\n\nexport type SelectorState = StateSlice;\n\n// Selectors\nconst getEmailPanelActive = ({ settings }: SelectorState) =>\n settings.emailPanelActive;\nconst getCalendarPanelActive = ({ settings }: SelectorState) =>\n settings.calendarPanelActive;\nconst getBUPanelActive = ({ settings }: SelectorState) =>\n settings.businessUnitPanelActive;\n\nexport const selectors = {\n getEmailPanelActive,\n getCalendarPanelActive,\n getBUPanelActive\n};\n","import {\n CurrentUser,\n UserType,\n WithId,\n formatCompanyField,\n formatContactField,\n formatHJJobField,\n formatLatLong,\n getFormatMultiSelect,\n getSortMultiSelectFn,\n sortCompany,\n sortContact,\n sortLatLong,\n statesObjectList\n} from \"core\";\nimport { DataColumnType, TypedDataColumn } from \"hcss-tables\";\nimport { strings } from \"localization\";\nimport { flatten, keyBy, merge } from \"lodash-es\";\nimport memoize from \"memoize-one\";\nimport { StateSlice as UserStateSlice } from \"modules/account\";\nimport {\n preconIdToString,\n sortPreConId\n} from \"modules/projects/common/helpers\";\nimport { createSelector } from \"reselect\";\nimport { Schema, SchemaField, SchemaFieldType, SchemaSection } from \"../../api\";\nimport { calculatedFieldService } from \"./services/calculated-field.service\";\nimport { StateSlice } from \"./state\";\n\nexport type SelectorState = StateSlice & UserStateSlice;\n\n// Selectors\nexport const getAllIds = (state: SelectorState) => state.schemas.allIds;\nexport const getLoaded = ({ schemas }: SelectorState) => schemas.loaded;\nexport const getErrors = ({ schemas }: SelectorState) => schemas.errors;\nexport const getSaved = ({ schemas }: SelectorState) => schemas.saved;\nexport const getSaving = ({ schemas }: SelectorState) => schemas.saving;\nexport const getIsAdmin = ({ account }: SelectorState) =>\n account.permissions?.admin ?? false;\nexport const getSchemaHash = (state: SelectorState) =>\n state.schemas.workingCopy;\nexport const getSchemaHashPristine = (state: SelectorState) =>\n state.schemas.original;\n\nexport const getAllSchemas = createSelector(\n [getAllIds, getSchemaHash],\n (ids, schemas) => {\n return ids.map(id => schemas[id]);\n }\n);\n\nexport const getAllSchemasPristine = createSelector(\n [getAllIds, getSchemaHashPristine],\n (ids, schemas) => {\n return ids.map(id => schemas[id]);\n }\n);\n\nconst filterEstimateSection = memoize(\n (schema: WithId, user?: CurrentUser) => {\n const estimateSectionId = \"ae9478b8-a74c-4da6-979b-16eb096210f8\";\n if (user?.type === UserType.Subcontractor) {\n return {\n ...schema,\n orderedSections: schema.orderedSections.filter(\n sectionId => sectionId !== estimateSectionId\n )\n };\n }\n return schema;\n }\n);\n\nexport const getEstimateSchema = ({ schemas }: SelectorState) => schemas;\nexport const getEstimateReportingSchema = createSelector(\n [getEstimateSchema],\n schemas => {\n if (!schemas || !schemas.workingCopy) return undefined;\n\n return Object.values(schemas.workingCopy).find(\n schema => schema.schemaName === \"estimateReporting\"\n );\n }\n);\n\nexport const getAllEstimateReportingSchemaFields = createSelector(\n [getEstimateReportingSchema],\n schema => {\n if (!schema) return undefined;\n return flattenTableFields(\n schema.orderedSections,\n schema.sections,\n schema.fields\n );\n }\n);\n\nexport const getBrokenOutActivityTotalFields = createSelector(\n [getAllEstimateReportingSchemaFields],\n fields => {\n if (!fields) return [];\n\n const mappedFields: SchemaField[] = [];\n\n fields.forEach(field => {\n const baseTotalField: SchemaField = {\n id: \"\",\n name: \"\",\n type: SchemaFieldType.Currency,\n config: {},\n readOnly: true,\n required: false,\n adminOnly: false,\n standard: false,\n protected: true,\n hiddenInTable: false,\n hiddenInForm: true,\n lookup: true,\n isLockable: false,\n useDefaultValue: false,\n characterLengthLimited: false\n };\n\n const { key } = field.config;\n\n const quantityTotalForField = {\n ...baseTotalField,\n type: SchemaFieldType.Number,\n name: `${field.title} - Quantity`,\n id: `${key}.quantity`\n };\n const costTotalForField = {\n ...baseTotalField,\n name: `${field.title} - Cost`,\n id: `${key}.cost`\n };\n\n mappedFields.push(quantityTotalForField, costTotalForField);\n });\n return mappedFields;\n }\n);\n\nexport const getBrokenOutActivityTotalFieldsSimple = createSelector(\n [getAllEstimateReportingSchemaFields],\n fields => {\n if (!fields) return undefined;\n return fields.map(field => {\n const { expression, unit, match } = field.config[\"formula\"];\n const key = field.config?.key;\n return { match, expression, unit, key };\n });\n }\n);\n\nexport const getSchemas = ({ schemas }: SelectorState) => schemas;\nexport const getAccount = ({ account }: SelectorState) => account;\n\nexport const getProjectSchema = createSelector(\n [getSchemas, getAccount],\n (schemas, account) =>\n schemas.projectSchemaId\n ? filterEstimateSection(\n schemas.workingCopy[schemas.projectSchemaId],\n account.user\n )\n : undefined\n);\n\nexport const getCompleteProjectSchema = createSelector(\n [getProjectSchema, getBrokenOutActivityTotalFields],\n (projectSchemaOriginal, activityTotalFields) => {\n if (!projectSchemaOriginal) return undefined;\n const projectSchema = { ...projectSchemaOriginal };\n\n const oldFields = { ...projectSchema.fields };\n const fields = merge(oldFields, keyBy(activityTotalFields, \"id\"));\n\n const sections = { ...projectSchema.sections };\n const oldSectionWithEstimates = Object.values(sections).find(section =>\n section.fields.includes(\"estimates\")\n );\n\n if (oldSectionWithEstimates) {\n const sectionWithEstimates = { ...oldSectionWithEstimates };\n const fields = [...sectionWithEstimates.fields];\n const filteredActivityTotalFields = activityTotalFields.flatMap(field =>\n !fields.includes(field.id) ? [field.id] : []\n );\n const indexOfLastEstimatesField = fields.findIndex(\n field => field === \"values.totals.actualMarkup_Takeoff\"\n );\n fields.splice(\n indexOfLastEstimatesField + 1,\n 0,\n ...filteredActivityTotalFields\n );\n sectionWithEstimates.fields = fields;\n sections[sectionWithEstimates.id] = sectionWithEstimates;\n }\n\n return {\n ...projectSchema,\n sections,\n fields\n } as Schema;\n }\n);\n\nexport const getProjectSchemaPristine = createSelector(\n [\n ({ schemas }: SelectorState) => schemas,\n ({ account }: SelectorState) => account\n ],\n (schemas, account) =>\n schemas.projectSchemaId\n ? filterEstimateSection(\n schemas.original[schemas.projectSchemaId],\n account.user\n )\n : undefined\n);\n\nexport const getProjectSchemaFieldsBySection = createSelector(\n [getProjectSchema],\n schema => {\n if (!schema) {\n return undefined;\n }\n return schema.orderedSections.map(sectionId => {\n return schema.sections[sectionId];\n });\n }\n);\n\nexport const getProjectSchemaOrderedSections = createSelector(\n [getProjectSchema],\n schema => {\n if (!schema) {\n return undefined;\n }\n return schema.orderedSections;\n }\n);\n\nexport const getProjectSchemaSections = createSelector(\n [getProjectSchema],\n schema => {\n if (!schema) {\n return undefined;\n }\n return schema.sections;\n }\n);\n\nexport const getProjectSchemaSectionsWithFields = createSelector(\n [getProjectSchemaFieldsBySection],\n sections => {\n if (!sections) {\n return undefined;\n }\n return sections.filter(s => s.fields.length > 0);\n }\n);\n\nexport const getProjectSchemaFields = createSelector(\n [getProjectSchema],\n schema => {\n if (!schema) {\n return undefined;\n }\n return schema.fields;\n }\n);\n\nexport const getOrderedProjectSchemaFields = createSelector(\n [getProjectSchema],\n schema => {\n if (!schema) {\n return [];\n }\n\n const orderedFieldIds = schema.orderedSections\n .map(sectionId => {\n const section = schema.sections[sectionId];\n\n if (!section) {\n return [];\n }\n\n return section.fields;\n })\n .reduce((acc, next) => [...acc, ...next], []);\n\n return orderedFieldIds\n .map(fieldId => schema.fields[fieldId])\n .filter(f => !!f);\n }\n);\n\nconst filterTableFields = (fields: TField[]) => {\n return fields.filter(field => {\n if (field.hiddenInTable) return false;\n\n switch (field.type) {\n case SchemaFieldType.Custom:\n if (field.id === \"percentFromLowBid\") return true;\n return false;\n case SchemaFieldType.BidResults:\n return false;\n case SchemaFieldType.Estimates:\n return false;\n default:\n return true;\n }\n });\n};\n\nconst flattenTableFields = (\n orderedSections: string[],\n sections: Record,\n fields: Record\n) => {\n return flatten(\n orderedSections.map(sectionId => {\n return sections[sectionId].fields.map(fieldId => ({\n ...fields[fieldId],\n name: fieldId,\n title: fields[fieldId]?.name,\n editable: !fields[fieldId]?.readOnly\n }));\n })\n );\n};\n\nexport const getAllProjectSchemaFields = createSelector(\n [\n getProjectSchemaOrderedSections,\n getProjectSchemaSections,\n getProjectSchemaFields\n ],\n (orderedSections, sections, fields) => {\n if (!orderedSections || !sections || !fields) {\n return undefined;\n }\n return flattenTableFields(orderedSections, sections, fields);\n }\n);\n\nexport const getProjectSchemaTableFields = createSelector(\n [getAllProjectSchemaFields],\n fields => {\n if (!fields) {\n return undefined;\n }\n return filterTableFields(fields);\n }\n);\n\nexport const getDateFields = createSelector(\n [getAllProjectSchemaFields],\n fields => {\n return fields?.filter(\n field =>\n field.type === SchemaFieldType.Date ||\n field.type === SchemaFieldType.DateTime\n );\n }\n);\n\nexport const getBidResultsSchema = createSelector([getAllSchemas], schemas => {\n const schema = schemas.find(schema => schema.schemaName === \"bidresults\");\n return schema;\n});\n\nexport const getAllBidResultsSchemaFields = createSelector(\n [getBidResultsSchema],\n schema => {\n if (!schema) {\n return undefined;\n }\n return flattenTableFields(\n schema.orderedSections,\n schema.sections,\n schema.fields\n );\n }\n);\n\nexport const getBidResultsSchemaTableFields = createSelector(\n [getAllBidResultsSchemaFields],\n fields => {\n if (!fields) {\n return undefined;\n }\n return filterTableFields(fields);\n }\n);\n\nexport const getActivityCodebooksSchema = createSelector(\n [getAllSchemas],\n schemas => {\n const activityCodebooksSchema = schemas.find(\n schema => schema.schemaName === \"activityCodebooks\"\n );\n return activityCodebooksSchema;\n }\n);\n\nexport const getActivityCodebooksSchemaFields = createSelector(\n [getActivityCodebooksSchema],\n schema => {\n if (schema) {\n return schema.fields;\n }\n return {};\n }\n);\n\nexport const getEstimatesSchema = createSelector([getAllSchemas], schemas => {\n const estimatesSchema = schemas.find(\n schema => schema.schemaName === \"estimates\"\n );\n return estimatesSchema;\n});\n\nexport const getEstimatesExtendedSchema = createSelector(\n [getAllSchemas],\n schemas => {\n const estimatesExtendedSchema = schemas.find(\n schema => schema.schemaName === \"estimatesExtended\"\n );\n return estimatesExtendedSchema;\n }\n);\n\nexport const getEstimatesExtendedSchemaFields = createSelector(\n [getEstimatesExtendedSchema],\n schema => {\n if (schema) {\n return schema.fields;\n }\n return {};\n }\n);\n\nexport const getEstimatesExtendedSchemaFieldLabels = createSelector(\n [getEstimatesExtendedSchema],\n schema => {\n if (!schema) return null;\n const schemaFieldLabelDict: Record = {};\n const schemaFieldKeys = Object.keys(schema.fields);\n schemaFieldKeys.forEach(field => {\n const currentField = { ...schema.fields[field] };\n schemaFieldLabelDict[field] = currentField.name;\n });\n return schemaFieldLabelDict;\n }\n);\n\nexport const getCompleteEstimatesExtendedSchema = createSelector(\n [getEstimatesExtendedSchema, getBrokenOutActivityTotalFields],\n (estimatesSchema, activityTotalFields) => {\n if (!estimatesSchema) return undefined;\n\n if (activityTotalFields.length === 0) return { ...estimatesSchema };\n\n const fields = {\n ...estimatesSchema.fields,\n ...keyBy(activityTotalFields, \"id\")\n };\n\n const sections = { ...estimatesSchema.sections };\n const orderedSections = [...estimatesSchema.orderedSections];\n\n sections[\"activityTotals\"] = {\n id: \"activityTotals\",\n name: strings.tables.options.activityTotals,\n fields: activityTotalFields.map(field => field.id)\n };\n orderedSections.push(\"activityTotals\");\n\n return {\n ...estimatesSchema,\n sections,\n orderedSections,\n fields\n };\n }\n);\n\nexport const getAllEstimatesSchemaFields = createSelector(\n [getEstimatesSchema],\n schema => {\n if (!schema) {\n return undefined;\n }\n return flattenTableFields(\n schema.orderedSections,\n schema.sections,\n schema.fields\n );\n }\n);\n\nexport const getEstimatesSchemaTableFields = createSelector(\n [getAllEstimatesSchemaFields],\n fields => {\n if (!fields) {\n return undefined;\n }\n return filterTableFields(fields);\n }\n);\n\nexport const getProjectTableColumns = createSelector(\n [getCompleteProjectSchema],\n schema => {\n if (schema) {\n const { fields, sections, orderedSections } = schema;\n return flatten(\n orderedSections.map(sectionId => {\n const section = sections[sectionId];\n return section.fields.map(fieldId => fields[fieldId]);\n })\n );\n }\n }\n);\n\nexport const getFilteredProjectTableColumns = createSelector(\n [getProjectTableColumns],\n columns => {\n if (columns) {\n return columns.filter(column => !column.hiddenInTable);\n }\n }\n);\n\nexport const isPreConIdEnabled = createSelector(\n [getCompleteProjectSchema],\n schema => {\n if (schema) {\n return (\n !schema.fields?.[\"preconId\"]?.hiddenInForm &&\n !schema.fields?.[\"preconId\"]?.hiddenInTable\n );\n }\n }\n);\n\nexport const isHJJobEnabled = createSelector(\n [getCompleteProjectSchema],\n schema => {\n if (schema) {\n return !schema.fields?.[\"hJJob\"]?.hiddenInForm;\n }\n }\n);\n\nexport const getPreConIdField = createSelector(\n [getCompleteProjectSchema],\n schema => {\n if (schema) {\n return schema.fields?.[\"preconId\"];\n }\n return undefined;\n }\n);\n\nexport const getDevExpressColumnsForProjectTable = createSelector(\n [getFilteredProjectTableColumns, getIsAdmin],\n (filteredColumns, isAdmin) => {\n if (filteredColumns) {\n return filteredColumns.map(column => {\n const readOnly = isColumnReadOnly(column, isAdmin);\n const groupingEnabled = isGroupingEnabled(column);\n\n // this logic (manually changing the column type at run time) might need to grow in the future\n // if what hcss-tables is wanting to support diverges further\n // from data types we want represented in the PreCon projects table,\n // as up until this point the two types have been in sync\n\n // this is essentially a way of \"mapping\" a SchemaField type (something creatable in PreCon Customize Setup)\n // to a DataColumnType (something hcss-tables is equipped to handle).\n\n // Right now, a Location field is stored in PreCon backend as SchemaFieldType.Location (15),\n // but in order to behave properly in the Projects table needs to have it's type changed\n // to Custom (SchemaFieldType.Custom = TypedDataColumn.Custom = 3) in order to pass in a custom sorting algorithm,\n // and a custom \"valueAsString\" function that gets run when searching for values in the table. Both of these functions are\n // automatically run by the hcss-tables code\n const mapColumnType = (t: SchemaFieldType) => {\n switch (t) {\n case SchemaFieldType.PreConId:\n case SchemaFieldType.MultiSelectList:\n case SchemaFieldType.Location:\n case SchemaFieldType.Company:\n case SchemaFieldType.Contact:\n case SchemaFieldType.HJJob:\n case SchemaFieldType.Table:\n return DataColumnType.Custom;\n\n case SchemaFieldType.Calculated:\n return DataColumnType.Number;\n\n default:\n return t;\n }\n };\n\n const type = mapColumnType(column.type);\n\n const config = generateColumnConfig(column.type, column.config);\n\n return ({\n ...column,\n name: column.id,\n title: column.name,\n groupingEnabled,\n readOnly,\n type,\n getCellValue: (row: any) => {\n if (column.id === \"quickPriceSheet.TotalPrice\") {\n return roundQuickPriceTotalPriceValue(row, column);\n }\n if (row && row.fields) {\n return row.fields[column.id];\n }\n return row[column.id];\n },\n config\n } as unknown) as TypedDataColumn;\n });\n }\n }\n);\nconst roundQuickPriceTotalPriceValue = (row: any, column: SchemaField) => {\n if (row?.fields) {\n return row.fields[column.id]\n ? parseFloat(row.fields[column.id].toFixed(2))\n : row.fields[column.id];\n }\n return row[column.id]\n ? parseFloat(row[column.id].toFixed(2))\n : row[column.id];\n};\n\nconst isColumnReadOnly = (column: SchemaField, isAdmin: boolean) => {\n return (\n (!isAdmin && column.adminOnly) ||\n column.readOnly ||\n column.type === SchemaFieldType.Location ||\n column.type === SchemaFieldType.Table ||\n column.type === SchemaFieldType.Calculated\n );\n};\n\nconst isGroupingEnabled = (column: SchemaField) => {\n if (\n column.id === \"name\" ||\n column.type === SchemaFieldType.PreConId ||\n column.type === SchemaFieldType.Location\n )\n return false;\n return true;\n};\n\nexport const generateColumnConfig = (\n type: SchemaFieldType,\n configOverride: { [key: string]: any } = {}\n) => {\n let config;\n switch (type) {\n case SchemaFieldType.States:\n config = {\n preConType: SchemaFieldType.States,\n listValues: statesObjectList\n };\n break;\n case SchemaFieldType.List:\n config = {\n preConType: SchemaFieldType.List,\n listValues: []\n };\n break;\n case SchemaFieldType.Location:\n config = {\n preConType: SchemaFieldType.Location,\n latLong: true,\n sortingFunction: (\n a: { lat: number; long: number } | null,\n b: { lat: number; long: number } | null\n ) => sortLatLong(a, b),\n valueAsString: formatLatLong\n };\n break;\n case SchemaFieldType.MultiSelectList:\n const sortMultiSelect = getSortMultiSelectFn(configOverride);\n const formatMultiSelect = getFormatMultiSelect(configOverride);\n config = {\n preConType: SchemaFieldType.MultiSelectList,\n sortingFunction: sortMultiSelect,\n valueAsString: formatMultiSelect\n };\n break;\n case SchemaFieldType.PreConId:\n config = {\n preConType: SchemaFieldType.PreConId,\n valueAsString: preconIdToString,\n sortingFunction: sortPreConId\n };\n break;\n case SchemaFieldType.Company:\n config = {\n preConType: SchemaFieldType.Company,\n company: true,\n valueAsString: formatCompanyField,\n sortingFunction: sortCompany\n };\n // This is to fix the bug in the HBW-4830 card.\n // The reason why we are deleting the config.contact = true here is because\n // when we switching from the contact field to company field, we forgot to run a migration\n // to update the old config.contact to be config.company. Therefore, for some customers that was in\n // the middle of this change, there company field still has the config.contact = true which makes the column provider\n // displays it as a contact field which it is not.\n // This line of code is to prevent that for happening ONLY in the UI. The config data in cosmos could still\n // be in a wrong state.\n delete configOverride.contact;\n break;\n case SchemaFieldType.Contact:\n config = {\n preConType: SchemaFieldType.Contact,\n contact: true,\n valueAsString: formatContactField,\n sortingFunction: sortContact\n };\n break;\n case SchemaFieldType.HJJob:\n config = {\n preConType: SchemaFieldType.HJJob,\n valueAsString: formatHJJobField\n };\n break;\n case SchemaFieldType.Table:\n config = {\n preConType: SchemaFieldType.Table\n };\n break;\n case SchemaFieldType.Calculated:\n const calculatedFieldConfig = calculatedFieldService.getConfig({\n config: configOverride\n });\n config = {\n preConType: SchemaFieldType.Calculated,\n requiresEstimatesAccess: calculatedFieldService.hasEstimatesVariables(\n calculatedFieldConfig\n )\n };\n delete configOverride.requiresEstimatesAccess;\n break;\n default:\n config = {};\n }\n return { ...config, ...configOverride };\n};\n","import EmailSubscriptionApi from \"api/EmailSubscriptionApi\";\nimport {\n BusinessUnitReadDto,\n CredentialsUserDto\n} from \"api/GeneratedClients/precon\";\nimport RestApi from \"api/RestApi\";\nimport {\n getSelectedBusinessUnitIdSaga,\n getTokenSaga\n} from \"api/api-saga-factory\";\nimport { strings } from \"localization\";\nimport {\n all,\n call,\n put,\n select,\n takeEvery,\n takeLatest\n} from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport * as notify from \"../../core/components/notify\";\nimport {\n initialValidationResult,\n validateSubscription\n} from \"./common/validation-helper\";\nimport { Subscription, actions, selectors } from \"./state\";\n\nfunction* loadDataForSubscriptionPage() {\n yield all([call(loadTemplates), call(loadRecipients), call(loadBus)]);\n yield put(actions.loadDataForSubscriptionPage.success());\n}\n\nfunction* loadTemplates() {\n const accessToken = yield call(getTokenSaga);\n const buId = yield call(getSelectedBusinessUnitIdSaga);\n const TemplatesApi = new RestApi(\n `/v1/businessUnits/${buId}/views/allBUs`,\n accessToken ?? \"\"\n );\n try {\n const templateData = yield call(TemplatesApi.get.bind(TemplatesApi));\n yield put(actions.loadTemplates.success(templateData.data));\n } catch (error) {\n yield put(actions.loadTemplates.failure(error));\n }\n}\n\nfunction* loadRecipients() {\n const accessToken = yield call(getTokenSaga);\n const buId = yield call(getSelectedBusinessUnitIdSaga);\n const RecipientsApi = new RestApi(\n `/v1/businessUnits/${buId}/company/allPreConUsers`,\n accessToken ?? \"\"\n );\n try {\n const recipientData = yield call(RecipientsApi.get.bind(RecipientsApi));\n yield put(actions.loadRecipients.success(recipientData.data));\n } catch (error) {\n yield put(actions.loadRecipients.failure(error));\n }\n}\n\nfunction* loadBus() {\n const accessToken = yield call(getTokenSaga);\n const BUsApi = new RestApi(\n `/v1/businessUnits`,\n accessToken ?? \"\"\n );\n\n try {\n const buData = yield call(BUsApi.get.bind(BUsApi));\n yield put(actions.loadBusinessUnits.success(buData.data.results));\n } catch (error) {\n yield put(actions.loadTemplates.failure(error));\n }\n}\n\nfunction* loadSubscriptions() {\n try {\n const accessToken = yield call(getTokenSaga);\n const api = new RestApi(\n `/v1/emails/projects`,\n accessToken ?? \"\"\n );\n const response = yield call([api, api.get]);\n yield put(actions.loadSubscriptions.success(response.data));\n } catch (error) {\n yield put(actions.loadSubscriptions.failure(error));\n }\n}\n\nfunction* saveSubscription(\n action: ActionType\n) {\n const newSubscription = action.payload.subscription;\n const post = action.payload.isNewSubscription;\n const setValidationResult = action.payload.setValidationResult;\n const setPristineSubscription = action.payload.setPristineSubscription;\n const currentSubscriptions = yield select(selectors.getSubscriptions);\n const recipients = yield select(selectors.getRecipients);\n const { isFieldValid, fieldErrorMessages, isValid } = validateSubscription(\n newSubscription,\n currentSubscriptions?.filter((sub: any) => sub.id !== newSubscription.id),\n recipients\n );\n setValidationResult({ isFieldValid, fieldErrorMessages });\n if (!isValid) {\n const errors = Object.values(fieldErrorMessages).join(\"\\n\");\n notify.error(`${errors}`);\n return;\n }\n setValidationResult(initialValidationResult);\n try {\n const accessToken = yield call(getTokenSaga);\n const api = new RestApi(\n `/v1/emails/projects`,\n accessToken ?? \"\"\n );\n const response = yield call(\n [api, post ? api.create : api.update],\n newSubscription\n );\n const updatedSubscription = response.data;\n yield put(actions.saveSubscription.success(updatedSubscription));\n setPristineSubscription(updatedSubscription);\n notify.save(updatedSubscription.name ?? \"\");\n } catch (error) {\n console.error(error);\n notify.error(strings.emailSubscription.notification.saveFailed);\n yield put(actions.saveSubscription.failure(error));\n }\n}\n\nfunction* pauseSubscription(\n action: ActionType\n) {\n const subscriptionId = action.payload.subscriptionId;\n try {\n const accessToken = yield call(getTokenSaga);\n const api = new EmailSubscriptionApi(accessToken);\n const response = yield call(api.pauseSubscription, subscriptionId);\n const updatedSubscription = response.data;\n yield put(actions.pauseSubscription.success());\n notify.save(updatedSubscription.name ?? \"\");\n } catch (error) {\n console.error(error);\n notify.error(strings.emailSubscription.notification.saveFailed);\n yield put(actions.pauseSubscription.failure(error));\n }\n}\n\nfunction* resumeSubscription(\n action: ActionType\n) {\n const subscriptionId = action.payload.subscriptionId;\n try {\n const accessToken = yield call(getTokenSaga);\n const api = new EmailSubscriptionApi(accessToken);\n const response = yield call(api.resumeSubscription, subscriptionId);\n const updatedSubscription = response.data;\n yield put(actions.resumeSubscription.success());\n notify.save(updatedSubscription.name ?? \"\");\n } catch (error) {\n console.error(error);\n notify.error(strings.emailSubscription.notification.saveFailed);\n yield put(actions.resumeSubscription.failure(error));\n }\n}\n\nfunction* deleteSubscription(\n action: ActionType\n) {\n const deletingSubscription = action.payload.deletingSubscription;\n const accessToken = yield call(getTokenSaga);\n const api = new RestApi(\n `/v1/emails/projects`,\n accessToken ?? \"\"\n );\n try {\n yield call([api, api.delete], deletingSubscription.id);\n notify.remove(strings.emailSubscription.notification.subscription);\n yield put(\n actions.deleteSubscription.success({\n deletingId: deletingSubscription.id\n })\n );\n } catch (error) {\n console.error(error);\n notify.error(strings.emailSubscription.notification.deleteFailed);\n yield put(actions.saveSubscription.failure(error));\n }\n}\n\nexport const sagas = [\n takeLatest(\n getType(actions.loadDataForSubscriptionPage.request),\n loadDataForSubscriptionPage\n ),\n takeEvery(getType(actions.saveSubscription.request), saveSubscription),\n takeEvery(getType(actions.deleteSubscription.request), deleteSubscription),\n takeEvery(getType(actions.pauseSubscription.request), pauseSubscription),\n takeEvery(getType(actions.resumeSubscription.request), resumeSubscription),\n takeEvery(getType(actions.loadSubscriptions.request), loadSubscriptions)\n];\n","import produce from \"immer\";\nimport { ActionType, createAsyncAction, getType } from \"typesafe-actions\";\nimport { ConfigurationSettings } from \"../../api\";\n\nexport const STATE_KEY = \"configurationSettings\";\n\n// Models\nexport interface State {\n info?: ConfigurationSettings;\n loading: boolean;\n loaded: boolean;\n errors: string[];\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n loadConfigurationSettings: createAsyncAction(\n \"CONFIGURATION_SETTINGS/LOAD_REQUEST\",\n \"CONFIGURATION_SETTINGS/LOAD_SUCCESS\",\n \"CONFIGURATION_SETTINGS/LOAD_FAILURE\"\n )()\n};\n\nexport type ConfigurationSettingsActions = ActionType;\n\nexport const initialState: State = {\n loading: false,\n loaded: false,\n errors: []\n};\n\n// Reducer\nexport const reducer = (\n state = initialState,\n action: ConfigurationSettingsActions\n) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.loadConfigurationSettings.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n case getType(actions.loadConfigurationSettings.success): {\n draft.info = action.payload;\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n case getType(actions.loadConfigurationSettings.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error loading configuration settings: ${action.payload.message}`\n );\n break;\n }\n }\n });\n};\n\n// Selectors\nconst getConfigurationSettings = ({ configurationSettings }: StateSlice) =>\n configurationSettings.info;\nconst getLoaded = ({ configurationSettings }: StateSlice) =>\n configurationSettings.loaded;\nconst getErrors = ({ configurationSettings }: StateSlice) =>\n configurationSettings.errors;\n\nexport const selectors = {\n getConfigurationSettings,\n getLoaded,\n getErrors\n};\n","import { useSelector } from \"react-redux\";\nimport { useRouteMatch } from \"react-router-dom\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\n\nexport function useGetSelectedVendor() {\n const vendorDetailsMatch = useRouteMatch<{ vendorId: string }>({\n path: \"/contacts/:vendorId\"\n });\n const vendorList = useSelector(contactsSelectors.getVendorList);\n const currentSelectedVendor = vendorList.find(\n v => v.id === vendorDetailsMatch?.params.vendorId\n );\n return currentSelectedVendor;\n}\n","import { Project, SchemaField, SchemaFieldType } from \"api\";\nimport { strings } from \"localization\";\nimport * as math from \"mathjs\";\nimport {\n CalculatedFieldConfig,\n CalculatedFieldVariable,\n CalculatedFieldVariableOption\n} from \"../models/calculated-field-config.model\";\nimport { selectEstimatesFields } from \"modules/projects/common/helpers\";\n\nconst supportedOperators = [\"+\", \"-\", \"*\", \"/\", \"^\"];\n\nconst isOperatorNode = (node: math.MathNode): node is math.OperatorNode =>\n node.type === \"OperatorNode\";\nconst isSymbolNode = (node: math.MathNode): node is math.SymbolNode =>\n node.type === \"SymbolNode\";\nconst isConstantNode = (node: math.MathNode): node is math.ConstantNode =>\n node.type === \"ConstantNode\";\n\n/**\n * Found all invalid operators in formula\n * @param nodes parsed formula root\n * @returns invalid operators\n */\nconst checkOperatorNodes = (nodes: math.MathNode) => {\n const operatorNodes = nodes.filter(isOperatorNode) as math.OperatorNode[];\n const invalidOperators: string[] = [];\n\n for (const operatorNode of operatorNodes) {\n if (!supportedOperators.includes(operatorNode.op)) {\n invalidOperators.push(operatorNode.op);\n }\n }\n\n // Distinct\n return invalidOperators.filter((v, i) => invalidOperators.indexOf(v) === i);\n};\n\n/**\n * Found all invalid numbers in formula\n * @param nodes parsed formula root\n * @returns invalid numbers\n */\nconst checkConstantNodes = (nodes: math.MathNode) => {\n const constantNodes = nodes.filter(isConstantNode) as math.ConstantNode[];\n const invalidNumbers: number[] = [];\n\n for (const constantNode of constantNodes) {\n const value = constantNode.value;\n\n // To big numbers\n if (value >= Number.MAX_SAFE_INTEGER) {\n invalidNumbers.push(value);\n }\n }\n\n // Distinct\n return invalidNumbers.filter((v, i) => invalidNumbers.indexOf(v) === i);\n};\n/**\n * validates variables in formula\n * @param nodes\n * @param allowedNames\n * @returns invalid variables\n */\nconst checkSymbolNodes = (nodes: math.MathNode, allowedNames: string[]) => {\n const symbolNodes = nodes.filter(n => isSymbolNode(n)) as math.SymbolNode[];\n const invalidVariables: string[] = [];\n\n for (const symbolNode of symbolNodes) {\n if (!allowedNames.includes(symbolNode.name)) {\n invalidVariables.push(symbolNode.name);\n }\n }\n\n // Distinct\n return invalidVariables.filter((v, i) => invalidVariables.indexOf(v) === i);\n};\n\n/**\n * Method to validate formula with defined variables\n * @param formula\n * @param variables\n * @param schema\n * @returns string errors\n */\nconst validateFormula = (\n formula: string,\n variables: CalculatedFieldVariable[]\n): string[] => {\n try {\n const node = math.parse(formula);\n node.compile();\n\n const invalidVariables = checkSymbolNodes(\n node,\n variables.map(x => x.name)\n );\n\n const invalidOperators = checkOperatorNodes(node);\n\n const invalidNumbers = checkConstantNodes(node);\n\n const variablesErrors = invalidVariables.map(\n name =>\n strings.formatString(\n strings.schemas.setup.calculated.errors.invalidFormulaVariable,\n name\n ) as string\n );\n\n const operatorsErrors = invalidOperators.map(\n name =>\n strings.formatString(\n strings.schemas.setup.calculated.errors.invalidFormulaOperator,\n name\n ) as string\n );\n\n const numbersErrors = invalidNumbers.map(\n name =>\n strings.formatString(\n strings.schemas.setup.calculated.errors.invalidFormulaConstant,\n name\n ) as string\n );\n\n const errors = [...operatorsErrors, ...variablesErrors, ...numbersErrors];\n\n return errors;\n } catch (ex) {\n return [strings.schemas.setup.calculated.errors.invalidFormula];\n }\n};\n\nconst validateVariable = (\n variable: CalculatedFieldVariable,\n allVariables: CalculatedFieldVariable[],\n options: CalculatedFieldVariableOption[]\n) => {\n const nameErrors: string[] = [];\n const fieldIdErrors: string[] = [];\n\n const field = options.find(\n x =>\n x.fieldId === variable.fieldId &&\n (!x.isTableField || x.columnId === variable.columnId)\n );\n\n if (!field) {\n fieldIdErrors.push(\n strings.schemas.setup.calculated.errors.invalidVariableField\n );\n }\n\n if (!variable.name) {\n nameErrors.push(\n strings.schemas.setup.calculated.errors.requiredVariableName\n );\n }\n\n if (allVariables.filter(x => x.name === variable.name).length > 1) {\n nameErrors.push(\n strings.schemas.setup.calculated.errors.duplicateVariableName\n );\n }\n\n if (\n variable.name.match(/[^A-Za-z0-9]/g) ||\n !isNaN(+variable.name) ||\n !isNaN(parseFloat(variable.name))\n ) {\n nameErrors.push(\n strings.schemas.setup.calculated.errors.invalidVariableName\n );\n }\n\n if (variable.name.length > 255) {\n nameErrors.push(strings.schemas.setup.calculated.errors.maxLength);\n }\n\n if (nameErrors.length > 0 || fieldIdErrors.length > 0) {\n return {\n fieldIdErrors,\n nameErrors\n };\n }\n};\n\nexport interface VariableErrors {\n [index: number]: {\n fieldIdErrors: string[];\n nameErrors: string[];\n };\n}\n/**\n * Method to validate variables\n * @param variables\n * @param schema\n * @returns maped variable errors {[variableName]: errors[]}\n */\nconst validateVariables = (\n variables: CalculatedFieldVariable[],\n fields: SchemaField[]\n): VariableErrors => {\n const errors: VariableErrors = {};\n const variablesWithIndex = variables.map((x, i): [\n CalculatedFieldVariable,\n number\n ] => [x, i]);\n const options = getVariableOptions(fields);\n\n for (const [variable, index] of variablesWithIndex) {\n const validationErrors = validateVariable(variable, variables, options);\n\n if (validationErrors) {\n errors[index] = validationErrors;\n }\n }\n\n return errors;\n};\n\nconst hasEstimatesVariables = ({\n variables,\n formula\n}: CalculatedFieldConfig) => {\n try {\n const estimateVariables = variables.filter(v => v.isEstimateField === true);\n\n const nodes = math.parse(formula);\n const originFormula = nodes.toString();\n\n for (const variable of estimateVariables) {\n renameSymbolNodes(nodes, variable.name, \"-\");\n }\n\n const formulaWithoutEstimates = nodes.toString();\n\n return originFormula !== formulaWithoutEstimates;\n } catch {\n return false;\n }\n};\n\nconst calculateAndFormat = (\n config: CalculatedFieldConfig,\n project: Pick,\n hasEstimatesAccess: boolean,\n round = true\n): string => {\n if (!hasEstimatesAccess && hasEstimatesVariables(config)) {\n return \"----\";\n }\n\n const value = calculate(config, project, hasEstimatesAccess, round);\n\n return formatNumberConstant(value);\n};\nconst calculate = (\n config: CalculatedFieldConfig,\n project: Pick,\n hasEstimatesAccess: boolean,\n round = true\n): number => {\n try {\n if (!hasEstimatesAccess && hasEstimatesVariables(config)) {\n return NaN;\n }\n\n const nodes = math.parse(config.formula);\n const fn = nodes.compile();\n\n const scope: Record = {};\n\n for (const variable of config.variables) {\n scope[variable.name] = getValueForField(project.fields, variable);\n }\n const result = fn.evaluate(scope);\n\n if (round) {\n return math.round(result, 2);\n }\n\n return result;\n } catch {\n return NaN;\n }\n};\n\nconst getValueForField = (\n projectFields: Record,\n variable: CalculatedFieldVariable\n) => {\n let variableField = variable.fieldId;\n\n if (variable.isTableField && variable.columnId) {\n variableField = `table-total-${variable.fieldId}-${variable.columnId}`;\n }\n\n return projectFields[variableField] || 0;\n};\n\nconst getConfig = (field: Pick) => {\n const config: CalculatedFieldConfig = field.config[\n \"calculatedFieldConfig\"\n ] || {\n variables: [],\n formula: \"\"\n };\n\n return config;\n};\n\nconst setCalculateFields = (\n fields: SchemaField[],\n project: Pick,\n hasEstimatesAccess: boolean\n) => {\n if (!project || !project.fields) {\n return;\n }\n\n for (const field of fields) {\n if (field.type !== SchemaFieldType.Calculated) {\n continue;\n }\n\n const config = getConfig(field);\n\n const calculatedValue = calculate(config, project, hasEstimatesAccess);\n\n project.fields[field.id] = calculatedValue;\n }\n};\n\nconst renameSymbolNodes = (\n nodes: math.MathNode,\n oldName: string,\n newName: string\n) => {\n const symbolNodes = nodes.filter(n => isSymbolNode(n)) as math.SymbolNode[];\n\n for (const node of symbolNodes) {\n if (node.name === oldName) {\n node.name = newName;\n }\n }\n};\n\nconst changeVariableName = (\n formula: string,\n oldName: string,\n newName: string\n): string => {\n try {\n const nodes = math.parse(formula);\n\n renameSymbolNodes(nodes, oldName, newName);\n\n return nodes.toString({\n handler: formatHandler\n });\n } catch (er) {\n return formula;\n }\n};\n\nconst putFieldValuesInFormula = (\n formula: string,\n variables: CalculatedFieldVariable[],\n project: Pick,\n hasEstimatesAccess: boolean,\n format: \"latex\" | \"text\" = \"latex\"\n): string => {\n try {\n const nodes = math.parse(formula);\n\n for (const variable of variables) {\n const dash = !hasEstimatesAccess && variable.isEstimateField;\n\n const variableValue = dash\n ? \"----\"\n : getValueForField(project.fields, variable);\n renameSymbolNodes(nodes, variable.name, (variableValue || 0).toString());\n }\n\n return format === \"latex\"\n ? nodes.toTex({\n handler: formatHandler\n })\n : nodes.toString({\n handler: formatHandler\n });\n } catch (er) {\n return formula;\n }\n};\n\nconst getVariableOptions = (\n fields: SchemaField[]\n): CalculatedFieldVariableOption[] => {\n const allowedFieldTypes = [\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Table\n ];\n\n const estimateFields = selectEstimatesFields(fields);\n const supportedProjectFields = fields\n .filter(f => allowedFieldTypes.includes(f.type))\n .filter(f => !f.lookup || estimateFields.indexOf(f) >= 0);\n\n const result: CalculatedFieldVariableOption[] = [];\n\n // All field types in same loop to keep origin order\n for (const field of supportedProjectFields) {\n if (field.type === SchemaFieldType.Table) {\n const tableColumnFields = getColumnFieldForTableFieldType(field);\n const tableVariableOptions: CalculatedFieldVariableOption[] = tableColumnFields.map(\n c => ({\n fieldId: field.id,\n isTableField: true,\n columnId: c.id,\n name: `[${field.name}] - '${c.name}' column`\n })\n );\n result.push(...tableVariableOptions);\n } else {\n result.push({\n fieldId: field.id,\n name: field.name,\n isEstimateField: estimateFields.indexOf(field) >= 0\n });\n }\n }\n\n return result;\n};\n\nconst getColumnFieldForTableFieldType = (tableField: SchemaField) => {\n if (\n !tableField.config ||\n !tableField.config[\"columns\"] ||\n tableField.config[\"columns\"].length === 0\n )\n return [];\n const columns = tableField.config.columns as SchemaField[];\n const columnsWithSumTurnedOn = columns.filter(\n col =>\n col.config && col.config[\"sumColumn\"] && col.config[\"sumColumn\"] === true\n );\n\n return columnsWithSumTurnedOn;\n};\n\nconst formatNumberConstant = (num: number): string => {\n if (isNaN(num)) {\n return \"\";\n }\n\n return Number.isInteger(num) ? num.toFixed(0) : num.toFixed(2);\n};\n// eslint-disable-next-line @typescript-eslint/ban-types\nconst formatHandler = (node: math.MathNode, options: object) => {\n if (isConstantNode(node)) {\n return formatNumberConstant(node.value);\n }\n\n if (isOperatorNode(node)) {\n node.implicit = false;\n }\n};\n\nconst convertFormulaToLatexFormat = (formula: string) => {\n try {\n const nodes = math.parse(formula);\n\n return nodes.toTex();\n } catch (er) {\n return \"\";\n }\n};\n\nconst tryFormatFormula = (formula: string) => {\n try {\n const nodes = math.parse(formula);\n\n return nodes.toString({\n handler: formatHandler\n });\n } catch (er) {\n return formula;\n }\n};\n\nexport const calculatedFieldService = {\n convertFormulaToLatexFormat,\n changeVariableName,\n validateFormula,\n validateVariables,\n putFieldValuesInFormula,\n calculate,\n setCalculateFields,\n getConfig,\n getVariableOptions,\n supportedOperators,\n tryFormatFormula,\n formatNumber: formatNumberConstant,\n hasEstimatesVariables,\n calculateAndFormat\n};\n","import React from \"react\";\nimport Avatar from \"react-avatar\";\n\ninterface AvatarProps {\n id?: string;\n name: string;\n [x: string]: any;\n}\n\nexport const CompanyAvatar = ({ id, name, ...rest }: AvatarProps) => {\n const color = id ? getAvatarColor(id) : \"#808080\";\n return (\n \n );\n};\n\nconst getCompanyInitials = (name: string) => {\n return `${name?.split(\"\")?.[0]?.toLocaleUpperCase() ?? \"-\"}${\n name?.split(\"\")?.[1]?.toLocaleUpperCase() ?? \"-\"\n }`;\n};\n\nexport const UserAvatar = ({ id, name, ...rest }: AvatarProps) => {\n const color = id ? getAvatarColor(id) : \"#808080\";\n return (\n \n );\n};\n\n/**\n * Function that generates a hash from a given userId and uses\n * that hash to generate a color in HSL string format. This is a\n * deterministic process.\n *\n * @param userId The user's id\n */\nfunction getAvatarColor(userId: string): string {\n let hash = 0;\n for (let i = 0; i < userId.length; i += 1) {\n hash = userId.charCodeAt(i) + ((hash << 5) - hash);\n }\n\n const hue = 0.5 * (hash % 720);\n let lum = 30 + (hash % 21);\n if (hue > 30 && hue < 200) lum -= 10;\n\n return `hsl(${hue}, 70%, ${lum}%)`;\n}\n\ntype GetAvatarColorFn = (userId: string) => string;\n","export const en = {\n errorBoundary: {\n title: \"An unexpected error occured.\",\n body:\n \"We have recorded the error and apologize for the inconvenience. Please try again.\",\n button: \"Return to Home Page\",\n sandbox: {\n title: \"SANDBOX: An unexpected error has occured.\",\n body:\n \"Sandbox mode has encountered an unexpected error, please reset or disable Sandbox mode.\",\n resetButton: \"Reset Sandbox\",\n disableButton: \"Disable Sandbox\"\n }\n },\n profile: {\n minorityStatusList: {\n added: \"Added certification\",\n errorAdded: \"Error adding certification\",\n saved: \"Certifications Saved\",\n errorSaved: \"Error when saving certifications. Try again later.\",\n updated: \"Certifications Updated\",\n errorUpdated: \"Error when updating certifications. Try again later.\",\n deleted: \"Certifications Deleted\",\n errorDeleted: \"Error when deleting certifications. Try again later.\",\n loading: \"Loading...\",\n noMinorityStatusHelpText: {\n title: \"No Certifications\",\n body:\n \"Certifications added to a profile can be used to include minority information about your company.\"\n },\n noMinorityStatusButtonText: \"Add Certification\",\n deleteConfirmation: \"Are you sure you want to delete?\",\n minorityStatus: {\n updated: \"Updated minority status\",\n errorUpdated: \"Error updating minority status\",\n deleted: \"Deleted minority status\",\n errorDeleted: \"Error deleting minority status\"\n }\n },\n mainDetails: {\n updated: \"Profile updated successfully.\",\n errorUpdated: \"Error updating profile.\"\n },\n logo: {\n updated: \"Image uploaded successfully\",\n errorUpdated: \"Error uploading image\",\n exceedSizeError: \"Image size can not exceed 2MB\",\n imageTypeError: \"Supported image formats are .bmp, .jpeg, and .png.\"\n }\n },\n contactManagement: {\n addCompanyModal: {\n title: 'Add Company',\n companyCode: 'Company Code',\n companyName: 'Company Name',\n cancel: 'Cancel',\n save: 'Save',\n saveAnd: 'Save and',\n edit: 'Edit'\n },\n contactSearchButton: {\n name: \"Contacts\"\n },\n contactSearchModal: {\n noData: {\n title: \"No results found\",\n body:\n \"Try searching for a contact by first name, last name, phone or email. You can also search by company name and code.\"\n },\n tabs: {\n contacts: \"CONTACTS\",\n companies: \"COMPANIES\"\n },\n searchBarPlaceholder: \"Search for contacts...\"\n },\n vendorDetails: {\n title: \"Main Details\",\n newTitle: \"Create New Company\",\n editTitle: \"Edit Details\",\n save: \"Save\",\n edit: \"Edit\",\n minorityStatusesHeading: \"Minority Statuses\",\n scopesHeading: \"Scopes\",\n notesHeading: \"Notes\",\n officeHeading: \"Office\",\n accountingCodeHeading: \"Accounting Code\",\n isBonded: \"Is Bonded\",\n bondRate: \"Bond Rate (%)\",\n HBAlternateOffice: \"(Alternate from HeavyBid)\",\n HBPrimaryOffice: \"(Primary from HeavyBid)\"\n },\n vendorEditDetail: {\n addOfficeButton: \"Add new office\",\n officeSectionTitle: \"Offices\",\n error: {\n title: \"Error Saving Company\",\n name: \"Office Nickname is required\"\n }\n },\n vendorLocationDetails: {\n nickname: \"Nickname\"\n },\n vendorList: {\n title: \"Company List\",\n addCompany: \"Add Company\",\n searchPlaceholder: \"Search Companies...\"\n },\n\n contactFields: {\n company: \"Company\",\n firstName: \"First Name\",\n lastName: \"Last Name\",\n title: \"Title\",\n email: \"Email Address\",\n phone: \"Phone Number\",\n cell: \"Cell Number\",\n mainContact: \"Main Contact\",\n notes: \"Notes\"\n },\n contactList: {\n saved: \"Contact Added!\",\n errorSaved: \"Error when saving contact. Try again later.\",\n errorMoved: \"Error when moving contact. Try again later.\",\n moveContact: \"Contact Moved!\",\n updated: \"Contact Saved!\",\n errorUpdated: \"Error when updating contact. Try again later.\",\n deleted: \"Contact Removed!\",\n errorDeleted: \"Error when deleting contact. Try again later.\",\n emailError: \"Please enter a valid email address.\",\n title: \"Contacts List\",\n loading: \"Loading...\",\n noContactsHelpText: {\n title: \"No Contacts\",\n body: \"Contacts added to a Company can be linked to a Project\"\n },\n noContactsButtonText: \"Add Contact\",\n deleteConfirmation: \"Are you sure you want to delete {0}?\",\n commandButton: {\n name: \"Manage\",\n edit: \"Edit\",\n move: \"Move\",\n sync: \"Sync\",\n delete: \"Delete\"\n },\n buttonTitle: {\n addEdit: \"Add Edit Contact\",\n move: \"Move Contact\",\n sync: \"Sync Contact\",\n delete: \"Delete Contact\"\n },\n visitContact: \"Visit Contact\",\n searchPlaceholder: \"Search Contacts...\"\n },\n contactListModal: {\n modalAddTitle: \"Add Contact\",\n modalEditTitle: \"Edit Contact\",\n buttonAdd: \"Add\",\n buttonSave: \"Save\",\n buttonCancel: \"Cancel\",\n emptyLocationsText: \"Please edit Company details to add an Office\",\n emptyScopeOfWorksText:\n \"To add a new option: type a value, press Enter\",\n officeLabel: \"Office\",\n scopesLabel: \"Scopes\",\n placeholders: {\n firstName: \"First Name\",\n lastName: \"Last Name\",\n title: \"Title\",\n email: \"Email\",\n cell: \"Cell Number\",\n phone: \"Phone Number\",\n notes: \"Notes\",\n mainContact: \"Main Contact\",\n office: \"Office\",\n }\n },\n contactListMoveContactModal: {\n moveContact: \"Move\",\n toCompany: \"To Company:\",\n fromCompany: \"From Company:\",\n buttonMove: \"Move\",\n buttonCancel: \"Cancel\",\n removingProductsAlert:\n \"The following scopes will be removed from the contact because the destination company does not have these scopes set:\",\n removingOneProductAlert:\n \"The following scopes will be removed from the contact because the destination company does not have the scope set:\"\n },\n contactListSyncContactModal: {\n title: `Syncing {0} {1}`,\n message: `Syncing this contact will cause this contact’s information on ALL\n projects to be updated. Are you sure you want to proceed?`,\n button: {\n sync: \"Sync Contact\",\n cancel: \"Cancel\"\n }\n },\n minorityStatusList: {\n saved: \"Minority Status Saved\",\n errorSaved: \"Error when saving minority status. Try again later.\",\n updated: \"Minority Status Updated\",\n errorUpdated: \"Error when updating minority status. Try again later.\",\n deleted: \"Minority Status Deleted\",\n errorDeleted: \"Error when deleting minority status. Try again later.\",\n loading: \"Loading...\",\n noMinorityStatusHelpText: {\n title: \"No Minority Status\",\n body:\n \"Minority statuses added to a company can be used to track minority goals on projects and estimates.\"\n },\n noMinorityStatusButtonText: \"Add Minority Status\",\n deleteConfirmation: \"Are you sure you want to delete?\"\n },\n minorityTypeModal: {\n columnsName: {\n code: \"Code\",\n description: \"Description\"\n },\n title: \"Create Minority Type\",\n buttonAdd: \"Add\",\n buttonCancel: \"Cancel\",\n validation: {\n codeRequiredText: \"Code is required\",\n descriptionRequiredText: \"Description is required\"\n },\n errorUpdated: \"Error updating minority type. Try again later.\",\n errorCreated: \"Error creating minority type. Try again later.\",\n confirmBack:\n \"You have unsaved changes. Are you sure you want to continue?\"\n },\n scopeOfWorkModal: {\n columnsName: {\n code: \"Code\",\n description: \"Description\"\n },\n confirmBack:\n \"You have unsaved changes. Are you sure you want to continue?\"\n },\n notInBU: `The company you tried to access is not in your current Business Unit.`,\n noDataPlaceholder: {\n office: {\n title: \"No Offices\",\n buttonText: \"Add new office\"\n },\n minorityStatus: {\n title: \"No Minority Statuses\",\n body:\n \"To add a Minority Status to this company, first hit 'Save' on the new vendor with the 'Code' field filled out\"\n }\n },\n companySetup: {\n title: \"Company Setup\",\n minorityTypeHeader: \"Minority Types\",\n minorityType: {\n success: {\n added: \"Minority Type Added!\",\n updated: \"Minority Type Saved!\"\n },\n errors: {\n created: \"Error creating product type. Try again later.\",\n updated: \"Error updating product type. Try again later.\",\n deleted: \"Error deleting product type. Try again later.\",\n duplicated: \"Minority type with code '{0}' already exists.\"\n }\n },\n productType: {\n header: \"Scopes of Work\",\n success: {\n added: \"Scope of Work Added!\",\n updated: \"Scope of Work Saved!\"\n },\n errors: {\n created: \"Error creating product type. Try again later.\",\n updated: \"Error updating product type. Try again later.\",\n deleted: \"Error deleting product type. Try again later.\",\n duplicated: \"Scope of work with code '{0}' already exists.\",\n }\n }\n },\n import: {\n placeholder: \"Please drop your file here or click to select\",\n selectedFile: \"Selected File\",\n sheetSelector: \"Sheet Selector\",\n settings: {\n defaultCompanyCode: {\n label: \"Default Company Code\",\n options: {\n fullName: \"Full Company Name\",\n first12: \"First 12 characters of Company Name\"\n }\n },\n companyExist: {\n label: \"If a company record in the sheet already exists?\",\n options: {\n skip: \"Skip\",\n overwrite: \"Overwrite\",\n }\n },\n contactExist: {\n label: \"If a contact record in the sheet already exists?\",\n options: {\n skip: \"Skip\",\n overwrite: \"Overwrite\",\n }\n },\n\n },\n acceptedFiles: \"Accepted file formats: .xls, .xlsx, .csv.\",\n rowLimit: \"Limit to 1000 rows.\",\n validationErrors: {\n name: \"Company Name is required. This row will be skipped.\",\n nickname: \"Office Nickname is required when mapping address fields. This row will be skipped.\",\n email:\n \"Row #{0} has an invalid email address. Email address must include '@' and a domain name (example@example.com).\"\n },\n importMapping: {\n requiredField: \"Required for new and existing records.\",\n requiredForNewRecords: \"Required for new records.\",\n requiredForExistRecords: \"Required for existing records.\",\n requiredNicknameField: \"This field is required if address, city, zip code, state/province, or country are mapped.\",\n requiredStateProvinceField: \"The U.S. State or Canadian Province for the address.\",\n booleanAcceptableValues: \"Acceptable values: Y/N, Yes/No, True/False, T/F, 1/0\",\n contactMethodAcceptableValues: \"Acceptable values: Email, Phone\",\n columnTitles: {\n companyCode: \"Company Code\",\n companyName: \"Company Name\",\n companyWebsite: \"Company Website\",\n companyType: \"Company Type\",\n companyNotes: \"Company Notes\",\n firstName: \"First Name\",\n lastName: \"Last Name\",\n title: \"Title\",\n email: \"Email Address\",\n cellNumber: \"Cell Number\",\n phoneNumber: \"Phone Number\",\n notes: \"Contact Notes\"\n }\n },\n prevalidation: {\n error: \"Error\",\n title: \"Pre-Import Contact Validations\",\n copyBtn: \"Copy\",\n row: \"Row\",\n message: \"Message\",\n rowLimitError: \"Contact imports are limited to 1000 rows at a time. Please upload a file with 1000 rows or less and try again.\",\n },\n importResult: {\n importingLabel: \"Importing...\",\n completeLabel: \"Import Complete!\",\n validationsTitle: \"Contact Validations\",\n companiesCreated: \"Companies created:\",\n companiesUpdated: \"Companies updated:\",\n contactsCreated: \"Contacts created:\",\n contactsUpdated: \"Contacts updated:\"\n }\n }\n },\n estimates: {\n active: \"Active\",\n archived: \"Archived\",\n recent: \"Recent\",\n synced: \"Synced\",\n title: \"Estimates\",\n editTitle: \"Edit Archived Estimates\",\n estimateAnalysis: \"Estimate Analysis\",\n keyIndicators: \"Key Indicators\",\n estimateDetails: \"Estimate Details\",\n estimateInformation: \"Estimate Information\",\n estimateLocation: \"Estimate Location\",\n estimateExcluded: \"Exclude Estimate\",\n quoteManagement: \"Quote Management\",\n quoteSummary: \"Quote Summary\",\n dashboard: \"Dashboard\",\n solicitationDashboard: \"Solicitation Dashboard\",\n quoteInbox: \"Quote Inbox\",\n createSolicitation: \"Create Solicitation\",\n createQuoteProposal: \"Create Quote Proposal\",\n drafts: \"Drafts\",\n sent: \"Sent\",\n vendorCommunication: \"Vendor Communication\",\n noReports: \"Reports are not yet available for this estimate\",\n noEstimatesTitle: \"We couldn't find any solicitations for this Estimate\",\n noEstimatesHelperText: `Select Create Solicitation in the left menu to start populating\\nthis Quote Management dashboard`,\n reporting: \"Reporting\",\n materials: \"Materials\",\n allReports: {\n unavailable: {\n title: \"No Reports Available\",\n text:\n \"The estimate is currently syncing, reports will be ready upon completion.\"\n },\n notFound: {\n title: \"No Reports Found\",\n text:\n \"No reports could not be found for the current estimate. Try re-syncing this estimate.\"\n }\n },\n reportDownload: \"Download the PDF\",\n cost: \"Cost\",\n costDescription:\n \"The Cost report shows the costs for each biditem broken down by activity and cost type.\",\n costAndPrice: \"Cost and Price\",\n costAndPriceDescription:\n \"A summary report displaying a complete cost and price breakdown for each biditem.\",\n estimateRecap: \"Estimate Recap\",\n estimateRecapDescription:\n \"The Estimate Recap report shows you how bid/takeoff differences and bid price unbalancing affect the estimate. It also allows you to review cost totals and percentages for each cost type.\",\n reportsHelpText: \"Reports are current as of\",\n showAll: \"Show All\",\n hideAll: \"Hide All\",\n close: \"Close\",\n showHideColumns: \"Show/Hide Columns\",\n adjustFilters: \"Adjust Filters\",\n addFilters: \"Add Filters\",\n selectFilters: \"Select Filters\",\n activeEstimates: \"Active Estimates\",\n activeEstimateTotal: \"Active Estimate Total\",\n archivedEstimates: \"Archived Estimates\",\n archivedEstimateTotal: \"Avg Archived Estimate\",\n activeEstimateLocations: \"Active Estimate Locations\",\n noLocationFound: \"No Location Found\",\n codebooks: {\n title: \"Codebooks Dashboard\",\n reportTitle: \"Report:\",\n division: \"HeavyBid Division:\",\n lastUpdateCodebook: \"Codebook data last uploaded:\",\n lastUpdateEstimate: \"Estimate data last uploaded:\",\n datePicker: {\n title: \"Include Estimates From:\",\n placeholder: \"Select a date range...\",\n last3Months: \"Last 3 months\",\n last6Months: \"Last 6 months\",\n lastYear: \"Last 12 months\",\n custom: \"Custom\"\n },\n unused: {\n subtitle: \"Unused\",\n text: \"Activity Codebook Codes that have not been used in an estimate\",\n pageTitle: \"Unused Activity Codebook Codes\",\n noUnusedCodes: \"There are no unused Activity Codebook Codes in the Activity Codebook\",\n noMatchingFilters: \"No Activity Codebook Codes are available with the current filters\"\n },\n utilized: {\n subtitle: \"Utilized\",\n text: \"Activity Codebook Codes used or modified in an estimate\",\n pageTitle: \"Activity Codebook Codes Used in an Estimate\",\n tip: \"Click a row to view details\",\n pageTitle2: \"Modifications to Activity Code\",\n noUtilized: \"No Activity Codebook Codes have been utilized\",\n noMatchingFilters: \"No Activity Codebook Codes are available with the current filters\",\n noModifications: \"No modifications have been made\",\n noMatchingSearch: \"No Activities are available with the current filters\"\n },\n missing: {\n subtitle: \"Missing\",\n text: \"Activity Codes that are missing from the Activity Codebook\",\n pageTitle: \"Activities missing from the Activity Codebook\",\n noMissingActivities: \"There are no Activities missing from the Activity Codebook\",\n noMatchingFilters: \"No Activities are available with the current filters\"\n },\n columnNames: {\n activityCode: \"Activity Code\",\n codebookCode: \"Codebook Code\",\n description: \"Description\",\n unit: \"Unit\",\n level: \"Level\",\n estimateCode: \"Estimate\",\n biditemCode: \"Biditem\",\n activityCodebookCode: \"Codebook Code\",\n lastUpdate: \"Last Updated\",\n lastModified: \"Last Modified\"\n },\n schema: {\n name: \"Activity Codebooks\",\n codebookCode: \"Codebook Code\",\n codebookDescription: \"Description\",\n codebookUnits: \"Unit\",\n codebookLevel: \"Level\",\n codebookModifiedCount: \"Times Modified\",\n codebookPartitionId: \"Partition Id\",\n codebookLastUpdate: \"Last Updated\",\n codebookTimesUsed: \"Times Used\",\n codebookTimesModified: \"Times Modified\",\n activityCode: \"Activity Code\",\n activityDescription: \"Activity Description\",\n activityUnits: \"Activity Units\",\n activityLastModified: \"Last Modified\",\n activityPartitionId: \"Partition Id\",\n biditem: \"Biditem Code\",\n estimate: \"Estimate Code\",\n },\n iconAlt: \"Codebooks\",\n reportOverflow: \"Maximum number of records reached. Please narrow date range to include all results.\",\n },\n noLocationFoundHelpText:\n \"Either your estimate has no location information, or we were unable to obtain latitude and longitude with the information provided.\",\n gettingStarted: {\n title: \"Accessing Estimating Data\",\n text1:\n \"To access estimating data, it is now required that you have the 'HeavyBid Insights' subscription in HCSS Credentials. Steps to get started can be accessed in the HCSS Help Center.\",\n instructions:\n \"You don't have permission to view Estimate Insights. This can be configured by an admin in the User Admin page.\",\n buttonIconTitle: \"Get Started Now\"\n },\n notInBU: `The estimate you tried to access is not in your current Business Unit.`,\n customizeReporting: {\n customizeActivityTotals: \"Customize Activity Totals\",\n save: \"Save\",\n activityTotals: \"Activity Totals\",\n placeholder: {\n button: \"Add a total\",\n title: \"Add Activity Totals\",\n body:\n \"This page will allow you to add a custom Activity Total formula. By specifying an expression, unit, and matching style, you will be able to see the Quantity and Cost totals for Activity codes that match what you enter across all of your synced and archived HeavyBid estimates.\"\n },\n name: \"Name\",\n nameRequired: \"Name is required\",\n expression: \"Expression\",\n expressionRequired: \"Expression is required\",\n unit: \"Unit\",\n unitRequired: \"Unit is required\",\n formulaMatch: {\n startsWith: \"Starts with\",\n exactlyMatches: \"Exactly matches\"\n }\n },\n estimateTypeSelectorOptions: {\n synced: \"Synced Estimates\",\n archived: \"Archived Estimates\",\n all: \"All Estimates\"\n }\n },\n keyIndicators: {\n placeholder: \"Search KPIs\",\n settings: \"Settings\",\n kpiDisplay: \"Display KPIs marked as\",\n classification: \"Classification\",\n search: \"Search\",\n normal: \"Normal\",\n warning: \"Warning\",\n outlier: \"Outlier\",\n na: \"N/A\",\n allKpis: \"Total KPIs\",\n kpisByCategory: \"KPIs by Category\",\n help: \"Help\",\n noCustomBody: \"Sync your custom KPIs from HeavyBid to see them here.\",\n breakdownModal: {\n title: \"Source Data\",\n close: \"Close\",\n },\n table: {\n currentValue: \"Current Value\",\n normalRange: \"Normal Range\",\n plot: \"Plot\",\n name: \"Name\",\n calculationDetails: \"Calculation Details\",\n noVariance: \"Unable to chart. No variance in normal range.\",\n noData: \"There are no KPIs to display with the current filters.\",\n allKpisHidden:\n \"There are no KPIs selected. Please select one or more KPIs to display KPI data.\"\n },\n categories: {\n labor: \"Labor\",\n equipment: \"Equipment\",\n material: \"Material\",\n subcontract: \"Subcontract\",\n markup: \"Markup\",\n other: \"Other\",\n custom: \"Custom\",\n laborAndEquipment: \"Labor and Equipment\"\n },\n estimate: \"1 Estimate used for KPI Analysis\",\n estimates: \"{0} Estimates used for KPI Analysis\"\n },\n vendorCommunication: {\n columns: {\n vendorCode: \"Vendor Code\",\n vendorName: \"Vendor Name\",\n action: \"Last Activity\",\n timeStamp: \"Date of Last Activity\",\n minorityType: \"Minority Type\",\n email: \"Contact\",\n solicitationName: \"Solicitation Name\",\n projectName: \"Project Name\"\n },\n manualModal: {\n phoneCallMade: \"Made Phone Call\",\n phoneCallReceived: \"Received Phone Call\",\n emailSent: \"Sent Email\",\n emailReceived: \"Received Email\",\n faxSent: \"Sent Fax\",\n faxReceived: \"Received Fax\",\n mailSent: \"Sent Mail\",\n mailReceived: \"Received Mail\",\n inPerson: \"In Person Meeting\",\n communicationSuccess: \"Communication recorded successfully\",\n communicationError: \"Unable to record communication\",\n title: \"Record Communication\",\n type: \"Communication Type\",\n date: \"Date of Communication\",\n vendor: \"Vendor\",\n estimate: \"Estimate\",\n projectName: \"Project Name\",\n contactInfo: \"Contact Information\",\n firstName: \"First Name\",\n lastName: \"Last Name\",\n email: \"Email\",\n message: \"Message\",\n cancel: \"Cancel\",\n submit: \"Submit\",\n previewReport: \"Preview Report\"\n },\n details: {\n recordCommunication: \"Record Communication\",\n print: \"Print\",\n vendor: \"Vendor\",\n project: \"Project\",\n minorityType: \"Minority Type\",\n communicationDetails: \"Communication Details\"\n },\n timeline: {\n eventHistory: \"Event History\",\n filters: \"Filters\",\n filterContent: \"Filter Content\",\n clickToExpand: \"Click to expand...\",\n initial: \"an initial solicitation\",\n followUp: \"a followup solicitation\",\n addendum: \"an addendum\",\n noName: \"no name\",\n solicitation: {\n initial: {\n base: \"{0} {1} sent {2} {3} from {4} an initial solicitation ({5}).\",\n special:\n \"{0} {1} sent {2} {3} from {4} an initial solicitation (no name).\"\n },\n followUp: {\n base: \"{0} {1} sent {2} {3} from {4} a follow-up solicitation ({5}).\",\n special:\n \"{0} {1} sent {2} {3} from {4} a follow-up solicitation (no name).\"\n },\n addendum: {\n base: \"{0} {1} sent {2} {3} from {4} an addendum ({5}).\",\n special: \"{0} {1} sent {2} {3} from {4} an addendum (no name).\"\n }\n },\n sub: {\n accepted: \"{0} has indicated they will be bidding on this project\",\n rejected: \"{0} has indicated they will not be bidding on this project\",\n submittedPrices: \"{0} submitted a quote for {1}\"\n },\n gc: {\n reviewed: \"{0} {1} reviewed a quote for {2}\",\n markedAsUnread: \"{0} {1} has marked a quote as unread\",\n rejected: \"{0} {1} rejected a quote for {2}\",\n manuallyRejected:\n \"{0} {1} chose to manually enter these quote prices directly into HeavyBid.\",\n queuedForSync: \"{0} {1} queued a quote for {2} to sync with HeavyBid.\"\n },\n manual: {\n phoneCall: {\n sent: \"{0} {1} made a phone call to {2} {3}\",\n received: \"{0} {1} received a phone call from {2} {3}\"\n },\n email: {\n sent: {\n base: \"{0} {1} sent an email to {2} {3} ({4})\",\n special: \"{0} {1} sent an email to {2} {3} (no email provided)\"\n },\n received: {\n base: \"{0} {1} received an email from {2} {3} ({4})\",\n special:\n \"{0} {1} received an email from {2} {3} (no email provided)\"\n }\n },\n fax: {\n sent: \"{0} {1} sent a fax to {2} {3}\",\n received: \"{0} {1} received a fax from {2} {3}\"\n },\n mail: {\n sent: \"{0} {1} sent mail to {2} {3}\",\n received: \"{0} {1} received mail from {2} {3}\"\n },\n meeting: \"{0} {1} met in person with {2} {3}\",\n gcEnteredPricesForSub:\n \"{0} {1} entered prices on behalf of the subcontractor\"\n },\n unknownAction: \"Unknown event action\",\n will: \"will\",\n willNot: \"will not\"\n },\n report: {\n vendor: \"Vendor:\",\n bidding: \"Bidding?:\",\n yes: \"Yes\",\n no: \"No\",\n unknown: \"Unknown\",\n minority: \"Minority:\",\n action: \"Action\",\n actions: {\n sentInitialSolicitation: \"Sent initial solicitation invite\",\n sentFollowUpSolicitation: \"Sent follow-up solicitation invite\",\n sentAddendumSolicitation: \"Sent addendum solicitation invite\",\n subAcceptedInvite: \"Subcontractor accepted invitation\",\n subRejectedInvite: \"Subcontractor rejected invitation\",\n subSubmittedPrices: \"Subcontractor submitted prices\",\n gcRejectedPrices: \"General contractor rejected prices\",\n gcReviewedPrices: \"General contractor reviewed prices\",\n madePhoneCall: \"Made phone call\",\n receivedPhoneCall: \"Received phone call\",\n sentEmail: \"Sent email\",\n receivedEmail: \"Received email\",\n sentFax: \"Sent fax\",\n receivedFax: \"Received fax\",\n sentMail: \"Sent mail\",\n receivedMail: \"Received mail\",\n inPersonMeeting: \"Met in person\",\n gcEnteredPricesForSub:\n \"General contractor entered prices on behalf of subcontractor\",\n gcReconsideredPrices:\n \"General contractor marked rejected quote as Unread\",\n gcReconsideredManuallyEnteredPrices:\n \"General contractor marked manually entered quote as Unread\",\n gcManuallyEnteredPrices:\n \"General Contractor manually entered quote prices into HeavyBid\",\n gcQueuedForSync: \"General Contractor queued quote for sync to HeavyBid\",\n default: \"Last communicated\"\n },\n description: \"Description/Message\",\n dateTime: \"Date/Time\",\n vendorContact: \"Vendor Contact\",\n user: \"User\",\n code: \"Estimate Code:\",\n linkedEstimate: \"Linked Estimate:\",\n name: \"Estimate Name:\",\n owner: \"Owner:\",\n bidDate: \"Bid Date:\",\n title: \"Communication Report\",\n vendorComTitle: \"Vendor Communication Report\",\n preview: \"Communication Report - Preview\",\n vendorPreview: \"Vendor Communication Report - Preview\",\n back: \"Back\"\n }\n },\n isRequired: \"{0} is required.\",\n estimateInfo: {\n state: \"State:\",\n lastSync: \"Last Sync:\",\n keyDates: \"Key Dates:\",\n reviewDate: \"Review Date:\",\n bidDate: \"Bid Date:\",\n startDate: \"Start Date:\",\n totals: \"Totals\",\n totalCost: \"Total Cost:\",\n bidTotal: \"Bid Total:\",\n title: \"Estimate Information\",\n lastSummaryRunOn: \"Last Summary Run On:\",\n lastSpreadRunOn: \"Last Spread Run On:\"\n },\n estimateTable: {\n linkEstimates: \"Link Estimates\",\n noLinkedEstimates: \"No Linked Estimates to display\"\n },\n estimateModal: {\n title: \"Link Estimates\",\n activeEstimates: \"Active Estimates\",\n errorLoading:\n \"There was a problem loading your estimates. Please refresh the page.\",\n loading:\n \"Estimates are currently loading. This may take a few minutes the first time.\",\n columns: {\n code: \"Estimate Code\",\n name: \"Estimate Name\",\n bidDate: \"Bid Date\",\n lastModified: \"Last Updated\",\n isActiveEstimate: \"Active Estimate\"\n }\n },\n quoteProposal: {\n notifications: {\n drafts: {\n success: \"Successfully deleted draft\",\n error: \"Unable to delete draft\"\n }\n },\n deleteConfirmationName: \"Are you sure you want to delete {0}?\",\n deleteConfirmationNoName: \"Are you sure you want to delete (no name)?\",\n draftQuotes: \"Draft Quotes\",\n sentQuotes: \"Sent Quotes\",\n columns: {\n name: \"Name\",\n createdDate: \"Date Created\",\n dueDate: \"Date Due\",\n vendors: \"Vendors\",\n type: \"Type\",\n code: \"Code\",\n description: \"Description\",\n email: \"Email\",\n minorityType: \"Minority Type\",\n url: \"URL\",\n estimator: \"Estimator\",\n vendorCode: \"Vendor Code\",\n vendorName: \"Vendor Name\",\n lastName: \"Last Name\",\n firstName: \"First Name\",\n phoneNumber: \"Phone Number\"\n },\n links: {\n noDataText: \"Add External Links\"\n },\n contacts: {\n removeContact: \"Remove Contact\",\n chooseContact: \"Choose Contact\",\n addContact: \"Add Contact\"\n },\n preview: {\n notifications: {\n emailError: \"Error sending emails. Please try again.\"\n },\n personalEmail: \"Personal email account\",\n viaBusinessUnitEmail: \"via business unit email account\",\n viaOtherEmail: \"via <{0}>\",\n loading: \"Loading...\",\n sendingEmail: \"Sending email...\",\n useCompanyEmail: \"Use your company personal email account\",\n personalEmailNeedsAttention:\n \"Your personal email account needs attention\",\n sendPreview: \"Send Proposal Preview\",\n cancel: \"Cancel\",\n sendAll: \"Send All\",\n sendingFrom: \"Sending From\",\n sendingTo: \"Sending To\",\n emailSubject: \"Email Subject\",\n emailSubjectRequired: \"Email subject is required.\",\n emailPreview: \"Email Preview\",\n proposalPreview: \"Proposal Preview\",\n loadingPreview: \"Loading Preview...\",\n quoteProposalFor: `Quote Proposal for \"{0}\"`,\n quoteProposal: \"Quote Proposal\"\n },\n projectDetails: {\n code: \"Project Code\",\n codeRequired: \"Project code is required.\",\n name: \"Project Name\",\n nameRequired: \"Project Name is required.\",\n location: \"Project Location\"\n },\n setup: {\n emailsSentSuccessfully: \"Successfully sent emails!\",\n createProposal: \"Create Proposal\",\n bidDate: \"Bid Date\",\n startDate: \"Start Date\",\n previewAndSend: \"Preview & Send\",\n copyProposal: \"Copy Proposal\",\n contactDetails: \"Contact Details\",\n proposalDetails: \"Proposal Details\",\n enterPrices: \"Enter Prices\",\n projectDetails: \"Project Details\",\n folders: \"Folders\",\n chooseFolders: \"Choose Folders\",\n recipients: \"Recipients\",\n chooseVendors: \"Choose Vendors\",\n atLeastOneVendor: \"Must select at least 1 vendor\",\n atLeastOnePrice: \"Must enter prices for at least 1 item\",\n externalLinks: \"External Links\",\n addHCSSPlans: \"Add HCSS Plans\",\n addLinks: \"Add Links\",\n attachments: \"Attachments\",\n uploadFiles: \"Upload Files\",\n excelDropdownPlaceHolder: \"Export\",\n confirmBack:\n \"You have unsaved changes. Are you sure you want to continue?\",\n savingDraft: \"Saving Draft\",\n saveDraft: \"Save Draft\",\n proposalItems: \"Proposal Items\",\n noPricesHelpText: {\n title: \"No Items\",\n body: \"At least 1 item must be added to the quote proposal.\"\n },\n noAttachmentsHelpText: {\n title: \"No Attachments\",\n body: \"It is optional to add attachments.\"\n }\n },\n attachments: {\n notifications: {\n linkCopied: {\n title: \"Copied!\",\n message: \"Link copied to clipboard\"\n }\n },\n uploadFiles: \"Upload Files\"\n },\n details: {\n initialProposal: \"Initial Proposal\",\n followUp: \"Follow Up\",\n addendum: \"Addendum\",\n quoteNotes: \"Proposal Notes\",\n // proposalType: \"Proposal Type\",\n typeRequired: \"Quote type is required.\",\n quoteName: \"Proposal Name\",\n nameRequired: \"Quote name is required.\",\n priceExpiration: \"Price Expiration Date\",\n priceExpirationRequired: \"Price expiration date is required.\",\n firstName: \"First Name\",\n firstNameRequired: \"Contact first name is required.\",\n lastName: \"Last Name\",\n lastNameRequired: \"Contact last name is required.\",\n email: \"Email\",\n phone: \"Phone\",\n recipients: \"Recipients\",\n contactsRequired:\n \"At least one contact is required. All contacts must have valid emails.\",\n contactsPlaceholder: \"Click here...\",\n addContact: \"Add Contact\",\n sendRepliesTo: \"Send Replies To...\",\n noEmailProvided: \"(no email)\",\n receiveProposal: \"Mark as Read\",\n statusTitleQuestion:\n \"Let {0} know you have received this quote proposal?\",\n statusTitleReceived: \"A read receipt has been sent to {0}.\",\n statusToolTipReceived:\n \"The sender has been notified that you have read the proposal they sent you.\"\n },\n import: {\n importExcel: \"Import Prices from Excel\",\n importExcelQP: \"Import Items from Excel\",\n step1: \"STEP 1. Download the import template.\",\n step2: \"STEP 2. Import the Excel file.\",\n subTextQP1: \"Enter items and their unit prices into Excel. Save file.\",\n subTextQP2: \"Select the file to import the items and their unit prices.\",\n subText1: \"Enter unit prices in Excel for any item you want to quote.\",\n subText3: \"Add new items on blank rows, if needed. Save file.\",\n subText2:\n \"Select the file to import the unit prices for the requested items and all fields for newly added items.\",\n close: \"Close\",\n selectFile: \"SELECT FILE\",\n download: \"DOWNLOAD\",\n importXlHeader1:\n \"Enter Unit Price for requested items you intend to quote. DO NOT edit Description for requested items.\",\n importXlHeader2:\n \"Enter Description, Quantity, Unit, and Unit Price for any NEW items.\",\n importXlHeader3:\n \"When you import this saved file, all of these items will overwrite the items listed in the proposal.\"\n },\n prices: {\n addPrices: \"Add Price\"\n },\n review: {\n title: \"Quote Proposal Review\",\n priceExpiration: \"Price Expiration Date\",\n sentTo: \"Sent To\",\n sentFrom: \"Sent From\",\n code: \"Code\",\n name: \"Name\",\n location: \"Location\",\n jobDetails: \"Job Details\"\n }\n },\n solicitations: {\n notifications: {\n drafts: {\n success: \"Successfully deleted draft\",\n error: \"Unable to delete draft\"\n }\n },\n deleteConfirmationName: \"Are you sure you want to delete {0}?\",\n deleteConfirmationNoName: \"Are you sure you want to delete (no name)?\",\n draftSolicitations: \"Draft Solicitations\",\n sentSolicitations: \"Sent Solicitations\",\n columns: {\n solName: \"Solicitation Name\",\n name: \"Name\",\n createdDate: \"Date Created\",\n dueDate: \"Date Due\",\n estimateId: \"Estimate Code\",\n projectName: \"Project Name\",\n vendors: \"Vendors\",\n type: \"Type\",\n code: \"Code\",\n description: \"Description\",\n email: \"Email\",\n minorityType: \"Minority Type\",\n url: \"URL\",\n folder: \"Folder\",\n estimator: \"Estimator\",\n folderNotes: \"Folder Notes\",\n vendorCode: \"Vendor Code\",\n vendorName: \"Vendor Name\",\n lastName: \"Last Name\",\n firstName: \"First Name\",\n phoneNumber: \"Phone Number\"\n },\n links: {\n noDataText: \"Add External Links\"\n },\n vendors: {\n removeVendor: \"Remove Vendor\",\n chooseVendors: \"Choose Vendors\"\n },\n folders: {\n noFolders: \"No Folders\",\n noFolderInfo:\n \"Invitations sent without folders/items will include project information, external links, files, and the solicitation details entered above.\",\n chooseFolders: \"Choose Folders\",\n removeFolder: \"Remove Folder\",\n material: \"Material\",\n subcontractor: \"Subcontractor\"\n },\n preview: {\n notifications: {\n emailError: \"Error sending emails. Please try again.\"\n },\n personalEmail: \"Personal email account\",\n viaBusinessUnitEmail: \"via business unit email account\",\n viaOtherEmail: \"via <{0}>\",\n genericEmail: \"Generic email ({0})\",\n loading: \"Loading...\",\n sendingEmail: \"Sending email...\",\n useCompanyEmail: \"Use your company personal email account\",\n personalEmailNeedsAttention:\n \"Your personal email account needs attention\",\n sendPreview: \"Send Solicitation Preview\",\n cancel: \"Cancel\",\n sendAll: \"Send All\",\n sendingFrom: \"Sending From\",\n sendingTo: \"Sending To\",\n emailSubject: \"Email Subject\",\n emailSubjectRequired: \"Email subject is required.\",\n emailPreview: \"Email Preview\",\n loadingPreview: \"Loading Preview...\",\n quoteRequestFor: `Quote request for \"{0}\"`,\n quoteRequest: \"Quote request\",\n emailNote: \"Email Note\",\n emailNoteLimit: \"Limited to 200 characters.\",\n emailNotePlaceholder: `Enter a short note for all vendors in this solicitation.\\nThis note will appear in the quote solicitation email & it is limited to 200 characters. `\n },\n solicitationSetup: {\n code: \"Project Code\",\n codeRequired: \"Project code is required.\",\n name: \"Project Name\",\n nameRequired: \"Project Name is required.\",\n location: \"Project Location\",\n header1: \"Project\",\n header2: \"Estimate\",\n addNewProject: \"Add New Project\",\n detailsBelow:\n \"The project details below will display on the sent solicitation...\",\n projectHelp1:\n \"This list is populated by the projects from Project Tracking.\",\n projectHelp2:\n \"You can quickly add a project by selecting the link to the right. \",\n projectHelp3: \"A project name is required to send a quote solicitation.\",\n estHelp1:\n \"Selecting an estimate is optional. But if you want to send out quote folder items in the solicitation, you must select the estimate so that the quote folders will be available.\",\n estHelp2:\n \"This list is populated by the active estimates available to you.\",\n estHelp3: `An active estimate is a HeavyBid estimate where you’ve enabled the estimate preference for Estimate History and have synced the quote items to this website.`,\n helpText3Est:\n \"The current estimate and project must be linked for the solicitation to be sent.\",\n addProjectButtonText: \"Add new project\",\n linkWarning:\n \"The project you have selected is not yet linked to the selected estimate. Would you like to link them?\",\n linkWarningEst:\n \"The new project you have created is not yet linked to the current estimate. Would you like to link them?\"\n },\n setup: {\n emailsSentSuccessfully: \"Successfully sent emails!\",\n createSolicitation: \"Create Solicitation\",\n bidDate: \"Bid Date\",\n startDate: \"Start Date\",\n previewAndSend: \"Preview & Send\",\n solicitationDetails: \"Solicitation Details\",\n solicitationSetup: \"Solicitation Setup\",\n folders: \"Folders\",\n chooseFolders: \"Choose Folders\",\n vendors: \"Vendors\",\n chooseVendors: \"Choose Vendors\",\n atLeastOneVendor: \"Must select at least 1 vendor\",\n requiredFields:\n \"The following fields are required: Vendor Code, Vendor Name, First Name, Last Name and Email.\",\n externalLinks: \"External Links\",\n addHCSSPlans: \"Add HCSS Plans\",\n addLinks: \"Add Links\",\n attachments: \"Attachments\",\n uploadFiles: \"Upload Files\",\n confirmBack:\n \"You have unsaved changes. Are you sure you want to continue?\",\n savingDraft: \"Saving Draft\",\n saveDraft: \"Save Draft\",\n noFoldersHelpText: {\n title: \"No Folders\",\n body:\n \"Solicitations sent without folders or items will still include solicitation details, project details, external links, and attachments.\"\n },\n noEstimateFoldersHelpText: {\n title: \"No Estimate Selected\",\n body: `To select folders to solicit from, first choose an estimate in the dropdown in the 'Solicitation Setup' portion of this page. You may still solicit with no folders selected. `\n },\n noVendorsHelpText: {\n title: \"No Vendors\",\n body: \"At least 1 vendor must be selected.\"\n },\n noLinksHelpText: {\n title: \"No Links\",\n body: \"It is optional to add external site links.\"\n },\n noAttachmentsHelpText: {\n title: \"No Attachments\",\n body: \"It is optional to add attachments.\"\n }\n },\n attachments: {\n notifications: {\n linkCopied: {\n title: \"Copied!\",\n message: \"Link copied to clipboard\"\n }\n },\n uploadFiles: \"Upload Files\"\n },\n details: {\n initialSolicitation: \"Initial Solicitation\",\n followUp: \"Follow Up\",\n addendum: \"Addendum\",\n solicitationNotes: \"Solicitation Notes\",\n MessageType: \"Solicitation Type\",\n typeRequired: \"Solicitation type is required.\",\n solicitationName: \"Solicitation Name\",\n nameRequired: \"Solicitation name is required.\",\n quoteDueBy: \"Quote Due By\",\n quoteDueByRequired: \"Quote due by date is required.\",\n firstName: \"First Name\",\n firstNameRequired: \"Contact first name is required.\",\n lastName: \"Last Name\",\n lastNameRequired: \"Contact last name is required.\",\n email: \"Email\",\n phone: \"Phone\"\n },\n selectFolders: {\n title: \"Select Folders\"\n },\n selectVendors: {\n any: \"Any\",\n unsolicited: \"Unsolicited\",\n repliedWillBid: \"Replied: Will Bid\",\n repliedWillNotBid: \"Replied: Will Not Bid\",\n submittedQuote: \"Submitted Quote\",\n title: \"Select Vendors\",\n solicitationStatus: \"Solicitation Status\",\n inSelectedFolders: \"In Selected Folders\",\n inEstimate: \"In Estimate\",\n vendorList: \"Vendor List\"\n },\n dashboard: {\n noDataTitle: \"No Solicitations\",\n noDataHelpText:\n \" Either send a solicitation, or change your filters. Solicitations will appear under the project they belong to.\"\n }\n },\n quotes: {\n showQuoteSheetLink: \"See Full Quote Sheet\",\n filters: {\n search: \"Search\",\n searchQuotes: \"Search Quotes\",\n lastModified: \"Last Modified\",\n selectEstimator: \"Select Estimator\",\n selectDate: \"Select Date\",\n noEstimators: \"No Estimators found\",\n emptyEstimator: \"None\"\n },\n folderColumns: {\n folder: \"Folder\",\n description: \"Description\",\n type: \"Type\",\n estimator: \"Estimator\",\n lastModified: \"Last Modified\",\n selectedVendors: \"Selected Vendors\",\n folderTotal: \"Folder Total\"\n },\n vendorColumns: {\n vendor: \"Vendor\",\n name: \"Name\",\n minorityStatus: \"Minority Status\",\n vendorNotes: \"Vendor Notes\",\n selectedVendor: \"Selected Vendor\",\n vendorTotal: \"Vendor Total\"\n },\n quoteColumn: {\n code: \"Code\",\n item: \"Item\",\n selectedVendor: \"Vendor\",\n quantity: \"QTY\",\n unit: \"Unit\",\n amount: \"Amount\",\n },\n folderDetailsQuotes: {\n selectedVendorPerItem: \"SELECTED VENDOR PER ITEM\",\n allVendorsTitle: \"ALL VENDORS IN THIS QUOTE FOLDER\",\n vendors: \"Vendors\"\n },\n quoteFolders: \"Quote Folders\",\n banner:\n \"HeavyBid 2022.0.0 or higher is needed in order to map and sync any vendor’s extra item prices to HeavyBid quote folders where this vendor is not currently listed.\",\n overwrittenMessage:\n \"For one or more items in this quote, the description, quantity, unit and/or unit price were overwritten.\",\n folderSelectionClear: \"(None)\",\n moduleName: \"Quote Management\",\n awaitingResponse: \"Awaiting Response\",\n invitationAccepted: \"Invitation Accepted\",\n invitationDeclined: \"Invitation Declined\",\n receivedNewPrices: \"Received New Prices\",\n reviewed: \"Reviewed\",\n MarkedAsUnread: \"Mark As Unread\",\n rejected: \"Rejected\",\n status: \"Status\",\n folderDetails: \"Folder Details\",\n folderNoItemsNoVendors:\n \"This folder does not contain any Quote Items or Vendors.\",\n folderNoItems: \"This folder does not contain any Quote Items.\",\n folderNoVendors: \"This folder does not contain any Vendors.\",\n quotedAmount: \"Quoted Amount\",\n pluggedAmount: \"Plugged Amount\",\n adjustments: \"Adjustments\",\n totals: \"Totals\",\n item: \"Item\",\n resource: \"Code\",\n cancel: \"Cancel\",\n continue: \"Continue\",\n confirmRevertChnges: \"Revert Changes\",\n quantity: \"Quantity\",\n description: \"Description\",\n disabledTooltipForEditing:\n \"Disable Editing mode in order to select this button.\",\n code: \"Code\",\n unit: \"Unit\",\n folder: \"Folder\",\n unitPrice: \"Unit Price\",\n extendedPrice: \"Extended Price\",\n plugPrice: \"Plug Price\",\n s: \"S\",\n p: \"P\",\n subContractor: \"Subcontractor\",\n material: \"Material\",\n estimator: \"Estimator\",\n notes: \"Notes\",\n noDescription: \"No Description\",\n noResource: \"No Resource\",\n quoteHasBeenReviewed: \"Quote has been reviewed.\",\n quoteReviewedError: \"An error occurred while updating quote.\",\n quoteHasBeenMarkedAsUnread: \"Quote has been marked as unread.\",\n quoteHasBeenRejected: \"Quote has been rejected.\",\n quoteHasBeenManuallyEntered:\n \"Quote will be manually entered into HeavyBid.\",\n quoteChangesHaveBeenReverted: \"Quote changes have been reverted.\",\n quoteChangesRevertError: \"An error occured while reverting quote changes.\",\n quoteValidationError: \"Please select a folder for at least 1 item.\",\n quoteVendorFolderValidationError:\n \"There is an item that cannot be mapped to the correct quote folder because this vendor is not yet in that HeavyBid quote folder for this item. Please go to HeavyBid, add this vendor to the correct quote folder and select Sync Quote Prices in the HeavyBid Quote Summary window. Once you refresh this window, then that folder selection will be available for the quote items. Proceed to map the items to the appropriate quote folder before you Mark as Reviewed.\",\n quoteVendorFolderValidationErrorTitle: \"Vendor Needs A Folder\",\n quoteRejectedError: \"An error occurred while updating quote.\",\n updatingPrices: \"Updating Prices...\",\n ignoringPrices: \"Ignoring Prices...\",\n quoteDetails: \"Quote Details\",\n closeQuote: \"Close Quote\",\n revertingPrices: \"Reverting to Original Prices.\",\n revertModalContentLine1:\n \"All edited quote item fields will be reverted to their original values.\",\n revertModalContentLine2: \"Do you want to continue?\",\n queueForSync: {\n button: \"Queue For Sync\",\n disabledTitle:\n \"This button will disable when prices are all zeros. Enable Editing to add the vendor prices in the quote below.\",\n enableTitle:\n \"Selecting Queue for Sync will queue these vendor prices to be synced with HeavyBid on the next Sync from the HeavyBid Quote Summary window\"\n },\n vendorDetails: \"Vendor Details\",\n prices: \"Prices\",\n validThrough: \"Valid through {0}\",\n vendorNotes: \"Vendor Notes\",\n total: \"Total\",\n internalNotes: \"Internal Notes\",\n company: \"Company\",\n vendorContact: \"Vendor Contact\",\n folderNotFound: \"This item's folder could not be found.\",\n na: \"N/A\",\n chooseFolder: \"Map Item...\",\n syncRequired: \"Sync Required\",\n vendor: \"Vendor\",\n viewDetails: \"View Details\",\n type: \"Type\",\n selectedVendors: \"Selected Vendor(s)\",\n folderTotal: \"Folder Total\",\n name: \"Name\",\n minorityStatus: \"Minority Status\",\n selected: \"Selected\",\n vendorTotal: \"Vendor Total\",\n selectedVendor: \"Selected Vendor\",\n folderNotes: \"Folder Notes\",\n quoteInbox: \"Quote Inbox\",\n new: \"New\",\n pending: \"Pending\",\n all: \"All\",\n itemsBidOfTotal: \"{0} of {1}\",\n itemsBid: \"Items Bid\",\n invitedOn: \"Invited On\",\n lastActivity: \"Last Activity\",\n receivedOn: \"Received On\",\n reviewedOn: \"Reviewed On\",\n rejectedOn: \"Rejected On\",\n extraItems: \"Extra Items\",\n quoteSummary: \"Quote Summary\",\n gridView: \"Grid View\",\n listView: \"List View\",\n details: {\n address: \"Address\",\n adjExtendedPrice: \"Adj. Extended Price\",\n adjUnitPrice: \"Adj. Unit Price\",\n adjustment: \"Adjustment:\",\n anticipatedStartDate: \"Anticipated Start Date\",\n attachments: \"Attachments\",\n bidDate: \"Bid Date\",\n bidding: \"Bidding\",\n blanks: {\n description: \"Description is required.\",\n unit: \"Unit is required.\",\n unitPrice: \"Price is required.\",\n quantity: \"Quantity is required.\"\n },\n changeStatus: \"Change Status\",\n clientNo: \"Client #\",\n company: \"Company\",\n contactInformation: \"Contact Information\",\n contacts: \"Contact\",\n description: \"Description\",\n downloadAll: \"Download All\",\n extendedPrice: \"Extended Price\",\n headerMessage: \"{0} invited you to bid on {1} at {2}\",\n importantDates: \"Important Dates\",\n itemDetails: \"Item Details\",\n enterPrices: \"Enter Prices\",\n guestUserBannerText: [\n \"Do you want to see your previous quotes? Sign up for your free HCSS account!\",\n \"Do you want to manage your contacts and send professional looking proposals? Did I tell you it’s free?\"\n ],\n guestUserBannerLinkText: \"Learn more\",\n job: \"Job\",\n jobSite: \"Job Site\",\n lastSubmissionMessage:\n \"A quote was previously submitted on {0} at {1} for {2}.\",\n location: \"Location\",\n mainContact: \"Primary Contact\",\n name: \"Name\",\n noItems: \"No Items\",\n noItemsMessage:\n \"This invitation was sent without quote items. Please review the included project information, external links and/or files, and let {0} know if you are interested in bidding this project. You may optionally add additional items by clicking below.\",\n noItemsAddButton: \"Add Additional Items\",\n notBidding: \"Not Bidding\",\n notes: \"Notes\",\n notesTooLong:\n \"Please shorten the notes as it has exceeded 900,000 characters.\",\n projectDetails: \"Project Details\",\n pageTitle: \"Quote Request Details\",\n print: \"Print\",\n projectId: \"Project ID\",\n projectInformation: \"Project Information\",\n projectName: \"Project Name\",\n quantity: \"Quantity\",\n quoteDueDate: \"Quote Due Date\",\n roundingDiff: \"Rounding Difference:\",\n reviewSubmit: \"Review & Submit\",\n copyProposal: \"Copy Proposal\",\n statusTitleNo: \"You are not bidding!\",\n statusTitleQuestion: \"Will you be bidding on this project?\",\n statusTitleYes: \"You are Bidding!\",\n statusTooltipNo:\n \"This will let the contractor know you are not going to submit prices.\",\n statusTooltipQuestion:\n \"This will let the contractor know you are going to submit prices, even if you come back and do it at a later time.\",\n statusTooltipYes:\n \"This will let the contractor know you are going to submit prices.\",\n submitPromptMessage:\n \"You are about to submit quote prices on behalf of yourself or your company. After you submit you will not be able to edit your prices. Do you want to continue?\",\n submitPromptTitle: \"Submit Quote Prices?\",\n submitting: \"Submitting...\",\n subtotal: \"Subtotal:\",\n subItem: {\n addSubitem: \"Add Your First Subitem\",\n add: \"Add\",\n save: \"Save\",\n cancel: \"Cancel\",\n removeSubitem: \"Remove Subitem\",\n noSubItemsHelpText: {\n title: \"No Subitems\",\n body:\n \"Create subitems to quickly break apart larger items into smaller components. Totals will be rolled up into a final value.\"\n }\n },\n total: \"Total:\",\n unit: \"Unit\",\n unitPrice: \"Unit Price\",\n urlLinks: \"URL Links\",\n unitMismatchMessage:\n \"There is a unit mismatch between the selected HeavyBid quote item and this Vendor’s extra item. Correct the unit in order to sync this item’s unit price back to HeavyBid.\",\n confirmModal: {\n cancel: \"Go Back\",\n continue: \"Continue\"\n },\n closeQuoteModal: {\n title: \"Close Quote\",\n warning:\n 'By selecting \"Close Quote\", the vendor prices WILL NOT sync back to HeavyBid Quotes.',\n prompt: \"Which statement fits better?\",\n overlayMessage: \"Closing quote.\",\n reject: {\n label: \"I reject these vendor prices and will not consider them.\",\n text:\n 'This quote\\'s solicitation card will move to the Done column with the status \"Rejected\", can be viewed and can be re-opened later.'\n },\n manual: {\n label: \"I will manually enter the vendor prices into HeavyBid.\",\n text:\n 'This quote\\'s soliciation card will move to the Done column with the status \"Manually Entered\".'\n }\n }\n },\n quoteReview: {\n title: \"Quote Review\",\n back: \"Back To Details\",\n submit: \"Submit Quote\",\n date: \"Date\",\n project: \"Project\",\n validThrough: \"Valid through\",\n total: \"Total\",\n submitTo: \"Submit To\",\n contactUs: \"Contact Us\",\n clientNo: \"Client No.\",\n description: \"Description\",\n quantity: \"Quantity\",\n unit: \"Unit\",\n unitPrice: \"Unit Price\",\n extendedPrice: \"Extended Price\",\n totalAmount: \"TOTAL AMOUNT\",\n notes: \"Notes\"\n },\n submission: {\n title: \"Submission Successful\",\n viewQuote: \"View Quote\",\n signupTitle: \"now Available for\",\n free: \"FREE\",\n discover: \"Discover More\"\n },\n emptyState: {\n title: \"No folders found\",\n text:\n \"To get started, sync data from the Quote Summary screen in HeavyBid.\"\n },\n pricesLastSynced: \"Prices last synced:\"\n },\n materials: {\n columns: {\n nameDescription: \"Name-Description\",\n quantityCost: \"Quantity-Cost\",\n biditem: \"Biditem\",\n activity: \"Activity\",\n quantity: \"Quantity\",\n unit: \"Unit\",\n unitCost: \"Unit Cost\",\n tax: \"Tax/OT%\",\n total: \"Total\",\n esc: \"Esc %\"\n },\n topMaterialsFromEstimate: \"Top 5 Materials from this Estimate\",\n search: \"Search\",\n searchMaterials: \"Search Materials\",\n permanentMaterial: \"Permanent Material\",\n constructionMaterial: \"Construction Material\",\n materialType: \"Material Type\",\n allMaterials: \"All Materials in this Estimate\",\n columnChart: {\n yAxisName: \"Materials\",\n perUnit: \"Cost Per Unit ($)\",\n total: \"Total Material Cost ($)\",\n },\n emptyState: {\n title: \"No Materials in this Estimate.\"\n },\n },\n userAdmin: {\n adminRequired: \"You must be an admin to visit this page\",\n writeRequired:\n \"You must have rights to add/edit projects to visit this page\",\n contactRequired:\n \"You must have rights to add/edit contacts to visit this page\",\n fullPreconRequired:\n \"You must have full Pre-Construction access to visit this page\",\n fullFeatureRequired:\n \"You must have a full feature Pre-Construction license in order to visit this page. Please contact your system administrator or HCSS Support.\",\n fullProjectTracking: \"You must have access to full Project Tracking.\",\n estimateInsightsRequired: \"You must have access to Estimate Insights.\",\n unauthorized: {\n jumbotron: {\n title: \"You don't have access to Pre-Construction.\",\n heavyBid: \"HeavyBid Pre-Construction\",\n text1: \" is the home of:\",\n listItem1: \" with bid results tracking\",\n listItem2: \" with KPI analysis\",\n listItem3: \"Centralized \",\n text2: \"Contact your administrator and share \",\n text3: \"this Help article\",\n text4: \" if you need access.\",\n text5:\n \"If you have previously updated your account, logout, then try again. If this problem persists, please contact your system administrator or click the links below for more information.\",\n logout: \"logout\"\n },\n projectTracking: {\n title: \"Project Tracking\",\n body:\n \"Accessing Project Tracking requires a subscription to HeavyBid Addons: Project Tracking. This change can be made in HCSS Credentials. For more information click the link below.\",\n help: \"Start using Project Tracking\"\n },\n heavybidInsights: {\n title: \"Estimate Insights\",\n body:\n \"Accessing Estimate Insights (formally HeavyBid Insights) data requires that you configure settings in both HeavyBid & Credentials. Steps to get started can be accessed in the HCSS Help Center.\",\n help: \"Start using Estimate Insights\"\n },\n contactManagement: {\n title: \"Contact Management\"\n },\n quoteManagement: {\n title: \"Quote Management\",\n body:\n \"The Quote Management feature is currently open to alpha users only. If you are interested in becoming an alpha or beta user, please contact us.\",\n help: \"Email us now\"\n },\n supportPortal: {\n title: \"Help & Support\",\n body:\n \"Have other questions or concerns? Ask questions regarding your HCSS software and get answers. Support team members are standing by to answer your questions live.\",\n help: \"Go to the HCSS Support Portal\"\n },\n sandbox: {\n title: \"Want to try out Pre-Con?\",\n body:\n \"Explore a sandbox environment where you can get a feel for the product!\",\n help: \"Explore now\"\n }\n },\n permissionsUpdated: \"Permissions Updated\",\n errors: {\n adminRequired: \"At least one Administrator is required\",\n permissions: \"Error Saving Permissions\"\n },\n revoke: \"Revoke\",\n cancel: \"Cancel\",\n title: \"User Administration\",\n save: \"Save\",\n newPermissions: \"Permissions given to newly added users:\",\n addEdit: \"Add and edit projects in Project Tracking\",\n addEditContact: \"Add and edit companies or contacts in Contact Management\",\n seeHeavyBid: \"See numbers from HeavyBid estimates\",\n admin:\n \"Administrator (set user permissions, customize Project fields, manage Project & Estimate templates)\",\n estimateInsights: \"Access to Estimate Insights\",\n adminTooltip:\n \"Users with an ‘Admin’ User Role in Credentials will be brought into this application as a Company Admin.\",\n companyAdminTooltip:\n \"Company Admins maintain full rights within the Pre-Con application. Their app access and User Role level is managed within HCSS Credentials.\",\n limitedUserTooltip:\n \"Not available for read-only users. To enable, go to HCSS Credentials and add this user to a subscription group with full-feature HeavyBid | Pre-Construction.\",\n dataAccessTooltip:\n \"Access to Estimate Insights and viewing of estimate cost/price values\",\n writeTooltip: \"Admin must be unchecked first.\",\n userPermissions: \"User Permissions\",\n usersWithAccess:\n \"These user accounts have been granted permission to access Pre-Construction in HCSS Credentials\",\n revokeAdmin: \"Revoke Admin Rights\",\n revokeAdminConfirmation:\n \"Are you sure you want to revoke Admin rights for yourself?\",\n defaultNewUserPermissions: {\n projectTracking: \"PROJECT TRACKING\",\n contactManagement: \"CONTACT MANAGEMENT\",\n estimateInsights: \"ESTIMATE INSIGHTS\"\n },\n permissionsTable: {\n firstName: \"First Name\",\n lastName: \"Last Name\",\n userId: \"User Id\",\n addEdit: \"Add & Edit\",\n seeHeavyBid: \"See HeavyBid Numbers\",\n admin: \"Administrator\",\n estimateInsights: \"Estimate Insights\",\n projectTracking: \"Project Tracking\",\n contactManagement: \"Contact Management\",\n dataAccess: \"Data Access\"\n }\n },\n layout: {\n title: {\n heavy: \"Heavy\",\n bid: \"Bid\",\n preConstruction: \"Project Tracking\",\n combined: \"HeavyBid Project Tracking\",\n quotes: \"Quotes\"\n },\n loading: \"Loading\",\n menu: {\n title: \"Menu\",\n projectTracking: {\n title: \"Project Tracking\",\n list: \"Project List\",\n import: \"Import\",\n importProjects: \"Import Projects\",\n customize: \"Customize Setup\",\n customizeOld: \"Customize Projects\",\n estimateMapping: {\n title: \"Estimate Mapping\",\n hover: \"Total Number of Unlinked Estimates\"\n },\n subscriptions: { stoppedSubscriptions: \"Total Number of Incidentally Stopped Subscriptions\" }\n },\n importBidResults: {\n title: \"Import Bid Results\",\n title1:\n \"Before you start, it is important to know that bid results can only be imported into existing projects.\",\n title2:\n \"Use Import Projects to first create any missing projects before the bid results are imported.\",\n title3:\n \"Bid History data exported from HeavyBid can also be imported as bid results.\",\n bidResultsXMLHeader1:\n \"Use one row for every bid submission for each Project.\",\n bidResultsXMLHeader2:\n \"Enter the Project Name, Company Name, and Bid Total. Mark the winner for each Project by entering #Y for Yes.\",\n bidResultsXMLHeader3:\n \"Your Company Name is #companyName. Use this Company Name for your bid submissions.\",\n projectName: \"Project Name\",\n winner: \"Winner?\",\n companyName: \"Company Name\",\n bidTotal: \"Bid Total\",\n downloadXML: \"Download\",\n learnMore: \"Learn More\",\n selectFile: \"Select File\",\n step1:\n \"Step 1. Download the bid results import template.\",\n subtitle1: \"Enter any bid results into Excel. Save file.\",\n step2: \"Step 2. Import the Excel file.\",\n subtitle2: \"Select the file to import bid results.\",\n cancel: \"Cancel\",\n preview: \"Preview\",\n import: \"Import\",\n wizardStep1: \"Select File\",\n wizardStep2: \"Preview\",\n wizardStep3: \"Results\"\n },\n projects: {\n import: {\n label: \"Import\",\n projects: \"Projects\",\n bidResults: \"Bid Results\"\n }\n },\n estimating: {\n title: \"Estimate Insights\",\n list: \"Estimate List\",\n codebooks: \"Codebooks Dashboard\",\n edit: \"Edit Archived Estimates\",\n customize: \"Customize Reporting\",\n activityTotals: \"Activity Totals\",\n recentEstimates: \"Recent Estimates\",\n divToBuErrorTitle:\n \"We couldn't find any estimates for your current Business Unit\",\n divToBuCodebooksErrorTitle:\n \"We couldn't find any Codebooks for your current Business Unit\",\n contactSupport: \"Contact HCSS by opening a ticket at https://community.hcss.com/s/contactsupport or calling 1-855-231-7876.\",\n divToBuErrorBody:\n \"Click the link below for help on getting started, or contact HCSS by opening a ticket at https://community.hcss.com/s/contactsupport or calling 1-855-231-7876.\",\n divToBuFilteredErrorTitle:\n \"No estimates are available with the current filters\",\n unauthorizedErrorTitle:\n \"Please Contact your Administrator or HCSS Support\",\n unauthorizedErrorBody:\n \"Your account does not have access to the requested Business Unit's estimates\",\n noCodebooksData: {\n title: \"No Activity Codebook data is currently available to analyze\",\n body: \"For information on Uploading System Data to the Web\"\n },\n codebookslimitedPlaceholder: {\n title: `The Codebooks Dashboard is a tool that allows you to analyze your Activity Codebook usage\\n across archived and synced estimates`,\n text: \"This feature is available to companies with “Full Features” access\",\n fullFeaturesText: \"For more information on “Full Features” access\",\n moreInfoText: \"For more information on the Codebooks Dashboard\"\n },\n },\n contacts: {\n title: \"Company Information\",\n mainDetails: \"Main Details\",\n list: \"Company List\",\n search: \"Search Contacts\",\n import: \"Import Contacts\",\n setup: \"Company Setup\"\n },\n settings: {\n title: \"Settings\",\n email: \"Business Unit Email\",\n email2: \"Company Email\",\n userAdmin: \"User Admin\",\n companyProfile: \"Company Profile\",\n smtpSettings: \"SMTP Settings\",\n },\n quoteManagement: {\n title: \"Quote Management\",\n dashboard: \"Dashboard\",\n createProposal: \"Create Proposal\",\n createSolicitation: \"Create Solicitation\",\n incomingHeader: \"Incoming Quotes\",\n incomingSubHeader: \"From Subs and Vendors\",\n outgoingHeader: \"Outgoing Proposals\",\n outgoingSubHeader: \"To General Contractors\",\n vendorCommunication: \"Vendor Communication\",\n filters: \"Filters\",\n noVendorCommsFoundTitle:\n \"We couldn't find any Solicitations or their related Vendor Communication records in any of your current Projects\",\n noVendorCommsFoundBody:\n \"Select 'Create Solicitation' in the left menu to send a Solicitation and automatically begin tracking your Vendor Communications.\"\n }\n },\n profile: {\n currentBU: \"Current BU\",\n bu: \"Change Business Unit\",\n email: \"Configure Email Settings\",\n calendar: \"Configure Calendar Settings\",\n language: \"Language\",\n dateTimeFormat: \"Date/Time Format\",\n enableSandbox: \"Enable Sandbox Mode\",\n logout: \"Logout\"\n },\n feedback: \"Feedback\",\n chat: {\n online: \"Chat with an Expert\",\n offline: \"Agent offline\"\n },\n help: {\n helpCenter: `Help Center`,\n chat: `Live Chat with Support`,\n contact: `Contact Support`,\n phone: `Help Line: 1-855-231-7876`,\n suggestion: `Log a Product Suggestion`,\n about: `About HCSS`,\n privacy: `HCSS Privacy Policy`,\n tutorial: `Launch Tutorial`\n },\n alphaHelp: \"Alpha Help\"\n },\n core: {\n dropdown: {\n clear: \"(Clear)\",\n placeholder: \"Select\",\n new: `To add a new option: type a value, press Enter`\n },\n filters: {\n title: \"Filters\",\n removeDisplayedFilters: `Remove Filters ({0} displayed)`,\n clearActiveFilters: `Clear Active Filters ({0} applied)`,\n textPlaceholder: \"Type something and press enter...\",\n addFiltersText: \"Add Filters\",\n adjustFiltersText: \"Adjust Filters\",\n collapseFiltersText: \"Collapse Filters\",\n expandFiltersText: \"Expand Filters\",\n numMin: \"Min\",\n numMax: \"Max\",\n },\n modals: {\n ok: \"Ok\",\n cancel: `Cancel`,\n close: \"Close\",\n confirmBack: {\n title: \"Unsaved Changes\",\n discardButton: \"Discard Changes\",\n saveButton: \"Save Changes\",\n cancelButton: \"Cancel\",\n unsavedChanges: `You have unsaved changes. Are you sure you want to continue?`\n },\n confirmDelete: {\n confirm: \"Confirm Delete\",\n projectTitle: \"Delete Project\",\n fieldTitle: \"Delete Field\",\n draft: \"Delete Draft\",\n message: `Are you sure you want to delete {0}?`\n },\n linkHeavyJob: {\n link: \"Link\",\n modalTitle: \"Select a Job\",\n linkJobButton: \"Link this job\",\n noJobsTitle: \"No Jobs Found\",\n noJobsText: \"Ensure you have access to HeavyJob jobs in this Business Unit\",\n cancel: \"Cancel\",\n deleteLinkJobButton: \"Delete link\"\n }\n },\n buttons: {\n add: \"Add\",\n back: \"Back\",\n close: \"Close\",\n edit: \"Edit\",\n delete: \"Delete\",\n deleteAll: \"Delete All\",\n import: \"Import\",\n cancel: \"Cancel\"\n },\n notifications: {\n saved: `{0} Saved!`,\n added: `{0} Added!`,\n removed: `{0} Removed!`\n },\n loaders: {\n loading: \"Loading...\",\n updating: \"Updating...\"\n }\n },\n tables: {\n group: {\n placeholder: `Drag a column header here to group by that column`,\n checklist: {\n true: \"Checked\",\n false: \"Unchecked\"\n }\n },\n add: {\n text: \"Add\",\n hint: \"Add Entry\"\n },\n edit: {\n text: \"\",\n hint: \"Edit Entry\"\n },\n delete: {\n text: \"\",\n hint: \"Delete Entry\"\n },\n commit: {\n text: \"\",\n hint: \"Save Changes\"\n },\n cancel: {\n text: \"\",\n hint: \"Cancel Changes\"\n },\n export: {\n checklist: {\n true: \"Checked\",\n false: \"Unchecked\"\n },\n pdf: {\n currentPage: `Page {0} of {1}`,\n filename: `{0}-{1}.pdf`\n },\n csv: {\n filename: `{0}-{1}.csv`\n },\n excel: {\n filename: `{0}-{1}.xlsx`\n }\n },\n options: {\n optionsHeader: \"Options\",\n exportHeader: \"Export\",\n exportCSV: \"CSV\",\n exportCSVFull: \"Export to CSV\",\n exportExcel: \"Excel\",\n exportContactsCsv: \"CSV\",\n exportContactsExcel: \"Excel\",\n exportPDF: \"PDF\",\n exportPDFFull: \"Export to PDF\",\n bidResults: \"Bid Results to CSV\",\n showColumns: \"Show/Hide Columns\",\n activityTotals: \"Activity Totals\",\n highlight: \"Highlight Projects\",\n showBulkOperations: \"Show Bulk Operations\",\n hideBulkOperations: \"Hide Bulk Operations\",\n expandAll: \"Expand All\",\n collapseAll: \"Collapse All\",\n backToTop: \"Back to top\",\n loading: \"Loading\",\n exportDisabledMessage:\n \"Exporting is disabled until all projects and estimates have been loaded.\",\n stillFetchingData: \"Loading projects and estimates\"\n },\n rightClickColumn: {\n sort: { asc: \"Sort Ascending\", desc: \"Sort Descending\" },\n group: \"Group\",\n groupBy: \"Group By\",\n highlight: {\n on: \"Highlight\",\n off: \"Clear Highlight\"\n },\n hide: \"Hide\",\n showColumns: \"Show/Hide Columns\"\n },\n columnChooser: {\n title: `Show/Hide Columns`,\n showAll: `Show All`,\n hideAll: `Hide All`,\n close: `Close`\n },\n highlightModal: {\n title: \"Highlight Projects\"\n },\n search: {\n placeholder: \"Search...\",\n checklist: {\n true: \"Checked\",\n false: \"Not Checked\"\n }\n },\n visibility: {\n allHidden: `All columns are hidden`,\n addColumns: \"Add Columns to Grid\"\n },\n summary: {\n count: \"Count\",\n sum: \"Sum\"\n }\n },\n views: {\n templateSelect: {\n create: `Create a new template named {0}`,\n unknownUser: \"Unknown User\",\n },\n templateAccessOptions: {\n public: \"Public\",\n private: \"Private\"\n },\n templateOptions: {\n save: \"Save\",\n undo: \"Undo\",\n options: {\n title: \"Options\",\n new: \"Save as New Template\",\n rename: \"Rename Template\",\n remove: \"Remove Template\",\n setAsDefault: \"Set as Default\",\n claim: \"Claim Template\"\n }\n },\n renameModal: {\n title: \"Rename Template\",\n desc: `New Name (current name is {0})`\n },\n newModal: {\n title: \"Save New Template\",\n desc: \"Template Name\"\n },\n claimModal: {\n title: \"Claim Template\",\n desc: \"Are you sure you want to claim {0}?\"\n },\n savePrivateModal: {\n title: \"Save Private Template\",\n desc:\n \"Are you sure you want to save {0} as private? You will be unable to undo this action as you do not own this template.\"\n },\n confirmDelete: {\n title: \"Remove Template\",\n desc: `Are you sure you want to remove {0}?`\n },\n accessTooltip: {\n errors: {\n unclaimed:\n \"This template must be claimed by an admin before making private\",\n requiredPublic: \"You must have at least one public {0} template\",\n lackPermissions: \"Only admins can make other user's templates private\",\n readOnly: \"You need project add/edit access to make your templates {0}\"\n },\n accessType: {\n public: \"public\",\n private: \"private\"\n },\n schemaTypes: {\n estimateInsights: \"estimate insights\",\n bidResults: \"bid results\",\n projectList: \"project list\"\n }\n },\n errors: {\n uniqueName: {\n title: `Error Saving Template {0}`,\n desc: `A template already exists with this name.`\n },\n saveView: `Error Saving {0}`,\n claimView: \"Error Claiming Template\"\n }\n },\n errors: {\n invalidValue: `{0} has an invalid value`,\n required: `{0} is required`\n },\n projects: {\n takeoffs: {\n title: \"Takeoffs\",\n selectFirstRow: \"Starts with row #\",\n mappingsErrorNotificationTitle: \"Unable to import project takeoffs.\",\n rowNumber: \"#\",\n lastImported: \"Last import: {0}\",\n removedLinkWarnings: \"The link to {0} will be removed. The Takeoff file does not include the linked line.\",\n isLinked: \"Linked\",\n isLinkedHelperTitle: \"Help\",\n isLinkedHelperDescription: \"Hover over the linked checkmark to reveal associated links.\",\n links: \"Links\",\n biditem: \"Biditem\",\n activity: \"Activity\",\n resource: \"Resource\",\n agtekType: \"AGTEK Structure Summary\",\n customType: \"Custom\",\n importTakeoffs: \"Import Takeoffs\",\n removeLinks: \"Remove Links\",\n removeLinksConfirmation: \"Are you sure you want to remove all Takeoff links?\",\n importResult: \"Import Result\",\n noAccess: \"Requires Add & Edit access\",\n selectSourceType: \"Select Import Type\",\n sections: {\n fileInput: \"File Import\",\n columnMapings: \"Column Mapping\",\n preview: \"Preview\",\n validationResult: \"Preview Validation\"\n },\n noEstimateLink: \"No estimate contains links to these takeoffs\",\n versionInfoTitle: \"Info\",\n versionInfoDescription: \"Import the takeoffs you plan to use for this project. Beginning with HeavyBid 2024.1, use these takeoffs as you create new biditems, activities, and resources. Or link them to existing biditems, activities, and resources in your estimate.\",\n noValidationWarnings: \"No validation warnings to display\",\n supportedFileFormatsWarning: \"Only {0} formats are supported\",\n supportedFileFormatsHint: \"Accepted file formats: {0}\",\n overwrite: {\n skipOverwrite: \"Skip Overwrite\",\n skip: \"Skip\",\n importAsNewLineAndKeepExist: \"Import as a new takeoff line, retain duplicate entries\",\n importAsNewLineAndRemoveExist: \"Import as a new takeoff line, remove duplicate entries\",\n overwriteRow: \"Overwrite existing row {0}\",\n overwrite: \"Overwrite\",\n details: {\n rowNumber: \"#\",\n quantity: \"Quantity\",\n unit: \"Unit\",\n links: \"Link(s)\",\n existingRow: \"Existing Row {0}\",\n newRow: \"New Row {0}\",\n }\n },\n duplicateRowsWereDetected: \"Row already exists. Please select an overwrite option.\",\n duplicateRecordsWereDetected: \"Record already exists. Please select an overwrite option.\",\n rowWillBeSkipped: \"Row will be skipped.\",\n duplicateTakeoffs: \"Similar takeoffs {0} and {1} were detected.\",\n willBeNewLines: \"{0} new takeoffs will be added.\",\n willBeOverwriten: \"{0} existing takeoffs updated.\",\n willBeSkipped: \"{0} rows will be skipped.\",\n willBeRemoved: \"{0} rows will be removed.\",\n willBeRetained: \"{0} rows will be retained.\",\n added: \"{0} takeoffs added.\",\n updated: \"{0} takeoffs updated.\",\n removed: \"{0} takeoffs removed.\",\n skipped: \"{0} takeoffs skipped.\",\n retained: \"{0} takeoffs retained.\",\n importTakeoffsAlert: \"This will overwrite any existing Takeoff files on this project. Continue?\",\n invalidAgtekFile: \"File not recognized as an AGTEK Structure Summary file. Please use the Custom File Import option instead.\",\n limitedPreConDescription: \"Upgrade to the full version of Pre-Con to import Takeoffs to your Pre-Con project.\",\n },\n quickPricing: {\n totalPrice: \"Total\",\n numberProjectPayItems: \"Pay Items\",\n created: \"Created {0} by {1}\",\n removedUser: \"Removed User\",\n title: \"Quick Price Sheet\",\n confirmSave: {\n title: \"Confirm Save\",\n text: \"This will overwrite the existing Quick Price Sheet for Project {0}. Continue?\",\n overwriteAndMove: \"This will overwrite the existing Quick Price Sheet and save it to Project {0}. Continue?\",\n removeAndSave: \"This will remove the Quick Price Sheet from Project {0} and save it to Project {1}. Continue?\",\n removeAndOverwrite: \" This will remove the Quick Price Sheet from Project {0} and overwrite the Quick Price Sheet on Project {1}. Continue?\",\n overwrite: \"This will overwrite the existing Quick Price Sheet on Project {0}. Continue?\",\n move: \"This will save the Quick Price Sheet to Project {0}. Continue?\",\n yes: \"Yes, Continue\",\n no: \"Go Back\"\n },\n menu: {\n edit: \"Edit\",\n delete: \"Delete\"\n },\n delete: {\n title: \"Delete Quick Price Sheet\",\n text: \"Are you sure you want to delete this Quick Price Sheet?\"\n },\n startNewQuickPrice: \"New Quick Price Sheet\",\n noAccess: \"Requires Add & Edit access\",\n limitedPreConDescription: \"Upgrade to the full version of Pre-Con to start a new Quick Price.\",\n limitedDescriptionColumnChooser: \"Upgrade to the full version of Pre-Con to add a Quick Price sheet to a Pre-Con project.\",\n steps: {\n source: \"Source\",\n owner: \"Select Library\",\n import: \"Import Project Pay Items (Optional)\",\n linkPayItems: \"Add/Link Pay Items\",\n review: \"Review and Save\",\n filters: \"Choose Filters\"\n },\n unsavedChanges: {\n title: \"Unsaved Changes\",\n text: \"You have unsaved changes. Are you sure you want to continue?\",\n back: \"Go Back\",\n save: \"Save and Continue\"\n },\n header: {\n newSheet: \"New Quick Price Sheet\",\n create: {\n payItemLibrary: \"Create from Pay Item Library\",\n estimateHistory: \"Create from Estimate History\"\n },\n selectedProject: \"Selected Project\"\n },\n source: {\n title: \"Create a New Quick Price Sheet\",\n next: \"Next\",\n select: \"Select a data source to proceed:\",\n payItemLibrary: {\n helperText: \"This option will allow you to use the Pay Items and associated prices from your Pay Item Library, located in Customize Setup.\",\n label: \"Create from Pay Item Library\",\n noLibraries: \"No Library Pay Items exist. Contact Admin to set up a Pay Item Library.\",\n noLibrariesAdmin: \"No Library Pay Items exist. Import Library Pay Items in Customize Setup to continue.\"\n },\n estimateHistory: {\n helperText: \"This option will allow you to use Pay Items and associated cost and price from your HeavyBid Estimate History.\",\n label: \"Create from Estimate History\",\n noAccess: \"You do not have Estimate Insights permission. Please contact your administrator.\",\n noEstimates: \"No HeavyBid estimates are currently available. Please \",\n noEstimatesLink: \"sync or archive estimates\",\n noEstimates2: \" and try again.\"\n }\n },\n owner: {\n text: \"Use an existing Pay Item Library by selecting the owner followed by version:\",\n selectOwner: \"Select Owner\",\n searchOwner: \"Search by Owner\",\n selectVersion: \"Select Version\",\n selectAVersion: \"Select a Version\",\n label: \"Owner:\",\n version: {\n label: \"Version:\"\n },\n noLibrariesErrorTitle: \"We couldn't find any Library Pay Items for your current Business Unit\",\n noLibrariesErrorText: \"Import Library Pay Items in the Customize Setup tab to continue.\"\n },\n importProjectPayItems: \"Import Project Pay Items\",\n sections: {\n fileInput: \"File Import\",\n columnMapings: \"Column Mapping\",\n preview: \"Preview\",\n validationResult: \"Preview Validation\"\n },\n import: {\n columnTitles: {\n projectPayItemCode: \"Code\",\n projectPayItemDescription: \"Description\",\n quantity: \"Quantity\",\n unit: \"Unit\"\n },\n mappingsErrorNotificationTitle: \"Unable to import project pay items\",\n rowWillBeSkipped: \"Row will be skipped.\",\n rowNumber: \"Row\",\n willBeNewLines: \"{0} Project Pay Item(s) will be added.\",\n willBeSkipped: \"{0} row(s) will be skipped.\",\n alert: \"This will overwrite all existing Project Pay Items. Continue?\",\n skipImport: \"SKIP IMPORT\"\n },\n link: {\n numberOfItems: `Showing {0} of {1} Project Pay Items`,\n table: {\n code: \"Code\",\n description: \"Description\",\n unit: \"Unit\",\n quantity: \"Quantity\",\n linkPayItem: \"Linked Pay Item\",\n empty: \"No Project Pay Items found\",\n noMatch: \"No Project Pay Items match the filter criteria\",\n noLibraryMatch: \"No Library Pay Items match the filter criteria\",\n search: \"Search\",\n searchProjectPayItems: \"Search...\",\n searchPayItems: \"Search Pay Items\",\n linkItem: \"LINK ITEM\"\n },\n modal: {\n title: \"Link Project Pay Item\",\n subtitle: \"Select Pay Item from the library to link to\"\n },\n addProjectPayItem: \"Add Project Pay Item\",\n addProjectPayItems: \"Add Project Pay Items\",\n addNewProjectPayItems: \"Add New Project Pay Items\",\n addProjectPayItemRow: \"+ Add Project Pay Item\",\n duplicatedCode: \"Must be unique\",\n required: \"Required\",\n unlinkedBanner: \"{0} item(s) were not able to be linked to a Pay Item in your library. Please review the items below.\",\n next: \"Next\",\n },\n review: {\n numberOfItems: `{0} Project Pay Items`,\n table: {\n code: \"Code\",\n description: \"Description\",\n unit: \"Unit\",\n quantity: \"Quantity\",\n linkPayItem: \"Linked Pay Item\",\n unitPrice: \"Unit Price\",\n actualPrice: \"Actual Price\",\n total: \"TOTAL\",\n empty: \"No Project Pay Items found\",\n noMatch: \"No Project Pay Items are visible with the current filters\",\n search: \"Search\",\n searchProjectPayItems: \"Search...\",\n linkItem: \"LINK ITEM\",\n linkedPayItemUnit: \"Unit\"\n },\n save: \"SAVE TO PROJECT\"\n },\n payItemLibrary: {\n table: {\n code: \"Code\",\n description: \"Description\",\n unitPrice: \"Unit Price\",\n unit: \"Unit\",\n empty: \"We couldn't find any Library Pay Items for your current Business Unit\"\n }\n },\n notification: {\n saveQuickPriceSheetFailed: \"Failed to save the Quick Price Sheet. Please try again.\",\n numberTooLarge: \"Error saving. Total exceeds maximum 10 characters limit.\"\n }\n },\n loading: \"Loading\",\n warnings: {\n titles: {\n locked: \"Locked Fields\",\n default: \"Warning\"\n },\n messages: {\n locked: \"Field '{0}' is locked. Cannot update its value to '{1}'.\",\n unableToAutomaticallyGeocodePlace: \"Unable to automatically geocode coordinates by place '{1}' in '{0}' Field.\"\n },\n },\n errors: {\n save: `Error Saving Project - {0}`,\n duplicateName: `A project already exists with the name {0}`,\n requiredField: `{0} is required`,\n invalidValue: `'{0}' field has an invalid value.`,\n notInBU: `The project you tried to access is not in your current Business Unit.`,\n linkSameLocationId: \"This job already links to the project\",\n bulkDelete: `Failed to delete {0} project(s).`,\n invalidYear: `The year value for '{0}' field must be within 100 years of the current year`\n },\n details: {\n title: \"Project Detail\",\n files: \"Attachments\",\n estimateSelectionTable: {\n noEstimates: \"No estimates have been uploaded.\",\n noEstimatesLink:\n \"Visit https://help.hcss.com/s/article/Overview-Estimate-History for help setting up Estimate Archive.\"\n },\n header: {\n back: \"Back\",\n save: \"Save\",\n expand: \"Expand All\",\n collapse: \"Collapse All\",\n downloadReport: \"Download PDF\",\n downloadReportSpinner: \"Downloading...\",\n sectionSelectionTitle: \"Select the Project Detail sections to be included in PDF download\",\n sectionSelectionSelectAll: \"Select All\",\n cancel: \"Cancel\",\n duplicate: \"Duplicate Project\",\n delete: \"Delete Project\"\n },\n error: {\n report: \"Error downloading report for project - {0}\"\n }\n },\n import: {\n button: \"Import Projects\"\n },\n list: {\n title: \"Projects\",\n tutorial: \"Would you like a quick tutorial on HeavyBid Project Tracking?\",\n header: {\n add: \"Add Project\",\n template: \"Template\",\n viewType: {\n list: \"List\",\n calendar: \"Calendar\",\n charts: \"Charts\",\n map: \"Map\"\n }\n },\n filters: {\n noFilters:\n \"You don't have any filters. Click the add filter button below!\",\n addFilters: \"Add Filter\",\n adjustFilters: \"Adjust Filters\",\n select: \"Select Filters\"\n },\n table: {\n noData: {\n filters: `No projects are visible with the current filters`,\n noProjects: `Click Add Project to get started`,\n noProjectsReadOnly: `No Projects to display`,\n noProjectsDueToEstimateTotalsFilters:\n \"You don't have access to Estimate Insights. Please remove any Estimate filter to see projects!\",\n },\n quickEntryCreate: `Create '{0}'`,\n quickEntryDisabled: \"Quick entry is disabled for this column\",\n noOptions: \"No Options\",\n createNewOptions: \"To add a new option: type a value, press Enter\",\n selectedProjects: \"{0} Project(s) selected\",\n },\n calendar: {\n options: {\n subscribe: \"Subscribe to Calendar\",\n month: \"Month\",\n week: \"Week\",\n day: \"Day\",\n agenda: \"Agenda\",\n viewHeader: \"Calendar View\"\n },\n eventWidget: {\n detailsButton: \"Details\",\n closeButton: \"Close\"\n }\n }\n },\n setup: {\n header: {\n save: \"Save\"\n },\n title: \"Customize Projects\",\n addSections: \"Add Sections\",\n save: \"Project Setup\",\n heavybidIntegration: \"HeavyBid Integration\",\n errors: {\n sectionName: `{0} section(s) are missing names.`,\n fieldNameMissingSingular: `1 field is missing a name in {0}`,\n excessCustomFields: `Only 3 custom fields are allowed for Basic Project Tracking. Current custom fields: {0}`,\n fullProjectTrackingOnly: `Locations, Tables, Hyperlinks and Checklists are only available for Full Project Tracking. Affected fields: {0}`,\n fieldNameMissingPlural: `{0} fields are missing names in {1}`,\n fieldNameDuplicated: `Duplicate field name, {0}, in {1} section.`,\n blankWebValue: `Blank web value in field '{0}'. Web values cannot be blank.`,\n blankChecklistValue: `Blank Checklist value in field '{0}'. Checklist values cannot be blank.`,\n blankDesktopValue: `Blank desktop value in field '{0}'. Desktop values cannot be blank.`,\n duplicateWebValue: `Duplicate web display value, '{0}', in field '{1}'. Web values must be unique and HeavyBid values must be unique.`,\n duplicateDesktopValue: `Duplicate HeavyBid display value, '{0}', in field '{1}'. Web values must be unique and HeavyBid values must be unique.`,\n duplicatedSelectionValueForTableField: `Duplicate value, '{0}', in field '{1}'. Values must be unique.`,\n blankSelectionValueForTableColumn: `Field '{0}' has blank value as an option`,\n generic: \"Error Saving Project Setup\"\n },\n message: {\n emptyCompanyList:\n \"Please navigate to Contact Management and create a company to start using this field\",\n emptyCompanyListWithFilter:\n \"No companies match this field's Company Type filter\",\n emptyContactList:\n \"There are no contacts in this business unit\",\n createOption: \"Add new contact to Contact Management\"\n }\n },\n subscription: {\n title: \"Subscription Setup\"\n },\n heavyJob: {\n title: \"Job Budget Progress\",\n noJobLinked: \"No Job Linked\",\n noJobLinkedDescription: \"Select a job to analyze budgets and financial progress\",\n limitedPreConDescription: \"Upgrade to the full version of Pre-Con to link HeavyJob to your Pre-Con project.\",\n linkJobButton: \"Link Job\",\n changeLinkedJob: \"Change Linked Job\",\n unLinkJobButton: \"Unlink Job\",\n featureDisabled: \"Feature Disabled\",\n linkedJobTable: {\n columns: {\n category: {\n label: \"Category\"\n },\n budgeted: {\n label: \"Budgeted\"\n },\n expected: {\n label: \"Expected\"\n },\n actual: {\n label: \"Actual\"\n },\n variance: {\n label: \"Variance\"\n },\n }\n }\n },\n estimateMapping: {\n title: \"Estimate Mapping\",\n buttons: {\n hide: \"Hide Estimate(s)\",\n unhide: \"Unhide Estimate(s)\",\n showHidden: \"Show Hidden Estimates\",\n undo: \"Undo\",\n undoLoading: \"Loading\"\n },\n projectSection: {\n linkProject: \"Link to Project\",\n selectProject: \"Select Project to link to selected Estimate(s)\",\n searchProjects: \"Search Projects...\",\n hideProjects: \"Hide Projects with linked Estimates\",\n addProject: \"Add Project\"\n },\n projectCard: {\n linkedEstimatesOne: \"1 Linked Estimate\",\n linkedEstimates: \"{0} Linked Estimates\",\n cancelButton: \"Cancel\",\n linkButton: \"Link\"\n },\n projectDialog: {\n title: \"Linked Estimates for\",\n noLinkedEstimates: \"This Project has no linked Estimates\",\n unlinkButton: \"Unlink\",\n showTotalButton: \"Show Totals\"\n },\n estimateTable: {\n searchEstimates: \"Search Estimates...\",\n selectedEstimates: \"{0} Estimate(s) selected\",\n estimatesLinked: \"{0} Estimate(s) linked to {1}\"\n },\n addProjectModal: {\n title: \"Add Project\",\n cancel: \"Cancel\",\n save: \"Save\",\n saveHint: \"Save the Project without linking Estimates\",\n saveAndLink1: \"Save and \",\n saveAndLink2: \"Link\",\n saveAndLinkHint: \"Save the Project and link selected Estimates\"\n },\n notification: {\n title: \"Unlinked Estimates\"\n },\n sagas: {\n errors: {\n loadHiddenEstimateIds: \"Error loading hidden unlinked estimates\",\n updateHiddenEstimateIds: \"Error updating hidden unlinked estimates\"\n },\n success: {\n hide: \"Estimate(s) hidden successfully\",\n unhide: \"Estimate(s) unhidden successfully\"\n }\n },\n errors: {\n estimatesMapped: \"All Estimates have been mapped.\",\n estimatesMappedOrHidden: \"All Estimates have been mapped or hidden.\",\n noEstimatesMatchedOrHidden:\n \"No Estimates are visible with the applied filters or they are hidden\",\n noEstimatesMatched: \"No Estimates are visible with the applied filters\",\n noEstimateInsightsAccess:\n \"You don't have access to Estimate Insights. Please remove Bid Total filter to see estimates\",\n errorDuringUndoLinkingTittle: \"Unable to Undo \",\n errorDuringUndoLinkingDescription:\n \"Please try again or go to Project Details to manually unlink the estimate(s).\",\n errorDuringUndoLinkingLinkText: \"Open Project Details\",\n errorDuringUndoLinkingNotification:\n \"Unable to undo linking of estimates\"\n }\n }\n },\n schemas: {\n errors: {\n save: \"Error Saving Project Setup\"\n },\n form: {\n lockedField: \"Locked\",\n required: `{0} is Required`,\n containsNotListedOptions:\n \"The field '{0}' contains value not listed in options\",\n multiSelectListError: \"There was an error saving the multi select field\",\n maxLength: \"{0} exceeded maximum {1} characters limit\"\n },\n yupValidationErrors: {\n tableField: {\n valueNotInTheList: \"The table field '{0}' contains value not listed in options for the following column(s): {1} \"\n },\n singleSelect: {\n valueNotInTheList: \"The field '{0}' has a value not listed in options\"\n },\n },\n setup: {\n fieldName: \"Field Name\",\n useLengthLimit: \"Use Character Length Limit\",\n lengthLimit: \"Length Limit\",\n defaultLimitExceeded: \"Value should not exceed default limit of {0} characters.\",\n lengthLimitDescription: \"Specify max number of characters in project field value.\",\n numberLengthLimitDescription: \"Specify max quantity of numbers to the left of the decimal point.\",\n defaultValue: \"Default Value\",\n defaultValueDescription: \"Specify the default value for project field. It will be used as initial value during project creation and import.\",\n useDefaultValue: \"Use Default Value\",\n columnName: \"Column Name\",\n standardValues: \"Standard Values\",\n listValues: \"Values in the List\",\n required: \"Required\",\n webDisplayValue: \"Web Display Value\",\n desktopDisplayValue: \"Desktop Display Value\",\n enabled: \"Enabled\",\n editableByAdmin: \"Editable by Admin only\",\n managedByCompanyAdmin: \"Managed by Company Admin\",\n displaySum: \"Display Sum\",\n lockable: \"Lockable\",\n fieldNamePlaceholder: \"Field Name\",\n columnNamePlaceholder: \"Column Name\",\n quickEntry: \"Quick Entry\",\n quickEntryInfo: \"Allow users to add new values as needed.\",\n columnLimit: \"Only 6 columns are allowed for this field.\",\n addColumn: \"Add Column\",\n multiSelect: \"Multi Selection\",\n multiSelectInfo:\n \"Allow users to select multiple values. Field will not be able to revert back to single selection after changes are saved.\",\n multiSelectModal: {\n title: \"Enable Multi Selection List\",\n body:\n \"Field will not be able to revert back to single selection after changes are saved.\"\n },\n sort: \"Sort\",\n sortAlpha: \"Sort Values Alphabetically\",\n sortAlphaShort: \"Sort Alphabetically\",\n customSort: \"Custom Sort Values\",\n customSortShort: \"Custom Sort\",\n fullProjectTrackingOnly:\n \"Available with the full version of Project Tracking\",\n fieldList: {\n section: \"Section\",\n addFields: \"Add Fields\",\n help: \"Help me choose\",\n dragSectionTooltip: \"Drag this to the right to create a new section!\",\n dragFieldTooltip: \"Drag this to the section you want to add it to!\",\n helpPopoverDescription: `When creating a 'New Estimate from Project Tracking' in HeavyBid,\n the value you place in this field is what will be automatically\n placed into the new estimate field to which it is mapped. You can\n map fields in 'Customize Setup', by adjusting the 'Map Fields to\n HeavyBid' as you see fit.`,\n helpPopoverTitle: \"Instructions\"\n },\n sections: {\n name: \"Section Name\",\n fields: \"Fields\",\n dragFields: \"Drag Fields here\"\n },\n examples: {\n close: \"Close\",\n types: \"Types of Fields\",\n text: {\n name: \"Text\",\n description:\n \"Use for short pieces of information that might include numbers, letters, or both\",\n examples: [\"Code\", \"Contact Name\", \"Title\", \"Email Address\"],\n alt: \"Text Field\"\n },\n note: {\n name: \"Note\",\n description:\n \"Use for long descriptions or multiple lines of information\",\n examples: [\"Notes\", \"Job Description\"],\n alt: \"Note Field\"\n },\n percentage: {\n name: \"Percentage\",\n description: \"Use for numerical information displayed in percentages\",\n examples: [\"Markup %\"],\n alt: \"Percentage Field\"\n },\n number: {\n name: \"Number\",\n description: \"Use for numerical information (but not money)\",\n examples: [\"Quantity\", \"Age\"],\n alt: \"Number Field\"\n },\n currency: {\n name: \"Currency\",\n description: \"Use for dollar amounts\",\n examples: [\"Cost\", \"Price\"],\n alt: \"Currency Field\"\n },\n date: {\n name: \"Date\",\n description:\n \"Use for events that have a date, but where the time of day is not important\",\n examples: [\"Bid date\", \"Due date\"],\n alt: \"Date Field\"\n },\n dateTime: {\n name: \"Date/Time\",\n description: \"Use for events that need both a date and a time\",\n examples: [\"Meetings\", \"Deadlines\"],\n alt: \"Date and Time Field\"\n },\n selectionList: {\n name: \"Selection List\",\n description:\n \"Like a text field, but choose options from a limited list instead of typing in any value\",\n examples: [\"Status\", \"Business unit\", \"Region\"],\n alt: \"Selection List Field\"\n },\n hyperlink: {\n name: \"Hyperlink(s)\",\n description: \"Use for linking to other websites\",\n examples: [\"Dropbox\", \"Google Drive\", \"DOT bid listings\"],\n alt: \"Links Field\"\n },\n yesNo: {\n name: \"Yes/No\",\n description:\n \"Use for simple on/off options, such as on/off, yes/no, true/false\",\n examples: [\"Needs Approval\", \"Reviewed\"],\n alt: \"Checkbox Field\"\n },\n checklist: {\n name: \"Checklist\",\n description: \"Use for tracking simple on/off options\",\n examples: [\"Completed\", \"Tracked\"],\n alt: \"Checklist Field\"\n },\n location: {\n name: \"Location\",\n description:\n \"Use for dropping a pin to show the location of a project\",\n alt: \"Location Field\"\n },\n states: {\n name: \"List of States\"\n },\n custom: {\n name: \"Custom\"\n },\n bidResults: {\n name: \"Bid Results\"\n },\n estimates: {\n name: \"Estimates\"\n },\n preconId: {\n name: \"Pre-Con ID\"\n },\n company: {\n name: \"Company\",\n description: \"Use for selecting a company for a project\",\n examples: [\"On-site Sub\", \"Trucking Sub\"],\n alt: \"Company Field\"\n },\n contact: {\n name: \"Contact\",\n description: \"Use for selecting a contact for a project\",\n examples: [\"Project Admin\", \"Dispatcher\"],\n alt: \"Contact Field\"\n },\n // hJJob: {\n // name: \"Job\",\n // description: \"Use to tie a HeavyJob job to Project\",\n // alt: \"Job Field\",\n // empty: \"No jobs available for this Business Unit\",\n // noAccess: \"You do not have access to view this job.\",\n // noAccessCode: \"----\"\n // },\n table: {\n name: \"Table\",\n description: \"Use for creating a table in a project\",\n alt: \"Table Field\",\n\n },\n calculated: {\n name: \"Calculated\",\n description: \"Use for creating a dynamically calculated value in a project\",\n alt: \"Calculated Field\",\n }\n },\n calculated: {\n variablesNamesColumn: \"Variable Name\",\n variablesFieldsColumn: \"Value\",\n variablesTableName: \"Calculation Values\",\n addVariableBtn: \"Add Value\",\n addVariableTooltip: \"A Number field, Currency field, or Table field with a Number column set to ‘Display Sum’ must be set up before adding a Calculation Value\",\n formulaInputLabel: \"Formula\",\n previewLabel: \"Preview\",\n chooseProject: \"Choose Project\",\n errors: {\n invalidFormula: \"Invalid formula.\",\n invalidFormulaVariable: \"Unknown variable {0}.\",\n invalidFormulaConstant: \"Invalid constant value {0} .\",\n invalidFormulaOperator: \"Unknown operator {0}.\",\n invalidVariableField: \"Variable value does not exist.\",\n duplicateVariableName: \"Variable name already exists.\",\n invalidVariableName: \"Variable name invalid.\",\n requiredVariableName: \"Variable name required.\",\n invalidCalculationField: \"Invalid {0} calculated field setup.\",\n maxLength: \"Variable name to long.\"\n },\n instructionsTooltip: {\n header: \"Instructions\",\n description: \"Type in a formula using the variable of the assigned value along with the operator for the formula\",\n allowedOperators: \"Allowed operators:\",\n exampleFormula: \"Example formula:\",\n },\n hideCalculations: \"Hide calculations\",\n showCalculations: \"Show calculations\"\n },\n selectionList: {\n deleteAllDescription: \"Delete all values in the selection list?\",\n import: {\n importValues: \"Import Values\",\n selectFile: \"Select File\",\n preview: \"Preview\",\n filesDescription: \"Import values into the selection list from an Excel or CSV file.\",\n pleaseNote: \"Please Note\",\n noteDescription: \"Only the first two columns are imported into the selection list\",\n skipFirstRow: \"First row contains column headers\",\n previewColumn: \"Column\",\n webValue: \"Web Value\",\n desktopValue: \"Desktop Value\",\n previewDescription: \"If a value is left blank, the corresponding Web or Desktop Value in the row will be duplicated to fill the blank.\",\n notSupportedFile: \"Accepted file formats: {0}\",\n importSucceed: \"The values have been successfully imported and added to the selection list!\",\n importAgain: \"Import Again\"\n }\n },\n checklist: {\n items: \"Checklist Items\",\n addBtn: \"Add\",\n description: \"Description\"\n },\n canBeImported: \"Able to be imported\",\n canBeSyncedWithHB: \"Able to be synced with HeavyBid\",\n number: {\n number: \"Number\",\n percentage: \"Percentage\"\n },\n contact: {\n warning: {\n title: \"Enable Multi Selection Contact\",\n body: \"Field will not be able to revert back to single selection after changes are saved.\"\n },\n filterBy: \"Filter by Scope of Work\",\n filterPlaceholderText:\n \"Please navigate to Contact Management and create a scope of work to start using this filter\",\n multiSelect: \"Multi Selection\",\n },\n company: {\n warning: {\n title: \"Enable Multi Selection Company\",\n body: \"Field will not be able to revert back to single selection after changes are saved.\"\n },\n filterBy: \"Filter by Company Type\",\n filterPlaceHolderText:\n \"Please navigate to Contact Management and create a company type to start using this filter\",\n multiSelect: \"Multi Selection\",\n },\n errors: {\n tableField: {\n atLeastOneColumn: \"Please add at least one column.\",\n exceedColumnNumberLimit: `A table can only have total of {0} columns.`,\n duplicatedColumName: \"Duplicate column names are not allowed. Please ensure that the column names are unique.\",\n columnMustHasName: \"A column must have a name.\"\n },\n },\n banner: {\n copied: `Copied \"{0}\" field settings from {1} business unit.`,\n multiSelectWarning: \"Field will not be able to revert back to single selection after changes are saved.\",\n hbMappingsWarning: \"Notice: The HeavyBid Integration mappings will not be copied over.\",\n copiedFromTable: `{0} copied from table '{1}' in {2}.`,\n copiedFrom: `{0} copied from {1}.`\n },\n buttons: {\n undo: \"Undo\",\n copyFrom: \"Copy from\"\n }\n\n },\n location: {\n geocoder: {\n placeholder: \"Search for an address or lat/long\",\n dropLatLongPin: \"Drop pin at Latitude: {0} and Longitude: {1}\",\n errorFetchingData: \"There was an error fetching data. Please try again.\"\n }\n }\n },\n import: {\n selectedFile: \"Selected File\",\n sheetSelector: \"Sheet Selector\",\n supportedProjectsFileFormats: \"Only .xls and .xlsx formats are supported\",\n acceptedFileFormat: \"Accepted file formats: .xls, .xlsx\",\n dropFileOrClickHere: \"Please drop your file here or click to select\",\n acceptableValues: \"Acceptable values\",\n adminOnly: \"This field is available to admins only.\",\n acceptableContactValues: \"A value must be in the following format: FirstName LastName (Email). Email is optional\",\n acceptableContactValuesDescription: \"A contact's First and Last Name is required, separated by a space. A contact's Email is optional, wrapped in paranthesis. A contact's Email can be used to distinguish contacts with the same name in different companies.\",\n acceptableValuesOptions: \"Y/N, Yes/No, True/False, T/F, 1/0\",\n acceptableLocationValuesWithGeocoding: \"Note: Only valid lat/long (in the format ##.###,##.###) or valid address (in the format street address, city, state, zip code) will show on the map\",\n exampleValueList: \"Example list of values:\",\n acceptedState: \"Accepted values: Two-character state code\",\n acceptedStateExample: \"(i.e. TX)\",\n acceptedCompanyValue: \"“Name” from existing company in Company List\",\n acceptableCompanyValuesDescription: \"Company name is not case sensitive\",\n percentageExample: \"Use the decimal value for percent fields. Ex: importing '0.7' will display as '70%'\",\n multiSelectSeparators: {\n title:\n \"Choose a separator for multi selection fields that contain multiple values\",\n comma: \"Comma (A,B)\",\n semicolon: \"Semicolon (A;B)\",\n pipe: \"Pipe (A|B)\"\n },\n importResults: {\n title: \"Import Results\",\n previewValidation: \"Preview Validation\",\n emptyMessage: \"Please begin import to view results\"\n },\n validationResults: {\n title: \"Preview Validation\",\n noValidationWarnings: \"No validation warnings to display\",\n copy: \"Copy\",\n header: {\n excelRow: \"Excel Row\",\n message: \"Message\"\n }\n },\n required: \"Required\",\n title: \"Import Projects\",\n input: {\n title: \"File Import\",\n noFile: \"No file chosen\",\n supportedFormat: \"Supported format: .xlsx, .xls\"\n },\n settings: \"Settings\",\n settingOptions: {\n skip: \"Skip\",\n overwrite: \"Overwrite\"\n },\n recordExists: {\n title: \"If a record in the file already exists\",\n skip: \"Skip the record\",\n overwrite: \"Overwrite the record\",\n\n },\n firstRowHeadings: \"First row contains column headers\",\n fields: \"Fields\",\n excelColumn: \"Excel Column\",\n columnMapping: {\n title: \"Column Mapping\"\n },\n clear: \"Clear\",\n preview: {\n title: \"Preview\",\n emptyMessage: \"Please upload file to preview\"\n },\n import: \"Import\",\n cancel: \"Cancel\",\n finish: \"Finish\",\n projectsCreated: `{0} project(s) added`,\n projectsUpdated: `{0} project(s) updated`,\n created: `{0} project(s) with bid results added`,\n updated: `{0} project(s) with bid results updated`,\n importSpinner: \"Importing...\",\n importComplete: \"Complete!\",\n validationSpinner: \"Validation...\",\n validationComplete: \"Complete!\",\n importFailStartAgain: \"Please start again!\",\n validateSpinner: \"Validating\",\n validationSuccess: \"Validation Success\",\n skipped: `{0} skipped`,\n viewErrors: \"View errors\",\n validationWarnings: \"Validation Warnings\",\n row: \"Row\",\n project: \"Project\",\n errors: {\n mappingsErrorNotificationTitle: \"Unable to import projects.\",\n mappingsErrorNotificationMessage: \"Please review your column mapping.\",\n read: {\n title: \"Error reading file\",\n message: \"There was an error reading the selected file.\"\n },\n required: {\n title: \"Required field not assigned\",\n message: `{0} is a required field and needs to be assigned to an Excel column`\n },\n invalid: {\n title: \"Invalid Entry\",\n message: `Value must be a letter`\n },\n duplicate: {\n title: \"Duplicate Value\",\n message: `{0} has same Excel column assignment`\n },\n rowValidation: `{0} and has been skipped`,\n duplicateRow: `Has been skipped because project {0} already exists.`,\n genericImport: `A project name {0} failed to import.`,\n invalidColumn: ` {0}, has an invalid value {1}.`,\n lockedField: ` {0}, cannot import to a locked field.`,\n requiredColumn: ` {0} is missing a required field,`,\n missingValue: ` {0}, has a value {1} that doesn't match the current selection list options,`,\n missingMultiValue: ` {0}, has values {1} that don't match the current selection list options,`,\n fileType: {\n title: `Incorrect file type ({0})`,\n message: `Only .xlsx & .xls file types are supported`\n },\n fieldsValidation: {\n invalidTextValue: \"Invalid text value '{0}' in {1}' field.\",\n invalidLinksValue: \"Invalid links value '{0}' in {1}' field.\",\n invalidChecklistValue: \"Invalid checklist value '{0}' in '{1}' field.\",\n invalidPreConIdValue: \"Invalid PreCon id value '{0}' in '{1}' field.\",\n invalidPreConIdPrefix:\n \"Invalid PreCon id prefix value '{0}' in '{1}' field.\",\n invalidBidResultsValue: \"Invalid bid results value '{0}' in '{1}' field.\",\n invalidEstimatesValue: \"Invalid estimates value '{0}' in '{1}' field.\",\n invalidNumberValue: \"Invalid number value '{0}' in '{1}' field.\",\n invalidDateValue: \"Invalid date value '{0} in '{1}' field.\",\n invalidBooleanValue: \"Invalid boolean value '{0}' in '{1}' field.\",\n invalidListSelection: \"Invalid selection '{0}' in '{1}' field.\",\n invalidLocationValue: \"Invalid location value '{0}' in {1}' field.\",\n exceededCharactersLength: \"Exceeded characters length limit for field {1}.\",\n invalidLocationLatitudeValue:\n \"Invalid location latitude '{0}' in '{1}' field.\",\n invalidLocationLongitudeValue:\n \"Invalid location longitude '{0}' in '{1}' field.\",\n noAccess: \"You have no access to edit '{1}' field.\",\n duplicateEstimates: \"Duplicate estimates are linked to this project. Remove one of the duplicates from '{1}' then save your project.\",\n locked: \"The '{1}' field is locked.\",\n required: \"A required '{1}' field is missing.\",\n rowWillBeSavedInInvalidState: \"The row will be saved in invalid state.\",\n invalidValuesWillBeSkipped: \"Invalid values will not be imported.\",\n invalidValuesWereSkipped: \"Invalid values were not imported.\",\n invalidTableColumnsValue: \"Invalid table column count for '{1}' field. Table field must have at least 1 column.\",\n maxTableColumnsCount: \"Invalid table column count for '{1}' field. Table field can have 6 columns at max.\",\n duplicatedContactWithProvidedInfo: \"Invalid contact for '{1}' field. There are two or more contacts in Contact Management that matches the given info {0}. Please revise the name for those contacts.\",\n notFoundContactWithProvidedInfo: \"Invalid contact for '{1}' field. There are no contacts in Contact Management that matches the given info {0}. Please consider creating the contact.\",\n firstAndLastNameAreRequiredForContactSearch: \"Invalid contact for '{1}' field. First and last name are required.\",\n invalidImportContactFormat: \"Invalid contact format for '{1}' field. Accepted format: FirstName LastName (Email).\",\n duplicatedCompanyWithProvidedName: \"Invalid company name for '{1}' field. There are two or more companies in Contact Management that have the name of {0}. Please revise the name for those companies.\",\n notFoundCompanyWithProvidedName: \"Invalid company name for '{1}' field. There are no companies in Contact Management that have the name of {0}. Please consider creating a company with the name {0}.\",\n unableToAutomaticallyGeocodePlace: \"Unable to automatically geocode coordinates by place {0} in '{1}' Field.\",\n valueImportedAsAddressText: \"Value imported as address text.\",\n invalidTakeoffsValue: \"Invalid takeoff value {0}.\",\n maxTakeoffsNumber: \"The limit of 1000 takeoffs has been exceeded. You currently have {0} rows.\",\n maxProjectPayItemsNumber: \"The limit of 1000 project pay items has been exceeded. You currently have {0} rows.\",\n invalidTakeoffRow: \"Invalid takeoff row [{0}].\",\n invalidTakeoffField: \"Invalid takeoff {0} field.\",\n invalidTakeoffId: \"Invalid takeoff id {0}.\",\n requiredTakeoffField: \"Required takeoff {0} field is missing.\",\n requiredProjectPayItemField: \"Required '{0}' field is missing.\",\n duplicateProjectPayItemCodeValue: \"Code {0} is duplicated.\",\n takeoffColumnShouldBeUnique: \"{0} value '{1}' already exist.\",\n duplicateProjectName: \"Invalid Project name {0}. Project names must be unique.\",\n maxPayItemsNumber: \"The limit of {0} Pay Items has been exceeded. You currently have {1} rows.\",\n requiredPayItemsField: \"Required '{0}' field is missing.\",\n duplicatePayItemCodeValue: \"Code {0} is duplicated.\"\n },\n locationType: {\n invalidLatitude:\n \"{0} has an invalid latitude value. It must be between -90 and 90.\",\n invalidLongitude:\n \"{0} has an invalid longitude value. It must be between -180 and 180.\",\n isNullIsland:\n \"{0} has an invalid value. Location is set to Null Island (0,0).\"\n }\n },\n notes: {\n warning: \"Warning\",\n note: \"Note\",\n preConIdDisabled: `You have the {0} field set to 'disabled'`,\n preConIdEnable: `You have the {0} field set to \"enabled\"`,\n preConIdWillBeSet: `Therefore, {0} field values for the new project(s) will be auto-generated`,\n preConIdWillNotBeSet: `Therefore, {0} field values for the new project(s) will not be auto-generated`,\n noProjectsWithPreConId: `However, there are currently no projects that have a value for the {0}\n field. Therefore, {0} field values for the new project(s) will not be auto-generated`,\n pleaseEnablePreConId: `If you want these values auto-generated, please enable the {0} field in Customize Setup > Projects`,\n createProjectWithPreConId: `If you want these values auto-generated, please save a project with a {0} value first`,\n pleaseDisablePreConId: `If you do not want these values auto-generated, please disable the {0} field\n in Customize Setup > Projects`,\n nextPreConId: `The next {0} field value is`,\n allCurrentProjectsDontHavePreConId: `However, there are currently no projects that have a value for the {0}\n field. Therefore, {0} field values for the new project(s) will not be auto-generated`\n }\n },\n charts: {\n types: {\n pie: \"Pie\",\n line: \"Line\",\n bar: \"Bar\"\n },\n options: {\n title: \"Chart Options\",\n type: \"Chart Type:\",\n layout: {\n title: \"Layout:\",\n vertical: \"Vertical\",\n horizontal: \"Horizontal\"\n },\n projectCount: \"Project Count\",\n total: \"Total\",\n xAxis: \"x-Axis:\",\n groupBy: \"Group By:\",\n yAxis: \"y-Axis:\",\n totalBy: \"Total By:\",\n selectField: \"Select Field:\",\n sliceOptions: \"Slice Options:\",\n inputPlaceholder: \"Select\",\n clear: \"(clear)\"\n }\n },\n bidResults: {\n title: \"Bid Results\",\n table: {\n noData: \"Add Bid Results\",\n noDataReadOnly: \"No Bid Results to Display\",\n leftOnTable: \"Left on Table\",\n percentFromLowBid: \"% From Low Bid\",\n fromLowBid: \"From Low Bid\",\n winner: \"Winner\",\n companyName: \"Company Name\",\n amount: \"Bid Total\",\n share: \"Share\",\n copySuccess: \"Added to clipboard!\",\n copySuccessTwo:\n \"Paste your bid results into Excel or in the body of an email.\",\n copyFailure: \"There was a problem copying your bid results.\",\n copyFailureTwo:\n \"Please make sure you are on a browser that is compatible with this application.\"\n },\n view: {\n toolTip: {\n statsFor: \"Stats for\",\n won: \"Won\",\n lost: \"Lost\",\n dollars: \"Dollars\",\n percent: \"Percent\",\n hitRatio: \"Hit Ratio\",\n fromLowBid: \"From Low Bid\",\n leftOnTable: \"Left on Table\"\n }\n }\n },\n calendars: {\n subscribePanel: {\n title: \"Subscribe to Calendars\",\n links: \"These links are unique to your account\",\n visible: \"iCal calendars are visible to anyone with the link\",\n openAccountSettingsButton: \"Open calendar settings\",\n openAccountSettingsAfter: \" to link external accounts\"\n },\n card: {\n copy: {\n title: \"Copied to Clipboard\",\n message: `Calendar link copied for {0}`\n },\n readlonlyLinkLabel: \"Shareable iCal Link (read only)\",\n nylasLinkLabel: \"Outlook Calendar\",\n createLink: \"Create Link\",\n createReadonlyLink: \"Create Shareable iCal Link\",\n createNylasLinkk: \"Create Outlook Connection\",\n deleteReadonlyLink: \"Delete iCal Link\",\n deleteNylasLink: \"Delete Outlook Connection\",\n options: \"Options\",\n deleteReadonlyConfirmation: `Are you sure you want to delete your existing iCal link? This will break existing integrations.`,\n deleteHcssConnectConfirmation: `Are you sure you want to delete your existing connected calendar link? This will remove the existing events from your linked calendar.`,\n deleteReadonlyWarning:\n \"This will delete your existing iCal link, which will break existing integrations.\",\n deleteNewReadonlyLink:\n \"A new link will be created to replace the old one.\",\n deleteHcssConnectWarning:\n \"This will delete your existing calendar events from the currently linked calendar.\",\n deleteNewHcssConnectLink:\n \"New events will be created on the newly linked calendar.\",\n deleteTitle: \"Delete Link\",\n continue: \"Continue\",\n cancel: \"Cancel\",\n lastSync: `Last sync: {0}`,\n none: \"none\",\n syncWarning:\n \"Your calendar client may take between a few minutes and a few hours to update. Check your client’s settings if you need quicker updates.\"\n }\n },\n hcssConnect: {\n subscribePanel: {\n title: \"Connect Your Calendar Accounts\",\n connectAccountButton: \"Connect a New Account\",\n linkedAccounts: \"Linked Accounts\"\n },\n card: {\n delete: \"Delete\",\n deleteConfirmation: `Are you sure you want to delete your existing calendar account? This will break existing integrations.`,\n deleteTitle: \"Delete Link\",\n continue: \"Continue\",\n cancel: \"Cancel\",\n deletePopover: `Remove all existing Outlook calendar connections in the \"Subscribe to Calendar\" panel before removing this account.`,\n helper: {\n error: `There was an error when trying to access this account. Please ensure\n this {0} has access to calendars and is working properly.`,\n recommendDelete: \" We recommend deleting and reconnecting this subscription to the account.\"\n }\n },\n errors: {\n fetchingAccount: \"Error fetching calendar account(s).\"\n }\n\n },\n tutorials: {\n close: {\n message: \"You can always access this tutorial by going to the help menu!\",\n button: \"Close\"\n },\n banner: {\n yes: \"Yes\",\n no: \"No\"\n },\n projectTutorial: {\n create: \"This allows you to create a new project.\",\n details:\n \"Clicking on the project name allows you to make changes to the project after it has already been created.\",\n rearrange:\n \"Columns can be rearranged by clicking and dragging the column headers left or right.\",\n group:\n \"Click and drag the column header into this area to group results by that column.\",\n other:\n \"Other customizations and reports are available from the options menu or by right clicking a column header.\",\n save:\n \"Once you have the table setup in the way you like, you can save it as a template. Use the options menu to save new templates, or to select a default one.\",\n customizable:\n \"Remember, everything in Project Tracking is customizable! Use the Project Tracking menu to access the Customize Projects page, or to import any existing projects from Excel.\",\n complete: \"Complete Tutorial!\"\n }\n },\n smtp: {\n title: \"Email Server Settings\",\n subtitle: `Configure the email settings for business unit: {0}`,\n subtitle2: `Configure company email settings`,\n cancel: \"Cancel\",\n save: \"Save & Test\",\n oauth:\n \"Personal email settings have been configured for the current user. These settings will supersede all other configurations when sending emails.\",\n home: \"Home\",\n previouslyConfigured:\n \"SMTP settings have been configured for this business unit. If necessary, you can provide new settings.\",\n changeSettings: \"Change Settings\",\n resend: \"Resend Test Message\",\n username: \"Username\",\n server: \"Server\",\n port: \"Port\",\n password: \"Password\",\n validations: {\n serverAddressBlank: \"Server Address can't be blank.\",\n portBlank: \"Port can't be blank.\",\n usernameBlank: \"Username can't be blank.\",\n passwordBlank: \"Password can't be blank.\"\n },\n messages: {\n saved: {\n success: {\n title: \"Saved\",\n message: \"SMTP settings for this business unit have been saved.\"\n },\n error: {\n title: \"Unable to Save\",\n message: \"An error occurred while trying to send the test message.\"\n }\n },\n test: {\n success: {\n title: \"Test Message Sent\",\n message: `A test message was sent to \"{0}\".`\n },\n unable: {\n title: \"Unable to Send\",\n message: \"An error occurred while trying to send the test message.\"\n },\n failure: {\n title: \"Failed to Send\",\n message: \"The current user doesn't have a valid email address.\"\n }\n }\n }\n },\n users: {\n messages: {\n saved: {\n success: \"User Preferences\",\n error: \"Error saving user preferences\"\n }\n },\n oAuthConfig: {\n getUserError: {\n title: \"Error\",\n message: \"Unable to retrieve your email settings\"\n },\n testMessageError: {\n title: \"Test Failed\",\n message:\n \"Unable to send test messageg. Check to make sure your login hasn't expired.\"\n },\n testMessageSuccess: {\n message: `Test message successfully sent {0}.`,\n title: \"Test successful!\"\n }\n }\n },\n heavyBid: {\n integrationSetup: {\n sections: {\n dataSyncPreferences: {\n title: \"Data Sync Preferences\",\n description: \"This setting manages the data priority for mapped fields during a sync with HeavyBid. If you are unsure what to choose, pick {0}.\",\n descriptionBold: \"Neither\",\n }\n }\n },\n code: \"Code\",\n name: \"Name\",\n description: \"Description\",\n lastActivity: \"Last Activity\",\n activeEstimate: \"Synced Estimate\",\n excludedEstimate: \"Excluded Estimate\",\n division: \"Division\",\n projectName: \"Project Name\",\n projectNumber: \"Project Number\",\n status: \"Status\",\n engineer: \"Engineer\",\n estimator: \"Estimator\",\n owner: \"Owner\",\n bidDate: \"Bid Date\",\n startDate: \"Start Date\",\n reviewDate: \"Review Date\",\n createdDate: \"Created Date\",\n bidTotal: \"Bid Total\",\n totalCost: \"Total Cost\",\n state: \"State\",\n processedStatus: {\n title: \"Processed Status\",\n 0: \"Queued\",\n 1: \"Processing\",\n 2: \"Success\",\n 3: \"Failure\",\n 4: \"Queued Large\"\n },\n typeOfWork: \"Type of Work\",\n filter1: \"Tag 1\",\n filter2: \"Tag 2\",\n filter3: \"Tag 3\",\n filter4: \"Tag 4\",\n filter5: \"Tag 5\",\n filter6: \"Tag 6\",\n text1: \"Text 1\",\n text2: \"Text 2\",\n text3: \"Text 3\",\n text4: \"Text 4\",\n text5: \"Text 5\",\n text6: \"Text 6\",\n text7: \"Text 7\",\n text8: \"Text 8\",\n text9: \"Text 9\",\n text10: \"Text 10\",\n text11: \"Text 11\",\n text12: \"Text 12\",\n text13: \"Text 13\",\n text14: \"Text 14\",\n text15: \"Text 15\",\n text16: \"Text 16\",\n text17: \"Text 17\",\n text18: \"Text 18\",\n text19: \"Text 19\",\n text20: \"Text 20\",\n integer1: \"Integer 1\",\n integer2: \"Integer 2\",\n integer3: \"Integer 3\",\n integer4: \"Integer 4\",\n integer5: \"Integer 5\",\n number1: \"Number 1\",\n number2: \"Number 2\",\n number3: \"Number 3\",\n number4: \"Number 4\",\n number5: \"Number 5\",\n number6: \"Number 6\",\n number7: \"Number 7\",\n number8: \"Number 8\",\n number9: \"Number 9\",\n number10: \"Number 10\",\n number11: \"Number 11\",\n number12: \"Number 12\",\n number13: \"Number 13\",\n number14: \"Number 14\",\n number15: \"Number 15\",\n number16: \"Number 16\",\n number17: \"Number 17\",\n number18: \"Number 18\",\n number19: \"Number 19\",\n number20: \"Number 20\",\n date1: \"Date 1\",\n date2: \"Date 2\",\n date3: \"Date 3\",\n date4: \"Date 4\",\n date5: \"Date 5\",\n address: \"Location\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n manhours: \"Manhours\",\n estimatesExtended: \"EstimatesExtended\",\n estimateInfo: \"Estimate Info\",\n tags: \"Tags\",\n userDefinedText: \"User Defined Text\",\n userDefinedIntegers: \"User Defined Integers\",\n userDefinedNumbers: \"User Defined Numbers\",\n userDefinedDates: \"User Defined Dates\",\n projectTrackingField: \"Project Tracking Field\",\n heavyBidField: \"HeavyBid Field\",\n heavyBidInfo: `HeavyBid 2019.1 and 2020.0 systems will say 'New Estimate from HeavyBid Pre-Construction'. This integration is available to all systems starting with HeavyBid 2020.2`,\n multiSelectSyncInfo:\n \"If a MultiSelect List field is mapped to a HeavyBid field and the Project Tracking data sync preference is chosen, then only first value in the list will be synced to HeavyBid. The first value is determined by the sort order chosen in the field options.\"\n },\n region: {\n us: \"United States\",\n au: \"Australia\",\n fr: \"France\",\n gb: \"United Kingdom\",\n es: \"Spain\",\n de: \"German\",\n ca: \"Canada\"\n },\n account: {\n confirm: {\n confirm: \"Continue\",\n confirming: \"Confirming\",\n discover: \"Discover More\",\n enterEmail: \"Enter your email address to see quote details.\",\n invalidEmail: \"A valid email address is required.\",\n invalidMessage: \"Incorrect email or link.\",\n verifyTitleRfq: \"Verify your email address to see quote details\",\n verifyTitleProposal:\n \"Verify your email address to see the quote proposal\",\n signIn: \"Already have an account? Sign-In\",\n signUp: \"Sign Up Now\",\n slogan: \"One website for all your bid management needs\",\n welcome: \"Welcome\",\n modules: {\n projects: \"Track projects from start to finish\",\n estimates: \"Bid faster and smarter\",\n quotes: \"Easily manage the solicitation and quote process\",\n contacts: \"Manage all your contacts in one place\"\n }\n },\n login: {\n discover: \"Discover More\",\n login: \"Login\",\n feature1: \"Estimate your quote once and send to multiple contractors.\",\n feature2: \"Access your quote online.\",\n feature3: \"Keep track of communications.\",\n feature4: \"Send quotes to any general contractor.\",\n feature5: \"Generate professional proposals for your quotes.\",\n feature6: \"Manage your contacts online.\",\n signUp: \"Learn More\",\n subTitle1: \"Your versatile quote\",\n subTitle2: \"management solution.\"\n },\n emailVerification: {\n success: \"You're all set!\",\n successMsg:\n \"We were able to successfully verify your email. Give us a few minutes to look for any other quotes linked to your email address. Click the button below to navigate back to the home page.\",\n successBtn: \"Go to Home Page\",\n fail: \"OOPS!\",\n failMsg:\n \"Something went wrong with verifying your email. Please try to click the link from our confirmation email again.\"\n }\n },\n breadcrumbs: {\n dashboard: \"Dashboard\",\n quotes: \"Quotes\",\n quoteDetails: \"Current Quote\"\n },\n genericModal: {\n cancel: \"Cancel\",\n close: \"Close\",\n confirm: \"Confirm\",\n continue: \"Continue\"\n },\n loaders: {\n loading: \"Loading...\",\n updating: \"Updating...\"\n },\n maps: {\n default: \"Default\",\n satellite: \"Satellite\"\n },\n notFound: {\n back: \"Back to Homepage\",\n message: \"We can't seem to find the page you requested.\",\n title: \"There's nothing here\"\n },\n genericError: {\n back: \"Back to Homepage\",\n message:\n \"There's been an issue on our end. We're working as fast as possible to get things back up and running. Contact HCSS Support if you need help immediately.\",\n title: \"Something went wrong\"\n },\n smartdrive: {\n copyLink: \"Copy Link\",\n download: \"Download\",\n size: \"Size:\",\n uploaded: \"Uploaded:\",\n deleteFile: \"Delete File?\",\n deleteMessage: \"Are you sure you want to delete \",\n warning: \"Warning: This action is immediate and cannot be undone.\",\n confirm: \"Confirm Delete\",\n cancel: \"Cancel\",\n table: {\n uploadFiles: \"Upload Files\",\n download: \"Download\",\n selected: \"Selected\",\n all: \"All\",\n delete: \"Delete\",\n noFiles: \"No Files to display\"\n }\n },\n groupSubMenu: {\n week: \"Week\",\n month: \"Month\",\n year: \"Year\",\n day: \"Day\",\n quarter: \"Quarter\"\n },\n common: {\n create: \"Create\",\n modules: {\n projectTracking: \"Project Tracking\",\n estimating: \"Estimate Insights\",\n quotes: \"Quote Management\",\n contacts: \"Contact Management\"\n }\n },\n contact: {\n contactColumnNames: {\n firstName: \"First Name\",\n lastName: \"Last Name\",\n title: \"Title\",\n cellNumber: \"Cell Number\",\n phoneNumber: \"Phone Number\",\n emailAddress: \"Email Address\",\n mainContact: \"Main Contact\",\n office: \"Office\",\n notes: \"Notes\",\n scopes: \"Scopes\"\n },\n vendorColumnName: {\n code: \"Code\",\n heavyBidCode: \"Vendor Code\",\n name: \"Name\",\n type: \"Type\",\n isBonded: \"Is Bonded\",\n bondRate: \"Bond Rate %\",\n products: \"Scopes of Work\",\n notes: \"Notes\",\n accountingCode: \"Accounting Code\"\n },\n vendorList: {\n confirmDelete: \"Delete Company\"\n },\n contactList: {\n confirmDelete: \"Delete Contact\"\n },\n mainInfo: {\n code: \"Code\",\n name: \"Name\",\n email: \"Email\",\n phoneNumber: \"Phone\",\n communicationMethod: \"Communication Method\",\n webAddress: \"Website\",\n companyType: \"Company Type\",\n },\n detailInfo: {\n nickname: \"Office Nickname\",\n addressLine1: \"Address Line 1\",\n addressLine2: \"Address Line 2\",\n city: \"City\",\n stateProvince: \"State/Province\",\n postalCode: \"Zip Code\",\n countryRegion: \"Country\",\n faxNumber: \"Fax\",\n note: \"Notes\",\n isBonded: \"Is Bonded\",\n bondRate: \"Bond Rate %\",\n accountingCode: \"Accounting Code\",\n clear: \"(Clear)\",\n administrativeDivisions: {\n states: \"States\",\n provinces: \"Provinces\"\n }\n },\n scopeOfWork: {\n select: \"Select Scopes\",\n scopesOfWork: \"Scopes of Work\"\n },\n minorityStatus: {\n confirmDelete: \"Delete Minority Status\",\n minorityStatuses: \"Minority Statuses\",\n notice: \"first save your vendor before you can add MS's\"\n },\n setup: {\n errors: {\n companyTypeFilterRequired: \"At least one filter is required for Company Type filter for field '{0}'\",\n contactTypeFilterRequired: \"At least one filter is required for Scope of Work filter for field '{0}'\",\n tableTypeEmptyColumn: \"The table field '{0}' requires at least 1 column\",\n tableTypeMoreThan6Columns: \"The table field '{0}' cannot have more than 6 columns\"\n }\n },\n import: {\n errors: {\n officeNicknameRequired: {\n title: \"nicknameRequired\",\n message: \"Nickname required when mapping address fields\"\n }\n }\n }\n },\n unsupportedBrowser: {\n iFrameFallback: \"Unable to display content. This browser is not supported.\",\n bannerTitle:\n \"You may experience performance issues and bugs in your current browser.\",\n bannerDetail: \"See a full list of HCSS recommended browsers\",\n here: \"here\",\n dismiss: \"Dismiss\"\n },\n autoSaveIndicator: {\n saving: \"Saving...\",\n saved: \"Saved\",\n errorText: \"We encountered an issue. Click here to try again.\"\n },\n estimatesLoadIndicator: {\n loading: \"Loading...\"\n },\n remarkable: {\n estimateInsights: {\n textHeader: \"You were tagged in a comment on an Estimate ({0}):\"\n },\n projectTracking: {\n textHeader: \"You were tagged in a comment on a Project ({0}):\"\n },\n quoteManagement: {\n textHeader:\n \"You were tagged in a comment on a quote sent to {0} {1} from {2}:\"\n }\n },\n modals: {\n columnChooserModal: {\n title: \"Show/Hide Columns\",\n kpisTitle: \"Show/Hide KPIs\",\n buttons: {\n hide: \"Hide All\",\n show: \"Show All\",\n collapseAll: \"Collapse All\",\n expandAll: \"Expand All\",\n close: \"Close\"\n },\n inputs: {\n search: {\n label: \"Search\",\n placeholder: \"Search fields...\"\n },\n dropdown: {\n sortBy: {\n label: \"Sort by\",\n placeHolder: \"Sort by...\"\n },\n sortByOptions: {\n default: \"Default\",\n alphabetically: \"Alphabetically\",\n fieldType: \"Field Type\"\n }\n },\n radio: {\n summaryType: {\n label: {\n sum: \"Sum\",\n avg: \"Avg\"\n }\n }\n }\n },\n noData: {\n title: \"No results found\"\n }\n }\n },\n emailSubscription: {\n projectTemplatesDropdown: {\n label: \"Project List Template(s):\"\n },\n recipientsDropdown: {\n label: \"Recipient(s):\"\n },\n subscriptionDetail: {\n defaultName: \"Project List Email Subscription\",\n labels: {\n description: \"Description:\",\n emailSubject: \"Email Subject:\"\n },\n buttons: {\n save: \"Save\",\n preview: \"Preview\",\n sendEmail: \"Send Email\",\n bulkEditRecipients: \"Bulk Edit Recipients\",\n copyRecipients: \"Copy Recipients\"\n },\n deleteConfirm: `Are you sure you want to delete subscription '{0}'?`\n },\n bulkEditRecipients: {\n title: \"Bulk Edit Recipients\",\n header: \"Enter a comma delimited list of email addresses:\",\n invalidEmails: \"The following emails are invalid and will not be added:\",\n cancel: \"Cancel\",\n submit: \"Submit\"\n },\n subscriptionFrequencyDropdown: {\n days: {\n sunday: \"Sunday\",\n monday: \"Monday\",\n tuesday: \"Tuesday\",\n wednesday: \"Wednesday\",\n thursday: \"Thursday\",\n friday: \"Friday\",\n saturday: \"Saturday\",\n },\n labels: {\n frequency: \"Frequency\",\n time: \"Time\",\n timeZone: \"Time Zone\"\n },\n dateResultDisplay: {\n every: `Every {0}`,\n at: `at {0}`,\n time: `{0} time`\n },\n },\n subscriptionStatusIndicator: {\n statuses: {\n paused: \"PAUSED\",\n pending: \"PENDING\",\n active: \"ACTIVE\",\n error: \"ERROR\"\n },\n buttons: {\n pause: \"PAUSE\",\n start: \"START\"\n },\n tooltips: {\n pauseSubs: \"Pause Subscription\",\n startSubs: \"Start Subscription\"\n }\n },\n validation: {\n name: {\n hasAName: \"Subscription must have a name.\",\n hasUniqueName: \"Subscription must have an unique name.\"\n },\n templates: {\n hasOneTemplate: \"Subscription must have at least one template.\"\n },\n recipients: {\n hasOneRecipient: \"Subscription must have at least one recipient.\",\n hasInvalidRecipients: \"The recipient list has at least one user that has been deleted from HCSS Credentials or no longer has access to Pre-Construction. Please remove all the invalid users before saving.\"\n },\n time: {\n hasTime: \"Subscription must have a time.\"\n },\n timeZone: {\n hasTimeZone: \"Subscription must have a time zone.\"\n },\n day: {\n hasDay: \"Subscription must have a day.\"\n }\n },\n notification: {\n subscription: \"Subscription\",\n saveFailed: \"Failed to save subscription. Please try again.\",\n deleteFailed: \"Failed to delete subscription. Please try again.\",\n getPreviewFailed: \"Failed to load email previews of the subscription.\",\n sendingEmailFailed: \"Failed to trigger email for the subscription.\",\n sendingEmailStarted: \"Subscription email sending has started.\",\n sendingEmailSuccess: \"Subscription email sent successfully.\",\n sendingEmailError: \"Error occurred while sending subscription email.\"\n },\n tooltip: {\n invalidUser: \"Invalid User.\",\n removedUser: \"Removed User.\",\n ownedByOtherUser: \"This template is owned by other user.\"\n },\n modal: {\n delete: {\n title: \"Delete subscription\",\n deleteConfirm: `Are you sure you want to delete subscription '{0}'?`\n }\n }\n },\n quickPricing: {\n confirmDeleteTitle: \"Delete Pay Item Library\",\n confrimDelteMessage: \"Are you sure you want to delete version {0} for {1}?\",\n import: {\n title: \"Import Pay Items\",\n noCompanies: \"No Companies exist in Contact Management. Please add a Company to get started.\",\n selectVersion: \"Choose Owner\",\n ownerDropdown: \"Owner\",\n ownerRequired: \"Owner is required\",\n versionName: \"Version Name\",\n versionNameRequired: \"Version name is required\",\n duplicateVersionName: \"Duplicate version name exists for Owner {0}\",\n versionNameTooLong: \"Version name exceeds maximum 1024 character limit\",\n mappingsErrorNotificationTitle: \"Unable to import Pay Items\",\n fileImport: \"File Import\",\n previewValidation: \"Preview Validation\",\n rowWillBeSkipped: \"Row will be skipped.\",\n willBeNewLines: \"{0} Pay Item(s) will be added.\",\n willBeSkipped: \"{0} row(s) will be skipped.\",\n columnTitles: {\n payItemCode: \"Code\",\n payItemDescription: \"Description\",\n unitPrice: \"Unit Price\",\n unit: \"Unit\"\n },\n result: \"Import Result\",\n added: \"{0} Pay Item(s) added.\",\n skipped: \"{0} Pay Item(s) skipped.\"\n },\n notification: {\n saveFailed: \"Failed to save Pay Item Library. Please try again.\"\n }\n },\n featureStatus: {\n beta: \"Beta\",\n },\n sandbox: {\n enableSandboxButton: \"Enable Sandbox\",\n }\n};","const data: Record = {\n errorBoundary: {\n title: \"Une erreur inattendue s'est produite.\",\n body:\n \"Nous avons enregistré l'erreur et nous nous excusons pour la gêne occasionnée. Veuillez réessayer.\",\n button: \"Retour à la page d'accueil\",\n sandbox: {\n title: \"BAC À SABLE : Une erreur inattendue s'est produite.\",\n body:\n \"Le mode bac à sable a rencontré une erreur inattendue. Veuillez réinitialiser ou désactiver le mode bac à sable.\",\n resetButton: \"Réinitialiser le mode bac à sable\",\n disableButton: \"Désactiver le bac à sable\"\n }\n },\n profile: {\n minorityStatusList: {\n added: \"Certification ajoutée\",\n errorAdded: \"Erreur lors de l'ajout d'une certification\",\n saved: \"Certifications sauvegardées\",\n errorSaved:\n \"Erreur lors de l'enregistrement des certifications. Réessayez plus tard.\",\n updated: \"Certifications mises à jour\",\n errorUpdated:\n \"Erreur lors de la mise à jour des certifications. Réessayez plus tard.\",\n deleted: \"Certifications supprimées\",\n errorDeleted:\n \"Erreur lors de la suppression de certifications. Réessayez plus tard.\",\n loading: \"Chargement...\",\n noMinorityStatusHelpText: {\n title: \"Pas de certifications\",\n body:\n \"Les certifications ajoutées à un profil peuvent être utilisées pour inclure des informations minoritaires sur votre entreprise.\"\n },\n noMinorityStatusButtonText: \"Ajouter une certification\",\n deleteConfirmation: \"Êtes-vous sûr de vouloir supprimer?\",\n minorityStatus: {\n updated: \"Mise à jour du statut de minorité\",\n errorUpdated: \"Erreur de mise à jour du statut de minorité\",\n deleted: \"Statut de minorité supprimé\",\n errorDeleted: \"Erreur de suppression du statut de minorité\"\n }\n },\n mainDetails: {\n updated: \"Le profil a été mis à jour avec succès.\",\n errorUpdated: \"Erreur de mise à jour du profil.\"\n },\n logo: {\n updated: \"Image chargée avec succès\",\n errorUpdated: \"Erreur de chargement de l'image\",\n exceedSizeError: \"La taille de l'image ne doit pas dépasser 2 Mo.\",\n imageTypeError:\n \"Les formats d'image pris en charge sont .bmp, .jpeg et .png.\"\n }\n },\n contactManagement: {\n contactSearchModal: {\n noData: {\n title: \"Aucun résultat trouvé\",\n body:\n \"Essayez de rechercher un contact par prénom, nom, téléphone ou courriel. Vous pouvez également effectuer une recherche par nom et code d'entreprise.\"\n },\n tabs: {\n contacts: \"CONTACTS\",\n companies: \"ENTREPRISES\"\n },\n searchBarPlaceholder: \"Recherchez des contacts...\"\n },\n vendorDetails: {\n title: \"Détails principaux\",\n newTitle: \"Créer une nouvelle entreprise\",\n editTitle: \"Modifier les détails\",\n save: \"Sauvegarder\",\n edit: \"Modifier\",\n minorityStatusesHeading: \"Statuts des minorités\",\n scopesHeading: \"Champs d'application\",\n notesHeading: \"Notes\",\n officeHeading: \"Bureau\"\n },\n vendorEditDetail: {\n addOfficeButton: \"Ajouter un nouveau bureau\",\n officeSectionTitle: \"Bureaux\",\n error: {\n title: \"Erreur lors de l'enregistrement de la société\",\n name: \"Le surnom du bureau est requis\"\n }\n },\n vendorLocationDetails: {\n nickname: \"Surnom\"\n },\n vendorList: {\n title: \"Liste des entreprises\",\n addCompany: \"Ajouter une entreprise\",\n searchPlaceholder: \"Rechercher des entreprises...\"\n },\n contactFields: {\n firstName: \"Prénom\",\n lastName: \"Nom de famille\",\n title: \"Titre\",\n email: \"Adresse courriel\",\n phone: \"Numéro de téléphone\",\n cell: \"Numéro de portable\",\n mainContact: \"Contact principal\",\n notes: \"Notes\"\n },\n contactList: {\n saved: \"Contact ajouté!\",\n errorSaved:\n \"Erreur lors de l'enregistrement du contact. Réessayez plus tard.\",\n errorMoved: \"Erreur lors du déplacement du contact. Réessayez plus tard.\",\n moveContact: \"Contact déplacé!\",\n updated: \"Contact sauvegardé!\",\n errorUpdated:\n \"Erreur lors de la mise à jour du contact. Réessayez plus tard.\",\n deleted: \"Contact supprimé!\",\n errorDeleted:\n \"Erreur lors de la suppression d'un contact. Réessayez plus tard.\",\n emailError: \"Veuillez saisir une adresse courriel valide.\",\n title: \"Liste de contacts\",\n loading: \"Chargement...\",\n noContactsHelpText: {\n title: \"Aucun contact\",\n body:\n \"Les contacts ajoutés à une entreprise peuvent être liés à un projet.\"\n },\n noContactsButtonText: \"Ajouter un contact\",\n deleteConfirmation: \"Êtes-vous sûr de vouloir supprimer {0}?\",\n commandButton: {\n edit: \"Modifier\",\n move: \"Déplacer\",\n delete: \"Supprimer\"\n },\n visitContact: \"Visiter le contact\"\n },\n contactListModal: {\n modalAddTitle: \"Ajouter un contact\",\n modalEditTitle: \"Modifier le contact\",\n buttonAdd: \"Ajouter\",\n buttonSave: \"Enregistrer\",\n buttonCancel: \"Annuler\",\n emptyLocationsText:\n \"Veuillez modifier les détails de l'entreprise pour ajouter un bureau\",\n emptyScopeOfWorksText:\n \"Veuillez modifier les détails de l'entreprise pour ajouter des champs d'application\",\n officeLabel: \"Bureau\",\n scopesLabel: \"Champs d'application\"\n },\n contactListMoveContactModal: {\n moveContact: \"Déplacer\",\n toCompany: \"Vers l'entreprise :\",\n fromCompany: \"De l'entreprise :\",\n buttonMove: \"Déplacer\",\n buttonCancel: \"Annuler\",\n removingProductsAlert:\n \"Les champs d'application suivants seront supprimés du contact parce que l'entreprise destinataire n'a pas défini ces champs d'application :\",\n removingOneProductAlert:\n \"Les champs d'application suivants seront supprimés du contact car l'entreprise de destination n'a pas défini ces champs d'application :\"\n },\n minorityStatusList: {\n saved: \"Statut de minorité sauvegardé\",\n errorSaved:\n \"Erreur lors de l'enregistrement du statut de minorité. Réessayez plus tard.\",\n updated: \"Statut de minorité mis à jour\",\n errorUpdated:\n \"Erreur lors de la mise à jour du statut de minorité. Réessayez plus tard.\",\n deleted: \"Statut de minorité supprimé\",\n errorDeleted:\n \"Erreur lors de la suppression du statut de minorité. Réessayez plus tard.\",\n loading: \"Chargement...\",\n noMinorityStatusHelpText: {\n title: \"Pas de statut de minorité\",\n body:\n \"Les statuts de minorité ajoutés à une entreprise peuvent être utilisés pour suivre les objectifs de minorité sur les projets et les estimations.\"\n },\n noMinorityStatusButtonText: \"Ajouter un statut de minorité\",\n deleteConfirmation: \"Êtes-vous sûr de vouloir supprimer?\"\n },\n minorityTypeModal: {\n title: \"Créer un type de minorité\",\n buttonAdd: \"Ajouter\",\n buttonCancel: \"Annuler\",\n validation: {\n codeRequiredText: \"Le code est obligatoire\",\n descriptionRequiredText: \"La description est requise\"\n },\n errorUpdated:\n \"Erreur de mise à jour du type de minorité. Réessayez plus tard.\",\n errorCreated:\n \"Erreur lors de la création d'un type de minorité. Réessayez plus tard.\",\n confirmBack:\n \"Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir continuer?\"\n },\n notInBU:\n \"L'entreprise à laquelle vous avez essayé d'accéder ne fait pas partie de votre unité commerciale actuelle.\",\n noDataPlaceholder: {\n office: {\n title: \"Aucun bureau\",\n buttonText: \"Ajouter un nouveau bureau\"\n },\n minorityStatus: {\n title: \"Pas de statuts de minorité\",\n body:\n \"Pour ajouter un statut de minorité à cette entreprise, cliquez d'abord sur « Enregistrer » sur le nouveau fournisseur avec le champ « Code » rempli.\"\n }\n },\n companySetup: {\n title: \"Configuration de l'entreprise\",\n minorityTypeHeader: \"Types de minorités\",\n minorityType: {\n success: {\n added: \"Type de minorité ajouté!\",\n updated: \"Type de minorité sauvé!\"\n },\n errors: {\n created:\n \"Erreur dans la création du type de produit. Réessayez plus tard.\",\n updated:\n \"Erreur de mise à jour du type de produit. Réessayez plus tard.\",\n deleted:\n \"Erreur de suppression du type de produit. Réessayez plus tard.\",\n duplicated: \"Le type de minorité avec le code « {0} » existe déjà.\"\n }\n },\n productType: {\n header: \"Portée du travail\",\n success: {\n added: \"Portée du travail ajoutée!\",\n updated: \"Étendue des travaux enregistrée!\"\n },\n errors: {\n created:\n \"Erreur lors de la création du type de produit. Réessayez plus tard.\",\n updated:\n \"Erreur lors de la mise à jour du type de produit. Réessayez plus tard.\",\n deleted:\n \"Erreur lors de la suppression du type de produit. Réessayez plus tard.\",\n duplicated: \"L'étendue du travail avec le code '{0}' existe déjà.\"\n }\n }\n },\n import: {\n validationErrors: {\n email:\n \"La ligne #{0} a une mauvaise adresse de courriel, si elle n'est pas corrigée, elle ne sera pas importée.\"\n }\n }\n },\n estimates: {\n active: \"Actif\",\n archived: \"Archivé\",\n recent: \"Récent\",\n synced: \"Synchronisé\",\n title: \"Estimations\",\n editTitle: \"Modifier les estimations archivées\",\n estimateAnalysis: \"Analyse de l'estimation\",\n keyIndicators: \"Indicateurs-clés\",\n estimateDetails: \"Détails de l'estimation\",\n estimateInformation: \"Informations sur l'estimation\",\n estimateLocation: \"Estimer l'emplacement\",\n estimateExcluded: \"Exclure l'estimation\",\n quoteManagement: \"Gestion des devis\",\n quoteSummary: \"Résumé du devis\",\n dashboard: \"Tableau de bord\",\n solicitationDashboard: \"Tableau de bord de sollicitation\",\n quoteInbox: \"Boîte de réception de devis\",\n createSolicitation: \"Créer une sollicitation\",\n createQuoteProposal: \"Créer une proposition de devis\",\n drafts: \"Brouillons\",\n sent: \"Envoyé\",\n vendorCommunication: \"Communication fournisseur\",\n noReports:\n \"Les rapports ne sont pas encore disponibles pour cette estimation\",\n noEstimatesTitle:\n \"Nous n'avons trouvé aucune sollicitation pour cette estimation\",\n noEstimatesHelperText:\n \"Sélectionnez « Créer une sollicitation » dans le menu de gauche pour commencer à remplir\\nce Tableau de bord de gestion des devis\",\n reporting: \"Rapports\",\n allReports: {\n unavailable: {\n title: \"Pas de rapports disponibles\",\n text:\n \"L'estimation est en cours de synchronisation, une fois terminée, les rapports seront prêts.\"\n },\n notFound: {\n title: \"Aucun rapport trouvé\",\n text:\n \"Aucun rapport n'a pu être trouvé pour l'estimation actuelle. Essayez de resynchroniser cette estimation.\"\n }\n },\n reportDownload: \"Télécharger le fichier PDF\",\n cost: \"Coût\",\n costDescription:\n \"Le rapport des coûts affiche les coûts de chaque élément d'enchères, ventilés par activité et type de coût.\",\n costAndPrice: \"Coût et prix\",\n costAndPriceDescription:\n \"Un rapport récapitulatif affichant une ventilation complète des coûts et des prix pour chaque élément d'enchères.\",\n estimateRecap: \"Récapitulatif de l'estimation\",\n estimateRecapDescription:\n \"Le rapport Récapitulatif de l'estimation vous montre comment les différences d'enchères/départs et le déséquilibre des prix des enchères affectent l'estimation. Il vous permet également de consulter les totaux et les pourcentages des coûts pour chaque type de coût.\",\n reportsHelpText: \"Les rapports sont à jour au\",\n showAll: \"Afficher tout\",\n hideAll: \"Cacher tout\",\n close: \"Fermer\",\n showHideColumns: \"Afficher/Masquer les colonnes\",\n adjustFilters: \"Ajuster les filtres\",\n addFilters: \"Ajouter des filtres\",\n selectFilters: \"Sélectionner les filtres\",\n activeEstimates: \"Estimations actives\",\n activeEstimateTotal: \"Total des estimations actives\",\n archivedEstimates: \"Estimations archivées\",\n archivedEstimateTotal: \"Estimation moyenne archivée\",\n activeEstimateLocations: \"Emplacements d'estimation active\",\n noLocationFound: \"Aucun emplacement trouvé\",\n noLocationFoundHelpText:\n \"Soit votre estimation ne contient aucune information de localisation, soit nous n'avons pas pu obtenir la latitude et la longitude avec les informations fournies.\",\n gettingStarted: {\n title: \"Accéder aux données d'estimation\",\n text1:\n \"Pour accéder aux données d'estimation, il est maintenant nécessaire que vous ayez l'abonnement 'HeavyBid Insights' dans HCSS Credentials. Les étapes pour commencer sont accessibles dans le centre d'aide HCSS.\",\n instructions:\n \"Vous n'êtes pas autorisé à afficher les informations sur les estimations. Cela peut être configuré par un administrateur dans la page Utilisateur Administrateur.\",\n buttonIconTitle: \"Commencez maintenant\"\n },\n notInBU:\n \"L'estimation à laquelle vous avez essayé d'accéder n'est pas dans votre unité commerciale actuelle.\",\n customizeReporting: {\n customizeActivityTotals: \"Personnaliser les totaux d'activité\",\n save: \"Sauvegarder\",\n activityTotals: \"Totaux des activités\",\n placeholder: {\n button: \"Ajouter un total\",\n title: \"Ajouter des totaux d'activité\",\n body:\n \"Cette page vous permettra d'ajouter une formule personnalisée de total d'activité. En spécifiant une expression, une unité et un style correspondant, vous pourrez voir les totaux de quantité et de coût pour les codes d'activité qui correspondent à ce que vous entrez dans toutes vos estimations HeavyBid synchronisées et archivées.\"\n },\n name: \"Nom\",\n nameRequired: \"Le nom est requis\",\n expression: \"Expression\",\n expressionRequired: \"L'expression est requise\",\n unit: \"Unité\",\n unitRequired: \"L'unité est requise\",\n add: \"Ajouter\",\n formulaMatch: {\n startsWith: \"Commence avec\",\n exactlyMatches: \"Correspond exactement\"\n }\n }\n },\n keyIndicators: {\n placeholder: \"Rechercher des IRC\",\n settings: \"Paramètres\",\n kpiDisplay: \"Afficher les IRC marqués en tant que\",\n classification: \"Classification\",\n search: \"Recherche\",\n normal: \"Normal\",\n warning: \"Avertissement\",\n outlier: \"Valeur aberrante\",\n na: \"S/O\",\n allKpis: \"IRC totaux\",\n kpisByCategory: \"IRC par catégorie\",\n help: \"Aide\",\n noCustomBody:\n \"Synchronisez vos IRC personnalisés depuis HeavyBid pour les voir ici.\",\n table: {\n currentValue: \"Valeur actuelle\",\n normalRange: \"Plage normale\",\n plot: \"Parcelle\",\n name: \"Nom\",\n calculationDetails: \"Détails du calcul\",\n noVariance: \"Impossible de tracer. Pas d'écart dans la plage normale.\",\n noData: \"Il n'y a aucun IRC à afficher avec les filtres actuels.\",\n allKpisHidden:\n \"Aucun IRC n'est sélectionné. Veuillez sélectionner un ou plusieurs IRC pour afficher les données IRC.\"\n },\n categories: {\n labor: \"Main-d'œuvre\",\n equipment: \"Équipement\",\n material: \"Matériel\",\n subcontract: \"Sous-traitance\",\n markup: \"Balisage\",\n other: \"Autre\",\n custom: \"Personnalisé\",\n laborAndEquipment: \"Main-d'œuvre et équipement\"\n }\n },\n isRequired: \"{0} est requis.\",\n estimateInfo: {\n state: \"État :\",\n lastSync: \"Dernière synchronisation :\",\n keyDates: \"Dates clés :\",\n reviewDate: \"Date de révision :\",\n bidDate: \"Date d'enchère :\",\n startDate: \"Date de début :\",\n totals: \"Totaux\",\n totalCost: \"Coût total :\",\n bidTotal: \"Total de l'enchère :\",\n title: \"Informations sur l'estimation\",\n lastSummaryRunOn: \"Dernière exécution récapitulative :\",\n lastSpreadRunOn: \"Dernière diffusion sur :\"\n },\n estimateTable: {\n linkEstimates: \"Relier les estimations\",\n noLinkedEstimates: \"Aucune estimation liée à afficher\"\n },\n estimateModal: {\n title: \"Relier les estimations\",\n activeEstimates: \"Estimations actives\",\n errorLoading:\n \"Un problème est survenu lors du chargement de vos estimations. Veuillez actualiser la page.\",\n loading:\n \"Les estimations sont en cours de chargement. Cela peut prendre quelques minutes la première fois.\",\n columns: {\n code: \"Code d'estimation\",\n name: \"Nom de l'estimation\",\n bidDate: \"Date d'enchère\",\n lastModified: \"Dernière mise à jour\",\n isActiveEstimate: \"Estimation active\"\n }\n },\n quoteProposal: {\n notifications: {\n drafts: {\n success: \"Suppression réussie du brouillon\",\n error: \"Impossible de supprimer le projet\"\n }\n },\n deleteConfirmationName: \"Êtes-vous sûr de vouloir supprimer {0}?\",\n deleteConfirmationNoName: \"Êtes-vous sûr de vouloir supprimer (sans nom)?\",\n draftQuotes: \"Devis du brouillon\",\n sentQuotes: \"Devis envoyés\",\n columns: {\n name: \"Nom de l'auteur\",\n createdDate: \"Date de création\",\n dueDate: \"Date d'échéance\",\n vendors: \"Vendeurs\",\n type: \"Type d'offre\",\n code: \"Code\",\n description: \"Description\",\n email: \"Courriel\",\n minorityType: \"Type de minorité\",\n url: \"URL\",\n estimator: \"Estimateur\",\n vendorCode: \"Code vendeur\",\n vendorName: \"Nom du vendeur\",\n lastName: \"Nom de famille\",\n firstName: \"Prénom\",\n phoneNumber: \"Numéro de téléphone\"\n },\n links: {\n noDataText: \"Ajouter des liens externes\"\n },\n contacts: {\n removeContact: \"Supprimer un contact\",\n chooseContact: \"Choisir un contact\",\n addContact: \"Ajouter un contact\"\n },\n preview: {\n notifications: {\n emailError: \"Erreur dans l'envoi des courriels. Veuillez réessayer.\"\n },\n personalEmail: \"Compte courriel personnel\",\n viaBusinessUnitEmail: \"via le compte courriel de l'unité commerciale\",\n viaOtherEmail: \"via <{0}>\",\n loading: \"Chargement...\",\n sendingEmail: \"Envoi de courriels...\",\n useCompanyEmail:\n \"Utiliser le compte courriel personnel de votre entreprise\",\n personalEmailNeedsAttention:\n \"Votre compte courriel personnel a besoin d'attention\",\n sendPreview: \"Envoyer l'aperçu de la proposition\",\n cancel: \"Annuler\",\n sendAll: \"Envoyer tout\",\n sendingFrom: \"Envoi de\",\n sendingTo: \"Envoi à\",\n emailSubject: \"Objet du courriel\",\n emailSubjectRequired: \"L'objet du courriel est obligatoire.\",\n emailPreview: \"Aperçu du courriel\",\n proposalPreview: \"Aperçu de la proposition\",\n loadingPreview: \"Chargement de l'aperçu...\",\n quoteProposalFor: \"Proposition de devis pour « {0} »\",\n quoteProposal: \"Proposition de devis\"\n },\n projectDetails: {\n code: \"Code du projet\",\n codeRequired: \"Le code du projet est obligatoire.\",\n name: \"Nom du projet\",\n nameRequired: \"Le nom du projet est obligatoire.\",\n location: \"Localisation du projet\"\n },\n setup: {\n emailsSentSuccessfully: \"Les courriels ont été envoyés avec succès!\",\n createProposal: \"Créer une proposition\",\n bidDate: \"Date de l'offre\",\n startDate: \"Date de début\",\n previewAndSend: \"Prévisualisation et envoi\",\n copyProposal: \"Copier la proposition\",\n contactDetails: \"Détails du contact\",\n proposalDetails: \"Détails de la proposition\",\n enterPrices: \"Entrez les prix\",\n projectDetails: \"Détails du projet\",\n folders: \"Dossiers\",\n chooseFolders: \"Choisissez des dossiers\",\n recipients: \"Destinataires\",\n chooseVendors: \"Choisissez vos fournisseurs\",\n atLeastOneVendor: \"Vous devez sélectionner au moins un fournisseur\",\n atLeastOnePrice: \"Vous devez saisir les prix d'au moins un article\",\n externalLinks: \"Liens externes\",\n addHCSSPlans: \"Ajouter des plans HCSS\",\n addLinks: \"Ajouter des liens\",\n attachments: \"Pièces jointes\",\n uploadFiles: \"Charger des fichiers\",\n excelDropdownPlaceHolder: \"Exporter\",\n confirmBack:\n \"Vous avez des modifications non enregistrées. Êtes-vous sûr de vouloir continuer?\",\n savingDraft: \"Sauvegarde du brouillon\",\n saveDraft: \"Sauvegarder le brouillon\",\n proposalItems: \"Eléments de la proposition\",\n noPricesHelpText: {\n title: \"Aucun élément\",\n body: \"Au moins un élément doit être ajouté à la proposition de devis.\"\n },\n noAttachmentsHelpText: {\n title: \"Pas de pièces jointes\",\n body: \"L'ajout de pièces jointes est facultatif.\"\n }\n },\n attachments: {\n notifications: {\n linkCopied: {\n title: \"Copié!\",\n message: \"Lien copié dans le presse-papiers\"\n }\n },\n uploadFiles: \"Charger les fichiers\"\n },\n details: {\n initialProposal: \"Proposition initiale\",\n followUp: \"Suivi\",\n addendum: \"Addendum\",\n quoteNotes: \"Notes sur la proposition\",\n typeRequired: \"Le type de devis est obligatoire.\",\n quoteName: \"Nom de la proposition\",\n nameRequired: \"Le nom du devis est obligatoire.\",\n priceExpiration: \"Date d'expiration du prix\",\n priceExpirationRequired: \"La date d'expiration du prix est obligatoire.\",\n firstName: \"Prénom\",\n firstNameRequired: \"Le prénom du contact est obligatoire.\",\n lastName: \"Nom de famille\",\n lastNameRequired: \"Le nom de famille du contact est obligatoire.\",\n email: \"Courriel\",\n phone: \"Téléphone\",\n recipients: \"Destinataires\",\n contactsRequired:\n \"Au moins un contact est requis. Tous les contacts doivent avoir des courriels valides.\",\n contactsPlaceholder: \"Cliquez ici...\",\n addContact: \"Ajouter un contact\",\n sendRepliesTo: \"Envoyer les réponses à...\",\n noEmailProvided: \"(pas de courriel)\",\n receiveProposal: \"Marquer comme lu\",\n statusTitleQuestion:\n \"Faites savoir à {0} que vous avez reçu cette proposition de devis?\",\n statusTitleReceived: \"Un accusé de réception a été envoyé à {0}.\",\n statusToolTipReceived:\n \"L'expéditeur a été informé que vous avez lu la proposition qu'il vous a envoyée.\"\n },\n import: {\n importExcel: \"Importer des prix depuis Excel\",\n importExcelQP: \"Importer des articles à partir d'Excel\",\n step1: \"ÉTAPE 1 : Téléchargez le modèle d'importation.\",\n step2: \"ÉTAPE 2 : Importez le fichier Excel.\",\n subTextQP1:\n \"Saisissez les articles et leurs prix unitaires dans Excel. Enregistrez le fichier.\",\n subTextQP2:\n \"Sélectionnez le fichier pour importer les articles et leurs prix unitaires.\",\n subText1:\n \"Saisissez les prix unitaires dans Excel pour tous les articles que vous souhaitez coter.\",\n subText3:\n \"Ajoutez de nouveaux articles sur les lignes vierges, si nécessaire. Enregistrez le fichier.\",\n subText2:\n \"Sélectionnez le fichier pour importer les prix unitaires des articles demandés et tous les champs des articles nouvellement ajoutés.\",\n close: \"Fermer\",\n selectFile: \"SÉLECTIONNER LE FICHIER\",\n download: \"TÉLÉCHARGER\",\n importXlHeader1:\n \"Saisissez le prix unitaire des articles demandés pour lesquels vous avez l'intention de faire un devis. NE modifiez PAS la description des articles demandés.\",\n importXlHeader2:\n \"Saisissez la description, la quantité, l'unité et le prix unitaire pour tous les NOUVEAUX articles.\",\n importXlHeader3:\n \"Lorsque vous importerez ce fichier sauvegardé, tous ces articles remplaceront les articles énumérés dans la proposition.\"\n },\n prices: {\n addPrices: \"Ajouter un prix\"\n },\n review: {\n title: \"Révision de la proposition de devis\",\n priceExpiration: \"Date d'expiration du prix\",\n sentTo: \"Envoyé à\",\n sentFrom: \"Envoyé de\",\n code: \"Code\",\n name: \"Nom\",\n location: \"Localisation\",\n jobDetails: \"Détails de l'emploi\"\n }\n },\n quotes: {\n banner:\n \"HeavyBid 2022.0.0 ou une version plus récente est nécessaire pour mapper et synchroniser les prix des articles supplémentaires de n'importe quel vendeur avec les dossiers de devis de HeavyBid lorsque ce vendeur n'est pas actuellement répertorié.\",\n overwrittenMessage:\n \"Pour un ou plusieurs articles de ce devis, la description, la quantité, l'unité et/ou le prix unitaire ont été remplacés.\",\n folderSelectionClear: \"(Aucun)\",\n moduleName: \"Gestion des citations\",\n awaitingResponse: \"En attente d'une réponse\",\n invitationAccepted: \"Invitation acceptée\",\n invitationDeclined: \"Invitation refusée\",\n receivedNewPrices: \"Nouveaux prix reçus\",\n reviewed: \"Examiné\",\n MarkedAsUnread: \"Marquer comme non lu\",\n rejected: \"Rejeté\",\n status: \"Statut\",\n folderDetails: \"Détails du dossier\",\n folderNoItemsNoVendors:\n \"Ce dossier ne contient pas d'éléments de devis ni de fournisseurs.\",\n folderNoItems: \"Ce dossier ne contient aucun élément de devis.\",\n folderNoVendors: \"Ce dossier ne contient aucun fournisseur.\",\n quotedAmount: \"Montant coté\",\n pluggedAmount: \"Montant bouché\",\n adjustments: \"Ajustements\",\n totals: \"Totaux\",\n item: \"Article\",\n resource: \"Code\",\n cancel: \"Annuler\",\n continue: \"Continuer\",\n confirmRevertChnges: \"Rétablir les modifications\",\n quantity: \"Quantité\",\n description: \"Description\",\n disabledTooltipForEditing:\n \"Désactiver le mode édition pour sélectionner ce bouton.\",\n code: \"Code\",\n unit: \"Unité\",\n folder: \"Dossier\",\n unitPrice: \"Prix unitaire\",\n extendedPrice: \"Prix étendu\",\n plugPrice: \"Prix de la prise\",\n s: \"S\",\n p: \"P\",\n subContractor: \"Sous-traitant\",\n material: \"Matériel\",\n estimator: \"Estimateur\",\n notes: \"Notes\",\n noDescription: \"Aucune description\",\n noResource: \"Aucune ressource\",\n quoteHasBeenReviewed: \"Le devis a été examiné.\",\n quoteReviewedError:\n \"Une erreur s'est produite lors de la mise à jour du devis.\",\n quoteHasBeenMarkedAsUnread: \"Le devis a été marqué comme non lu.\",\n quoteHasBeenRejected: \"Le devis a été rejeté.\",\n quoteHasBeenManuallyEntered:\n \"Le devis sera saisi manuellement dans HeavyBid.\",\n quoteChangesHaveBeenReverted: \"Les changements de devis ont été annulés.\",\n quoteChangesRevertError:\n \"Une erreur s'est produite lors de l'annulation des modifications apportées aux devis.\",\n quoteValidationError:\n \"Veuillez sélectionner un dossier pour au moins 1 article.\",\n quoteVendorFolderValidationError:\n \"Il y a un article qui ne peut pas être mappé au bon dossier de devis parce que ce fournisseur n'est pas encore dans le dossier de devis HeavyBid pour cet article. Allez dans HeavyBid, ajoutez ce vendeur au dossier de devis correct et sélectionnez Sync Quote Prices dans la fenêtre HeavyBid Quote Summary. Une fois que vous aurez actualisé cette fenêtre, la sélection du dossier sera disponible pour les éléments du devis. Procédez au mappage des éléments dans le dossier de devis approprié avant de marquer comme révisé.\",\n quoteVendorFolderValidationErrorTitle: \"Le vendeur a besoin d'un dossier\",\n quoteRejectedError:\n \"Une erreur s'est produite lors de la mise à jour du devis.\",\n updatingPrices: \"Mise à jour des prix...\",\n ignoringPrices: \"Ignorer les prix...\",\n quoteDetails: \"Détails du devis\",\n closeQuote: \"Fermer le devis\",\n revertingPrices: \"Revenir aux prix initiaux.\",\n revertModalContentLine1:\n \"Tous les champs de l'élément de devis modifiés seront ramenés à leur valeur d'origine.\",\n revertModalContentLine2: \"Voulez-vous continuer?\",\n queueForSync: {\n button: \"File d'attente pour la synchronisation\",\n disabledTitle:\n \"Ce bouton est désactivé lorsque les prix sont tous des zéros. Activer l'édition pour ajouter les prix du fournisseur dans le devis ci-dessous.\",\n enableTitle:\n \"En sélectionnant Queue for Sync, les prix des vendeurs seront mis en file d'attente pour être synchronisés avec HeavyBid lors de la prochaine synchronisation à partir de la fenêtre Résumé du devis de HeavyBid\"\n },\n vendorDetails: \"Détails du vendeur\",\n prices: \"Prix\",\n validThrough: \"Valable pour {0}\",\n vendorNotes: \"Notes du vendeur\",\n total: \"Total\",\n internalNotes: \"Notes internes\",\n company: \"Entreprise\",\n vendorContact: \"Contact du vendeur\",\n folderNotFound: \"Le dossier de cet article n'a pas été trouvé.\",\n na: \"S/O\",\n chooseFolder: \"Élément de carte...\",\n syncRequired: \"Synchronisation requise\",\n vendor: \"Vendeur\",\n viewDetails: \"Voir les détails\",\n type: \"Type\",\n selectedVendors: \"Vendeur(s) sélectionné(s)\",\n folderTotal: \"Total du dossier\",\n name: \"Nom\",\n minorityStatus: \"Statut de minorité\",\n selected: \"Sélectionné\",\n vendorTotal: \"Total du vendeur\",\n selectedVendor: \"Vendeur sélectionné\",\n folderNotes: \"Notes du dossier\",\n quoteInbox: \"Boîte de réception des devis\",\n new: \"Nouveau\",\n pending: \"En attente\",\n all: \"Tout\",\n itemsBidOfTotal: \"{0} de {1}\",\n itemsBid: \"Articles proposés\",\n invitedOn: \"Invité sur\",\n lastActivity: \"Dernière activité\",\n receivedOn: \"Reçu le\",\n reviewedOn: \"Révisé le\",\n rejectedOn: \"Rejeté le\",\n extraItems: \"Articles supplémentaires\",\n quoteSummary: \"Résumé du devis\",\n gridView: \"Vue de la grille\",\n listView: \"Vue de la liste\",\n details: {\n address: \"KT TAPE\",\n adjExtendedPrice: \"Prix étendu ajusté\",\n adjUnitPrice: \"Prix unitaire ajusté\",\n adjustment: \"Ajustement :\",\n anticipatedStartDate: \"Date de début prévue\",\n attachments: \"Pièces jointes\",\n bidDate: \"Date de l'offre\",\n bidding: \"Appel d'offres\",\n blanks: {\n description: \"La description est obligatoire.\",\n unit: \"L'unité est requise.\",\n unitPrice: \"Le prix est requis.\",\n quantity: \"La quantité est requise.\"\n },\n changeStatus: \"Modifier l'état\",\n clientNo: \"Numéro de client\",\n company: \"Société\",\n contactInformation: \"Coordonnées\",\n contacts: \"Contact\",\n description: \"Description\",\n downloadAll: \"Téléchargez tout\",\n extendedPrice: \"Prix étendu\",\n headerMessage: \"{0} vous a invité à faire une offre sur {1} à {2}\",\n importantDates: \"Dates importantes\",\n itemDetails: \"Détails de l'article\",\n enterPrices: \"Entrez les prix\",\n guestUserBannerText: [\n \"Voulez-vous voir vos devis précédents? Créez votre compte HCSS gratuit!\",\n \"Vous voulez gérer vos contacts et envoyer des propositions professionnelles? Je vous ai dit que c'était gratuit?\"\n ],\n guestUserBannerLinkText: \"En savoir plus\",\n job: \"Emploi\",\n jobSite: \"Site de travail\",\n lastSubmissionMessage:\n \"Un devis a déjà été soumis le {0} à {1} pour {2}.\",\n location: \"Emplacement\",\n mainContact: \"Contact principal\",\n name: \"Nom\",\n noItems: \"Pas d'éléments\",\n noItemsMessage:\n \"Cette invitation a été envoyée sans éléments de devis. Veuillez examiner les informations sur le projet, les liens externes ou les fichiers inclus, et faire savoir à {0} si vous êtes intéressé par la soumission de ce projet. Vous pouvez éventuellement ajouter des éléments supplémentaires en cliquant ci-dessous.\",\n noItemsAddButton: \"Ajouter des éléments supplémentaires\",\n notBidding: \"Ne pas faire d'offre\",\n notes: \"Remarques\",\n notesTooLong:\n \"Veuillez raccourcir les notes, car elles ont dépassé les 900 000 caractères.\",\n projectDetails: \"Détails du projet\",\n pageTitle: \"Détails de la demande de devis\",\n print: \"Imprimer\",\n projectId: \"Identifiant du projet\",\n projectInformation: \"Informations sur le projet\",\n projectName: \"Nom du projet\",\n quantity: \"Quantité\",\n quoteDueDate: \"Date d'échéance du devis\",\n roundingDiff: \"Différence d'arrondi :\",\n reviewSubmit: \"Révisez et soumettez\",\n copyProposal: \"Copier la proposition\",\n statusTitleNo: \"Vous n'êtes pas en train de faire une offre!\",\n statusTitleQuestion: \"Allez-vous faire une offre pour ce projet?\",\n statusTitleYes: \"Vous faites une offre!\",\n statusTooltipNo:\n \"L'entrepreneur saura ainsi que vous n'avez pas l'intention de lui soumettre des prix.\",\n statusTooltipQuestion:\n \"L'entrepreneur saura ainsi que vous avez l'intention de soumettre des prix, même si vous revenez plus tard.\",\n statusTooltipYes:\n \"L'entrepreneur saura ainsi que vous allez lui soumettre des prix.\",\n submitPromptMessage:\n \"Vous êtes sur le point de soumettre des prix en votre nom ou au nom de votre entreprise. Après avoir soumis vos prix, vous ne pourrez plus les modifier. Voulez-vous continuer?\",\n submitPromptTitle: \"Soumettre un prix des devis?\",\n submitting: \"Soumission...\",\n subtotal: \"Sous-total :\",\n subItem: {\n addSubitem: \"Ajoutez votre premier sous-article\",\n add: \"Ajouter\",\n save: \"Sauvegarder\",\n cancel: \"Annuler\",\n removeSubitem: \"Supprimer le sous-article\",\n noSubItemsHelpText: {\n title: \"Pas de sous-items\",\n body:\n \"Créez des sous-postes pour diviser rapidement des articles plus importants en éléments plus petits. Les totaux seront regroupés en une valeur finale.\"\n }\n },\n total: \"Total :\",\n unit: \"Unité\",\n unitPrice: \"Prix unitaire\",\n urlLinks: \"Liens des URL\",\n unitMismatchMessage:\n \"Il y a une différence d'unité entre l'article sélectionné dans le devis HeavyBid et l'article supplémentaire de ce vendeur. Corrigez l'unité afin de synchroniser le prix unitaire de cet article avec HeavyBid.\",\n confirmModal: {\n cancel: \"Retourner\",\n continue: \"Continuer\"\n },\n closeQuoteModal: {\n title: \"Fermer le devis\",\n warning:\n \"En sélectionnant « Fermer le devis », les prix du vendeur NE SERONT PAS synchronisés avec les devis HeavyBid.\",\n prompt: \"Quelle est l'affirmation la plus appropriée?\",\n overlayMessage: \"Fermeture du devis.\",\n reject: {\n label:\n \"Je rejette les prix de ces fournisseurs et ne les prendrai pas en considération.\",\n text:\n \"La fiche d'appel d'offres de ce devis passera dans la colonne « Terminé » avec le statut « Rejeté », pourra être consultée et pourra être rouverte ultérieurement.\"\n },\n manual: {\n label:\n \"Je saisirai manuellement les prix des fournisseurs dans HeavyBid.\",\n text:\n \"La fiche de sollicitation de ce devis passera dans la colonne « Terminé » avec le statut « Saisi manuellement ».\"\n }\n }\n },\n quoteReview: {\n title: \"Révision du devis\",\n back: \"Retour aux détails\",\n submit: \"Soumettre le devis\",\n date: \"Date\",\n project: \"Projet\",\n validThrough: \"Valable jusqu'au\",\n total: \"Total\",\n submitTo: \"Soumettre à\",\n contactUs: \"Contactez-nous\",\n clientNo: \"Nº du client\",\n description: \"Description\",\n quantity: \"Quantité\",\n unit: \"Unité\",\n unitPrice: \"Prix unitaire\",\n extendedPrice: \"Prix étendu\",\n totalAmount: \"MONTANT TOTAL\",\n notes: \"Notes\"\n },\n submission: {\n title: \"Soumission réussie\",\n viewQuote: \"Voir le devis\",\n signupTitle: \"maintenant disponible pour\",\n free: \"GRATUIT\",\n discover: \"Découvrez-en plus\"\n },\n emptyState: {\n title: \"Aucun dossier trouvé\",\n text:\n \"Pour commencer, synchronisez les données à partir de l'écran « Résumé du devis » dans HeavyBid.\"\n },\n pricesLastSynced: \"Derniers prix synchronisés :\"\n },\n vendorCommunication: {\n columns: {\n vendorCode: \"Code du fournisseur\",\n vendorName: \"Nom de fournisseur\",\n action: \"Dernière activité\",\n timeStamp: \"Date de la dernière activité\",\n minorityType: \"Type de minorité\",\n email: \"Contact\",\n solicitationName: \"Nom de la demande de soumissions\",\n projectName: \"Nom du projet\"\n },\n manualModal: {\n phoneCallMade: \"A effectué un appel téléphonique\",\n phoneCallReceived: \"A reçu un appel téléphonique\",\n emailSent: \"A envoyé un courriel\",\n emailReceived: \"A reçu un courriel\",\n faxSent: \"A envoyé un fax\",\n faxReceived: \"A reçu un fax\",\n mailSent: \"A envoyé un courrier\",\n mailReceived: \"A reçu un courrier\",\n inPerson: \"Réunion en personne\",\n communicationSuccess: \"Communication enregistrée avec succès\",\n communicationError: \"Impossible d'enregistrer la communication\",\n title: \"Enregistrer la communication\",\n type: \"Type de communication\",\n date: \"Date de la communication\",\n vendor: \"Fournisseur\",\n estimate: \"Estimation\",\n projectName: \"Nom du projet\",\n contactInfo: \"Coordonnées\",\n firstName: \"Prénom\",\n lastName: \"Nom\",\n email: \"Courriel\",\n message: \"Message\",\n cancel: \"Annuler\",\n submit: \"Envoyer\",\n previewReport: \"Prévisualiser le rapport\"\n },\n details: {\n recordCommunication: \"Enregistrer la communication\",\n print: \"Imprimer\",\n vendor: \"Fournisseur\",\n project: \"Projet\",\n minorityType: \"Type de minorité\",\n communicationDetails: \"Détails de la communication\"\n },\n timeline: {\n eventHistory: \"Historique de l'événement\",\n filters: \"Filtres\",\n filterContent: \"Filtrer le contenu\",\n clickToExpand: \"Cliquez pour agrandir...\",\n initial: \"une demande de soumissions initiale\",\n followUp: \"une demande de soumissions de suivi\",\n addendum: \"un addenda\",\n noName: \"aucun nom\",\n solicitation: {\n initial: {\n base:\n \"{0} {1} a envoyé {2} {3} à partir {4} d'une demande de soumissions initiale ({5}).\",\n special:\n \"{0} {1} a envoyé à {2} {3} à partir {4} d'une demande de soumissions initiale (sans nom).\"\n },\n followUp: {\n base:\n \"{0} {1} a envoyé à {2} {3} à partir {4} d'une demande de soumissions de suivi ({5}).\",\n special:\n \"{0} {1} a envoyé à {2} {3} à partir {4} d'une demande de soumissions de suivi (sans nom).\"\n },\n addendum: {\n base: \"{0} {1} a envoyé à {2} {3} à partir {4} d'un addenda ({5}).\",\n special:\n \"{0} {1} a envoyé à {2} {3} à partir {4} d'un addenda (sans nom).\"\n }\n },\n sub: {\n accepted: \"{0} a indiqué qu'il soumissionnera pour ce projet\",\n rejected: \"{0} a indiqué qu'il ne soumissionnera pas pour ce projet\",\n submittedPrices: \"{0} a soumis un devis pour {1}\"\n },\n gc: {\n reviewed: \"{0} {1} a évalué un devis pour {2}\",\n markedAsUnread: \"{0} {1} a indiqué qu'un devis n'était pas lu\",\n rejected: \"{0} {1} a rejeté un devis pour {2}\",\n manuallyRejected:\n \"{0} {1} a choisi de saisir manuellement ces prix directement dans HeavyBid.\",\n queuedForSync:\n \"{0} {1} a mis en file d'attente un devis pour {2} à synchroniser avec HeavyBid.\"\n },\n manual: {\n phoneCall: {\n sent: \"{0} {1} a fait un appel téléphonique à {2} {3}\",\n received: \"{0} {1} a reçu un appel téléphonique de {2} {3}\"\n },\n email: {\n sent: {\n base: \"{0} {1} a envoyé un courriel à {2} {3} ({4})\",\n special:\n \"{0} {1} a envoyé un courriel à {2} {3} (aucun courriel n'a été fourni)\"\n },\n received: {\n base: \"{0} {1} a reçu un courriel de {2} {3} ({4})\",\n special:\n \"{0} {1} a reçu un courriel de {2} {3} (aucun courriel n'a été fourni)\"\n }\n },\n fax: {\n sent: \"{0} {1} a envoyé une télécopie à {2} {3}\",\n received: \"{0} {1} a reçu une télécopie de {2} {3}\"\n },\n mail: {\n sent: \"{0} {1} a envoyé un courrier à {2} {3}\",\n received: \"{0} {1} a reçu du courrier de {2} {3}\"\n },\n meeting: \"{0} {1} rencontré en personne avec {2} {3}\",\n gcEnteredPricesForSub:\n \"{0} {1} a saisi les prix au nom du sous-traitant\"\n },\n unknownAction: \"Action d'événement inconnue\",\n will: \"fera\",\n willNot: \"ne fera pas\"\n },\n report: {\n vendor: \"Fournisseur :\",\n bidding: \"Soumission? :\",\n yes: \"Oui\",\n no: \"Non\",\n unknown: \"Inconnu\",\n minority: \"Minorité :\",\n action: \"Action\",\n actions: {\n sentInitialSolicitation:\n \"A envoyé l'invitation initiale à soumissionner\",\n sentFollowUpSolicitation:\n \"Envoi d'une invitation à soumissionner de suivi\",\n sentAddendumSolicitation:\n \"Envoyé une invitation à soumissionner par addenda\",\n subAcceptedInvite: \"Invitation acceptée par le sous-traitant\",\n subRejectedInvite: \"Invitation rejetée par le sous-traitant\",\n subSubmittedPrices: \"Prix soumis par le sous-traitant\",\n gcRejectedPrices: \"Prix refusés par l'entrepreneur général\",\n gcReviewedPrices: \"Prix examinés par l'entrepreneur général\",\n madePhoneCall: \"A effectué un appel téléphonique\",\n receivedPhoneCall: \"A reçu un appel téléphonique\",\n sentEmail: \"A envoyé un courriel\",\n receivedEmail: \"A reçu un courriel\",\n sentFax: \"A envoyé une télécopie\",\n receivedFax: \"A reçu une télécopie\",\n sentMail: \"A envoyé un courrier\",\n receivedMail: \"A reçu un courrier\",\n inPersonMeeting: \"Se sont rencontrés en personne\",\n gcEnteredPricesForSub:\n \"L'entrepreneur général a inscrit les prix pour le compte du sous-traitant\",\n gcReconsideredPrices:\n \"L'entrepreneur général a marqué le devis rejeté comme Non lu\",\n gcReconsideredManuallyEnteredPrices:\n \"Entrepreneur général marqué le devis saisi manuellement comme Non lu\",\n gcManuallyEnteredPrices:\n \"L'entrepreneur général a saisi manuellement les prix de soumission dans HeavyBid\",\n gcQueuedForSync:\n \"L'entrepreneur général a mis le devis en file d'attente pour le synchroniser avec HeavyBid.\",\n default: \"Dernière communication\"\n },\n description: \"Description / message\",\n dateTime: \"Date / heure\",\n vendorContact: \"Contact du fournisseur\",\n user: \"Utilisateur\",\n code: \"Code estimatif :\",\n linkedEstimate: \"Estimation couplée :\",\n name: \"Nom de l'estimation :\",\n owner: \"Propriétaire :\",\n bidDate: \"Date de la soumission :\",\n title: \"Rapport de communication\",\n vendorComTitle: \"Rapport de communication avec le fournisseur\",\n preview: \"Rapport de communication - Aperçu\",\n vendorPreview: \"Rapport de communication avec le fournisseur - Aperçu\",\n back: \"Retour\"\n }\n },\n solicitations: {\n notifications: {\n drafts: {\n success: \"Brouillon supprimé avec succès\",\n error: \"Impossible de supprimer le brouillon\"\n }\n },\n deleteConfirmationName: \"Voulez-vous vraiment supprimer {0}?\",\n deleteConfirmationNoName: \"Voulez-vous vraiment supprimer (sans nom)?\",\n draftSolicitations: \"Brouillon des demandes de soumissions\",\n sentSolicitations: \"A envoyé des demandes de soumissions\",\n columns: {\n solName: \"Nom de la demande de soumission\",\n name: \"Nom\",\n createdDate: \"Date de création\",\n dueDate: \"Date d'échéance\",\n estimateId: \"Code d'estimation\",\n projectName: \"Nom du projet\",\n vendors: \"Vendeurs\",\n type: \"Type\",\n code: \"Code\",\n description: \"Description\",\n email: \"Courriel\",\n minorityType: \"Type de minorité\",\n url: \"Adresse URL\",\n folder: \"Dossier\",\n estimator: \"Estimateur\",\n folderNotes: \"Notes du dossier\",\n vendorCode: \"Code du vendeur\",\n vendorName: \"Nom du vendeur\",\n lastName: \"Nom de famille\",\n firstName: \"Prénom\",\n phoneNumber: \"Numéro de téléphone\"\n },\n links: {\n noDataText: \"Ajouter des liens externes\"\n },\n vendors: {\n removeVendor: \"Supprimer un vendeur\",\n chooseVendors: \"Choisir les vendeurs\"\n },\n folders: {\n noFolders: \"Aucun dossier\",\n noFolderInfo:\n \"Les invitations envoyées sans dossiers/articles comprendront des informations sur le projet, des liens externes, des fichiers et les détails de l'appel d'offres saisis ci-dessus.\",\n chooseFolders: \"Choisir les dossiers\",\n removeFolder: \"Supprimer un dossier\",\n material: \"Matériel\",\n subcontractor: \"Sous-traitant\"\n },\n preview: {\n notifications: {\n emailError:\n \"Une erreur s'est produite lors de l'envoi des courriels. Veuillez réessayer.\"\n },\n personalEmail: \"Boîte aux lettres électronique personnelle\",\n viaBusinessUnitEmail:\n \"via le compte de messagerie de l'unité commerciale\",\n viaOtherEmail: \"via <{0}>\",\n genericEmail: \"Courriel générique ({0})\",\n loading: \"Chargement...\",\n sendingEmail: \"Envoi du courriel...\",\n useCompanyEmail:\n \"Utilisez la boîte aux lettres électronique personnelle de votre entreprise\",\n personalEmailNeedsAttention:\n \"Votre boîte aux lettres électronique personnelle a besoin d'attention\",\n sendPreview: \"Envoyer un avis de sollicitation\",\n cancel: \"Annuler\",\n sendAll: \"Tout envoyer\",\n sendingFrom: \"Envoyer depuis\",\n sendingTo: \"Envoyer à\",\n emailSubject: \"Objet du courriel\",\n emailSubjectRequired: \"L'objet du courriel est obligatoire.\",\n emailPreview: \"Visualisation du courriel\",\n loadingPreview: \"Chargement de la visualisation...\",\n quoteRequestFor: \"Demande du devis pour « {0} »\",\n quoteRequest: \"Demande du devis\",\n emailNote: \"Note du courriel\",\n emailNoteLimit: \"Nombre de caractères limité à 200.\",\n emailNotePlaceholder:\n \"Saisissez une brève note pour tous les vendeurs de cet appel d'offres.\\nCette note apparaîtra dans le courriel d'invitation à soumissionner et est limitée à 200 caractères.\"\n },\n solicitationSetup: {\n code: \"Code du projet\",\n codeRequired: \"Le code du projet est obligatoire.\",\n name: \"Nom du projet\",\n nameRequired: \"Le nom du projet est obligatoire.\",\n location: \"Localisation du projet\",\n header1: \"Projet\",\n header2: \"Estimation\",\n addNewProject: \"Ajouter un nouveau projet\",\n detailsBelow:\n \"Les détails du projet ci-dessous s'afficheront dans la demande envoyée...\",\n projectHelp1:\n \"Cette liste est constituée des projets issus du suivi des projets.\",\n projectHelp2:\n \"Vous pouvez rapidement ajouter un projet en sélectionnant le lien à droite.\",\n projectHelp3:\n \"Un nom de projet est nécessaire pour envoyer une demande du devis.\",\n estHelp1:\n \"La sélection d'un devis est facultative. Toutefois, si vous souhaitez envoyer des éléments de dossier du devis dans l'appel d'offres, vous devez sélectionner le devis pour que ces dossiers soient disponibles.\",\n estHelp2:\n \"Cette liste est constituée des estimations actives dont vous disposez.\",\n estHelp3:\n \"Un devis actif : est un devis HeavyBid pour lequel vous avez activé la préférence de devis pour l'historique des devis et synchronisé les éléments du devis sur ce site web.\",\n helpText3Est:\n \"L'estimation actuelle et le projet doivent être liés pour que l'appel d'offres soit envoyé.\",\n addProjectButtonText: \"Ajouter un nouveau projet\",\n linkWarning:\n \"Le projet que vous avez sélectionné n'est pas encore lié au devis sélectionné. Souhaitez-vous les lier?\",\n linkWarningEst:\n \"Le nouveau projet que vous avez créé n'est pas encore lié au devis en cours. Souhaitez-vous les lier?\"\n },\n setup: {\n emailsSentSuccessfully: \"Envoi du courriel réussi!\",\n createSolicitation: \"Créer un appel d'offres\",\n bidDate: \"Durée de l'offre\",\n startDate: \"Date de début\",\n previewAndSend: \"Visualisation et envoi\",\n solicitationDetails: \"Détails de l'appel d'offres\",\n solicitationSetup: \"Configuration de l'appel d'offres\",\n folders: \"Dossiers\",\n chooseFolders: \"Choisir un dossier\",\n vendors: \"Vendeurs\",\n chooseVendors: \"Sélectionnez les vendeurs\",\n atLeastOneVendor: \"Vous devez sélectionner au moins un vendeur\",\n requiredFields:\n \"Les champs suivants sont obligatoires : code vendeur, nom du vendeur, prénom, nom de famille et courriel.\",\n externalLinks: \"Liens externes\",\n addHCSSPlans: \"Ajouter des plans HCSS\",\n addLinks: \"Ajouter des liens\",\n attachments: \"Pièces jointes\",\n uploadFiles: \"Téléchargez les fichiers\",\n confirmBack:\n \"Vous avez des modifications non sauvegardées. Êtes-vous sûr de vouloir continuer?\",\n savingDraft: \"Sauvegarde du brouillon\",\n saveDraft: \"Sauvegarder le brouillon\",\n noFoldersHelpText: {\n title: \"Aucun dossier\",\n body:\n \"Les appels d'offres envoyés sans dossiers ou articles comprendront toujours les informations relatives à l'appel d'offres et du projet, les liens externes et les pièces jointes.\"\n },\n noEstimateFoldersHelpText: {\n title: \"Aucune estimation sélectionnée\",\n body:\n \"Pour sélectionner les dossiers à solliciter, choisissez d'abord une estimation dans le menu déroulant de la partie « Configuration de la sollicitation » de cette page. Vous pouvez toujours solliciter sans sélectionner de dossiers.\"\n },\n noVendorsHelpText: {\n title: \"Aucun vendeur\",\n body: \"Un vendeur au moins doit être sélectionné.\"\n },\n noLinksHelpText: {\n title: \"Aucun lien\",\n body: \"Il est facultatif d'ajouter des liens vers des sites externes.\"\n },\n noAttachmentsHelpText: {\n title: \"Aucune pièce jointe\",\n body: \"L'ajout de pièces jointes est facultatif.\"\n }\n },\n attachments: {\n notifications: {\n linkCopied: {\n title: \"Copié!\",\n message: \"Lien copié dans la presse-papier\"\n }\n },\n uploadFiles: \"Téléchargez les fichiers\"\n },\n details: {\n initialSolicitation: \"Appel d'offres initial\",\n followUp: \"Suivi\",\n addendum: \"Addenda\",\n solicitationNotes: \"Notes de l'appel d'offres\",\n MessageType: \"Type d'appel d'offres\",\n typeRequired: \"Le type d'appel d'offres est obligatoire.\",\n solicitationName: \"Intitulé de l'appel d'offres\",\n nameRequired: \"Le nom de l'appel d'offres est obligatoire.\",\n quoteDueBy: \"Date d'échéance de l'offre\",\n quoteDueByRequired: \"La date d'échéance du devis est obligatoire.\",\n firstName: \"Prénom\",\n firstNameRequired: \"Le prénom du contact est obligatoire.\",\n lastName: \"Nom de famille\",\n lastNameRequired: \"Le nom de famille du contact est obligatoire.\",\n email: \"Courriel\",\n phone: \"Téléphone\"\n },\n selectFolders: {\n title: \"Sélectionnez les dossiers\"\n },\n selectVendors: {\n any: \"N'importe lequel\",\n unsolicited: \"Non sollicité\",\n repliedWillBid: \"A répondu : fera une offre\",\n repliedWillNotBid: \"A répondu : Ne fera pas d'offre\",\n submittedQuote: \"Devis envoyé\",\n title: \"Sélectionnez les vendeurs\",\n solicitationStatus: \"Statut de l'appel d'offres\",\n inSelectedFolders: \"Dans les dossiers sélectionnés\",\n inEstimate: \"Dans l'estimation\",\n vendorList: \"Liste des fournisseurs\"\n },\n dashboard: {\n noDataTitle: \"Pas de sollicitations\",\n noDataHelpText:\n \"Envoyez une sollicitation ou modifiez vos filtres. Les sollicitations apparaîtront sous le projet auquel elles appartiennent.\"\n }\n },\n userAdmin: {\n adminRequired: \"Vous devez être un administrateur pour visiter cette page\",\n writeRequired:\n \"Vous devez avoir le droit d'ajouter/modifier des projets pour visiter cette page\",\n contactRequired:\n \"Vous devez avoir le droit d'ajouter/modifier des contacts pour visiter cette page.\",\n fullPreconRequired:\n \"Vous devez avoir un accès complet à « Pré-Construction » pour visiter cette page\",\n unauthorized: {\n jumbotron: {\n title: \"Vous n'avez pas accès à « Pre-Construction ».\",\n heavyBid: \"Pré-construction de HeavyBid\",\n text1: \"est la maison de :\",\n listItem1: \"avec le suivi des résultats des appels d'offres\",\n listItem2: \"avec analyse des ICP\",\n listItem3: \"Centralisé\",\n text2: \"Contactez votre administrateur et partagez\",\n text3: \"cet article d'aide\",\n text4: \"si vous avez besoin d'un accès.\",\n text5:\n \"Si vous avez déjà mis à jour votre compte, déconnectez-vous, puis réessayez. Si le problème persiste, veuillez contacter votre administrateur système ou cliquez sur les liens ci-dessous pour plus d'informations.\",\n logout: \"déconnexion\"\n },\n projectTracking: {\n title: \"Suivi du projet\",\n body:\n \"L'accès au suivi des projets nécessite un abonnement aux modules complémentaires HeavyBid : suivi du projet. Ce changement peut être effectué dans HCSS Credentials. Pour plus d'informations, cliquez sur le lien ci-dessous.\",\n help: \"Commencez à utiliser le suivi de projet\"\n },\n heavybidInsights: {\n title: \"Perspectives d'estimation\",\n body:\n \"Pour accéder aux données d'Estimate Insights (anciennement HeavyBid Insights), vous devez configurer les paramètres dans HeavyBid et Credentials. Les étapes pour commencer sont disponibles dans le centre d'aide HCSS.\",\n help: \"Commencer à utiliser Estimate Insights\"\n },\n contactManagement: {\n title: \"Gestion des contacts\"\n },\n quoteManagement: {\n title: \"Gestion des devis\",\n body:\n \"La fonction de gestion des devis est actuellement ouverte aux utilisateurs alpha uniquement. Si vous souhaitez devenir un utilisateur alpha ou bêta, veuillez nous contacter.\",\n help: \"Envoyez-nous un courriel\"\n },\n supportPortal: {\n title: \"Aide et assistance\",\n body:\n \"Vous avez d'autres questions ou préoccupations? Posez des questions concernant votre logiciel HCSS et obtenez des réponses. Les membres de l'équipe d'assistance sont prêts à répondre à vos questions en direct.\",\n help: \"Accédez au portail d'aide HCSS\"\n },\n sandbox: {\n title: \"Vous voulez essayer Pre-Con?\",\n body:\n \"Explorez un environnement bac à sable où vous pourrez avoir une idée du produit!\",\n help: \"Explorez maintenant\"\n }\n },\n permissionsUpdated: \"Autorisations mises à jour\",\n errors: {\n adminRequired: \"Au moins un administrateur est requis\",\n permissions: \"Erreur lors de l'enregistrement des autorisations\"\n },\n revoke: \"Révoquer\",\n cancel: \"Annuler\",\n title: \"Administration des utilisateurs\",\n save: \"Sauvegarder\",\n newPermissions:\n \"Autorisations accordées aux utilisateurs nouvellement ajoutés :\",\n addEdit: \"Ajouter et modifier des projets dans Suivi de projet\",\n addEditContact:\n \"Ajouter et modifier des sociétés ou des contacts dans la gestion des contacts\",\n seeHeavyBid: \"Voir les chiffres des estimations HeavyBid\",\n admin:\n \"Administrateur (définir les autorisations des utilisateurs, personnaliser les champs du projet, gérer les modèles de projet et d'estimation)\",\n estimateInsights: \"Accès aux informations sur les estimations\",\n adminTooltip:\n \"Les utilisateurs disposant d'un rôle d'utilisateur « Administrateur » dans les informations d'identification seront intégrés à cette application en tant qu'administrateur de l'entreprise.\",\n companyAdminTooltip:\n \"Les administrateurs de l'entreprise conservent tous les droits dans l'application Pre-Con. Leur accès à l'application et leur niveau de rôle d'utilisateur sont gérés dans les informations d'identification HCSS.\",\n limitedUserTooltip:\n \"Non disponible pour les utilisateurs en lecture seule. Pour l'activer, accédez aux informations d'identification HCSS et ajoutez cet utilisateur à un groupe d'abonnement avec HeavyBid | Préconstruction.\",\n dataAccessTooltip:\n \"Accès aux informations sur les estimations et visualisation des valeurs de coût/prix estimées\",\n writeTooltip: \"L'administrateur doit d'abord être décoché.\",\n userPermissions: \"Autorisations utilisateur\",\n usersWithAccess:\n \"Ces comptes d'utilisateurs ont reçu l'autorisation d'accéder à la pré-construction dans les informations d'identification HCSS.\",\n revokeAdmin: \"Révoquer les droits d'administrateur\",\n revokeAdminConfirmation:\n \"Êtes-vous sûr de vouloir révoquer vos droits d'administrateur?\",\n defaultNewUserPermissions: {\n projectTracking: \"SUIVI DU PROJET\",\n contactManagement: \"GESTION DES CONTACTS\",\n estimateInsights: \"INFORMATIONS SUR LES ESTIMATIONS\"\n },\n permissionsTable: {\n firstName: \"Prénom\",\n lastName: \"Nom de famille\",\n userId: \"ID de l'utilisateur\",\n addEdit: \"Ajouter et modifier\",\n seeHeavyBid: \"Voir les numéros HeavyBid\",\n admin: \"Administrateur\",\n estimateInsights: \"Informations sur les estimations\",\n projectTracking: \"Suivi du projet\",\n contactManagement: \"Gestion des contacts\",\n dataAccess: \"Accès aux données\"\n }\n },\n layout: {\n title: {\n heavy: \"Heavy\",\n bid: \"Bid\",\n preConstruction: \"Suivi du projet\",\n combined: \"Suivi de projet HeavyBid\",\n quotes: \"\"\n },\n loading: \"Chargement\",\n menu: {\n title: \"Menu\",\n projectTracking: {\n title: \"Suivi du projet\",\n list: \"Liste des projets\",\n import: \"Importer\",\n importProjects: \"Importer des projets\",\n customize: \"Personnaliser la configuration\",\n customizeOld: \"Personnaliser les projets\",\n estimateMapping: {\n title: \"Cartographie des estimations\",\n hover: \"Nombre total d'estimations non liées\"\n }\n },\n importBidResults: {\n title: \"Importer les résultats de l'enchère\",\n title1:\n \"Avant de commencer, il est important de savoir que les résultats des enchères ne peuvent être importés que dans des projets existants.\",\n title2:\n \"Utilisez Importer des projets pour créer d'abord les projets manquants avant d'importer les résultats de l'enchère.\",\n title3:\n \"Les données de l'historique des enchères exportées depuis HeavyBid peuvent également être importées en tant que résultats d'enchères.\",\n bidResultsXMLHeader1:\n \"Utilisez une ligne pour chaque soumission d'offre pour chaque projet.\",\n bidResultsXMLHeader2:\n \"Entrez le nom du projet, le nom de l'entreprise et le total de l'offre. Marquez le gagnant pour chaque projet en saisissant #Y pour Oui.\",\n bidResultsXMLHeader3:\n \"Le nom de votre entreprise est #companyName. Utilisez ce nom de société pour vos soumissions d'offres.\",\n projectName: \"Nom du projet\",\n winner: \"Gagnant?\",\n companyName: \"Nom de l'entreprise\",\n bidTotal: \"Total de l'enchère\",\n downloadXML: \"Télécharger\",\n learnMore: \"En savoir plus\",\n selectFile: \"Choisir le dossier\",\n step1:\n \"Étape 1. Téléchargez le modèle d'importation des résultats d'enchères.\",\n subtitle1:\n \"Saisissez tous les résultats des enchères dans Excel. Enregistrez le fichier.\",\n step2: \"Étape 2. Importez le fichier Excel.\",\n subtitle2:\n \"Sélectionnez le fichier pour importer les résultats des enchères.\",\n cancel: \"Annuler\",\n preview: \"Aperçu\",\n import: \"Importer\",\n wizardStep1: \"Choisir le dossier\",\n wizardStep2: \"Aperçu\",\n wizardStep3: \"Résultats\"\n },\n estimating: {\n title: \"Informations sur les estimations\",\n list: \"Liste des estimations\",\n edit: \"Modifier les estimations archivées\",\n divToBuErrorTitle:\n \"Nous n'avons trouvé aucune estimation pour votre unité commerciale actuelle.\",\n divToBuErrorBody:\n \"Cliquez sur le lien ci-dessous pour obtenir de l'aide pour démarrer, ou contactez HCSS en ouvrant un ticket sur https://community.hcss.com/s/contactsupport ou en appelant le 1-855-231-7876.\",\n divToBuFilteredErrorTitle:\n \"Aucune estimation n'est disponible avec les filtres actuels\",\n unauthorizedErrorTitle:\n \"Veuillez contacter votre administrateur ou le service de soutien HCSS\",\n unauthorizedErrorBody:\n \"Votre compte n'a pas accès aux estimations de l'unité commerciale demandée\"\n },\n contacts: {\n title: \"Informations sur l'entreprise\",\n list: \"Liste des entreprises\",\n search: \"Rechercher des contacts\",\n import: \"Importer les contacts\",\n setup: \"Configuration de l'entreprise\"\n },\n settings: {\n title: \"Paramètres\",\n email: \"Adresse électronique de l'unité commerciale\",\n email2: \"Adresse électronique de l'entreprise\",\n userAdmin: \"Administrateur utilisateur\",\n companyProfile: \"Profil de l'entreprise\"\n },\n quoteManagement: {\n title: \"Gestion des devis\",\n dashboard: \"Tableau de bord\",\n createProposal: \"Créer une proposition\",\n createSolicitation: \"Créer une sollicitation\",\n incomingHeader: \"Devis entrants\",\n incomingSubHeader: \"\",\n outgoingHeader: \"Propositions sortantes\",\n outgoingSubHeader: \"Aux entrepreneurs généraux\",\n vendorCommunication: \"Communication avec le fournisseur\",\n filters: \"Filtres\",\n noVendorCommsFoundTitle:\n \"Nous n'avons trouvé aucune sollicitation ni aucun enregistrement de communication avec le fournisseur associé dans aucun de vos projets en cours.\",\n noVendorCommsFoundBody:\n \"Sélectionnez « Créer une sollicitation » dans le menu de gauche pour envoyer une sollicitation et commencer automatiquement à suivre vos communications avec les fournisseurs.\"\n }\n },\n profile: {\n bu: \"Changer d'unité commerciale\",\n email: \"Configurer les paramètres de messagerie\",\n calendar: \"Configurer les paramètres du calendrier\",\n logout: \"Se déconnecter\"\n },\n feedback: \"Rétroaction\",\n chat: {\n online: \"Discutez avec un expert\",\n offline: \"Agent hors ligne\"\n },\n help: {\n helpCenter: \"Centre d'aide\",\n chat: \"Clavardage en direct avec le soutien\",\n contact: \"Contactez le service de soutien\",\n phone: \"Ligne d'aide : 1-855-231-7876\",\n suggestion: \"Enregistrer une suggestion de produit\",\n about: \"À propos de HCSS\",\n privacy: \"Politique de confidentialité de HCSS\",\n tutorial: \"Tutoriel de lancement\"\n },\n alphaHelp: \"Aide Alpha\"\n },\n core: {\n dropdown: {\n clear: \"(Clair)\",\n placeholder: \"Sélectionner\",\n new:\n \"Pour ajouter une nouvelle option : saisissez une valeur, appuyez sur Entrée\"\n },\n filters: {\n title: \"Filtres\",\n removeDisplayedFilters: \"Supprimer les filtres ({0} affiché)\",\n clearActiveFilters: \"Supprimer les filtres actifs ({0} appliqués)\",\n textPlaceholder: \"Tapez quelque chose et appuyez sur Entrée...\",\n addFiltersText: \"Ajouter des filtres\",\n adjustFiltersText: \"Ajuster les filtres\",\n collapseFiltersText: \"Réduire les filtres\",\n expandFiltersText: \"Développer les filtres\"\n },\n modals: {\n ok: \"Ok\",\n cancel: \"Annuler\",\n close: \"Fermer\",\n confirmBack: {\n unsavedChanges:\n \"Vous avez des modifications non enregistrés. Êtes-vous sûr de vouloir continuer?\"\n },\n confirmDelete: {\n confirm: \"Confirmer la suppression\",\n projectTitle: \"Supprimer le projet\",\n fieldTitle: \"Supprimer le champ\",\n draft: \"Supprimer le brouillon\",\n message: \"Êtes-vous sûr de vouloir supprimer {0}?\"\n },\n linkHeavyJob: {\n linkName: \"Lier à HeavyJob\",\n modal: \"Lier {0} à HeavyJob\",\n linkJobButton: \"Lier cet emploi\",\n cancel: \"Annuler\",\n deleteLinkJobButton: \"Supprimer le lien\"\n }\n },\n buttons: {\n back: \"Retour\",\n delete: \"Supprimer\",\n deleteAll: \"Supprimer toutes\",\n import: \"Importer\",\n close: \"Fermer\"\n },\n notifications: {\n saved: \"{0} enregistrés!\",\n added: \"{0} ajoutés!\",\n removed: \"{0} supprimés!\"\n },\n loaders: {\n loading: \"Chargement...\",\n updating: \"Mise à jour...\"\n }\n },\n tables: {\n group: {\n placeholder:\n \"Faites glisser l'en-tête d'une colonne ici pour regrouper les données en fonction de cette colonne\",\n checklist: {\n true: \"Vérifié\",\n false: \"Non vérifié\"\n }\n },\n add: {\n text: \"Ajouter\",\n hint: \"Ajouter une entrée\"\n },\n edit: {\n text: \"\",\n hint: \"Modifier l'entrée\"\n },\n delete: {\n text: \"\",\n hint: \"Supprimer l'entrée\"\n },\n commit: {\n text: \"\",\n hint: \"Enregistrer les modifications\"\n },\n cancel: {\n text: \"\",\n hint: \"Annuler les modifications\"\n },\n export: {\n checklist: {\n true: \"Vérifié\",\n false: \"Non vérifié\"\n },\n pdf: {\n currentPage: \"Page {0} sur {1}\",\n filename: \"{0}-{1}.pdf\"\n },\n csv: {\n filename: \"{0}-{1}.csv\"\n }\n },\n options: {\n optionsHeader: \"Options\",\n exportHeader: \"Exporter\",\n exportCSV: \"CSV\",\n exportCSVFull: \"Exporter au format CSV\",\n exportPDF: \"PDF\",\n exportPDFFull: \"Exporter au format PDF\",\n bidResults: \"Résultats des enchères au format CSV\",\n showColumns: \"Afficher/masquer les colonnes\",\n highlight: \"Souligner des projets\",\n expandAll: \"Tout développer\",\n collapseAll: \"Tout réduire\",\n exportDisabledMessage:\n \"L'exportation est désactivée tant que tous les projets et toutes les estimations n'ont pas été chargés.\",\n stillFetchingData: \"Chargement de projets et de devis\"\n },\n rightClickColumn: {\n sort: {\n asc: \"Trier par ordre croissant\",\n desc: \"Trier par ordre décroissant\"\n },\n group: \"Grouper\",\n groupBy: \"Grouper par\",\n highlight: {\n on: \"Souligner\",\n off: \"Effacer le surlignage\"\n },\n hide: \"Masquer\",\n showColumns: \"Afficher/masquer les colonnes\"\n },\n columnChooser: {\n title: \"Afficher/masquer les colonnes\",\n showAll: \"Tout afficher\",\n hideAll: \"Cacher tout\",\n close: \"Fermer\"\n },\n highlightModal: {\n title: \"Souligner des projets\"\n },\n search: {\n placeholder: \"Chercher...\",\n checklist: {\n true: \"Vérifié\",\n false: \"Non vérifié\"\n }\n },\n visibility: {\n allHidden: \"Toutes les colonnes sont cachées\",\n addColumns: \"Ajouter des colonnes à la grille\"\n },\n summary: {\n count: \"Nombre\",\n sum: \"Somme\"\n }\n },\n views: {\n templateSelect: {\n create: \"Créer un nouveau modèle nommé {0}\"\n },\n templateOptions: {\n save: \"Enregistrer\",\n undo: \"Annuler\",\n options: {\n title: \"Options\",\n new: \"Enregistrer comme nouveau modèle\",\n rename: \"Renommer le modèle\",\n remove: \"Supprimer le modèle\",\n setAsDefault: \"Définir par défaut\",\n claim: \"Réclamer le modèle\"\n }\n },\n renameModal: {\n title: \"Renommer le modèle\",\n desc: \"Nouveau nom (le nom actuel est {0})\"\n },\n newModal: {\n title: \"Enregistrer le nouveau modèle\",\n desc: \"Nom du modèle\"\n },\n claimModal: {\n title: \"Réclamer le modèle\",\n desc: \"Êtes-vous sûr de vouloir réclamer {0}?\"\n },\n savePrivateModal: {\n title: \"Enregistrer le modèle privé\",\n desc:\n \"Êtes-vous sûr de vouloir enregistrer {0} comme privé? Vous ne pourrez pas annuler cette action car vous n'êtes pas propriétaire de ce modèle.\"\n },\n confirmDelete: {\n title: \"Supprimer le modèle\",\n desc: \"Êtes-vous sûr de vouloir supprimer {0}?\"\n },\n accessTooltip: {\n errors: {\n unclaimed:\n \"Ce modèle doit être reclamé par un administrateur avant d'être rendu privé.\",\n requiredPublic: \"Vous devez avoir au moins un modèle public {0}\",\n lackPermissions:\n \"Seuls les administrateurs peuvent rendre privés les modèles d'autres utilisateurs\",\n readOnly:\n \"Vous devez avoir accès à l'ajout/la modification de projet pour créer vos modèles {0}\"\n },\n accessType: {\n public: \"public\",\n private: \"privé\"\n },\n schemaTypes: {\n estimateInsights: \"aperçu des estimations\",\n bidResults: \"résultats des enchères\",\n projectList: \"liste de projets\"\n }\n },\n errors: {\n uniqueName: {\n title: \"Erreur lors de l'enregistrement du modèle {0}\",\n desc: \"Un modèle existe déjà avec ce nom.\"\n },\n saveView: \"Erreur lors de l'enregistrement de {0}\",\n claimView: \"Erreur lors de la réclamation du modèle\"\n }\n },\n errors: {\n invalidValue: \"{0} a une valeur non valide\",\n required: \"{0} est requis\"\n },\n projects: {\n loading: \"Chargement\",\n warnings: {\n titles: {\n locked: \"Champs verrouillés\",\n default: \"Avertissement\"\n },\n messages: {\n locked:\n \"Le champ '{0}' est verrouillé. Impossible de mettre à jour sa valeur en '{1}'.\",\n unableToAutomaticallyGeocodePlace:\n \"Impossible de géocoder automatiquement les coordonnées par lieu '{1}' dans le champ '{0}'.\"\n }\n },\n errors: {\n save: \"Erreur lors de l'enregistrement du projet – {0}\",\n duplicateName: \"Un projet existe déjà sous le nom {0}\",\n requiredField: \"{0} est requis\",\n invalidValue: \"Le champ '{0}' a une valeur non valide.\",\n notInBU:\n \"Le projet auquel vous avez essayé d'accéder ne fait pas partie de votre unité d'affaires actuelle.\",\n linkSameLocationId: \"Cet emploi est déjà lié au projet\"\n },\n details: {\n title: \"Détail du projet\",\n files: \"Pièces jointes\",\n estimateSelectionTable: {\n noEstimates: \"Aucune estimation n'a été téléversée.\",\n noEstimatesLink:\n \"Visitez le site https://help.hcss.com/s/article/Overview-Estimate-History pour obtenir de l'aide sur la configuration de l'archive d'estimation.\"\n },\n header: {\n back: \"Retour\",\n save: \"Enregistrer\",\n expand: \"Tout développer\",\n collapse: \"Tout réduire\",\n downloadReport: \"Télécharger le PDF\",\n downloadReportSpinner: \"Téléchargement...\"\n },\n error: {\n report: \"Erreur de téléchargement du rapport pour le projet - {0}\"\n }\n },\n import: {\n button: \"Importer des projets\"\n },\n list: {\n title: \"Projets\",\n tutorial:\n \"Souhaitez-vous un tutoriel rapide sur le suivi de projet HeavyBid?\",\n header: {\n add: \"Ajouter un projet\",\n template: \"Modèle\",\n viewType: {\n list: \"Liste\",\n calendar: \"Calendrier\",\n charts: \"Graphiques\",\n map: \"Carte\"\n }\n },\n filters: {\n noFilters:\n \"Vous n'avez aucun filtre. Cliquez sur le bouton Ajouter un filtre ci-dessous!\",\n addFilters: \"Ajouter un filtre\",\n adjustFilters: \"Ajuster les filtres\",\n select: \"Sélectionnez les filtres\"\n },\n table: {\n noData: {\n filters: \"Aucun projet n'est visible avec les filtres actuels\",\n noProjects: \"Cliquez sur Ajouter un projet pour commencer\",\n noProjectsReadOnly: \"Aucun projet à afficher\",\n noProjectsDueToEstimateTotalsFilters:\n \"Vous n’avez pas accès aux Informations sur les estimations. Veuillez supprimer tous les filtres d'estimation pour voir les projets!\"\n },\n quickEntryCreate: \"Créer '{0}'\",\n quickEntryDisabled:\n \"La saisie rapide est désactivée pour cette colonne\",\n noOptions: \"Aucune option\",\n createNewOptions:\n \"Pour ajouter une nouvelle option : saisissez une valeur, appuyez sur Entrée\"\n },\n calendar: {\n options: {\n subscribe: \"Abonnez-vous au calendrier\",\n month: \"Mois\",\n week: \"Semaine\",\n day: \"Jour\",\n agenda: \"Agenda\",\n viewHeader: \"Aperçu du calendrier\"\n },\n eventWidget: {\n detailsButton: \"Détails\",\n closeButton: \"Fermer\"\n }\n }\n },\n setup: {\n header: {\n save: \"Sauvegarder\"\n },\n title: \"Personnaliser les projets\",\n save: \"Configuration du projet\",\n errors: {\n sectionName: \"Il manque des noms dans {0} section.s.\",\n fieldNameMissingSingular: \"Il manque un nom dans un champ dans {0}\",\n excessCustomFields:\n \"Seuls trois champs personnalisés sont autorisés pour le suivi de projet de base. Champs personnalisés actuels : {0}\",\n fullProjectTrackingOnly:\n \"Les emplacements, tableaux, hyperliens et listes de contrôle ne sont disponibles que pour le suivi complet du projet. Champs concernés : {0}\",\n fieldNameMissingPlural: \"Il manque des noms dans {0} champs dans {1}\",\n fieldNameDuplicated:\n \"Nom de champ en double, {0}, dans la section {1}.\",\n blankWebValue:\n \"Valeur Web vide dans le champ '{0}'. Les valeurs Web ne peuvent pas être vides.\",\n blankChecklistValue:\n \"Valeur de liste de contrôle vide dans le champ '{0}'. Les valeurs de la liste de contrôle ne peuvent pas être vides.\",\n blankDesktopValue:\n \"Valeur de bureau vide dans le champ '{0}'. Les valeurs du bureau ne peuvent pas être vides.\",\n duplicateWebValue:\n \"Valeur d'affichage Web en double, '{0}', dans le champ '{1}'. Les valeurs Web doivent être uniques et les valeurs HeavyBid doivent être uniques.\",\n duplicateDesktopValue:\n \"Valeur d'affichage HeavyBid en double, '{0}', dans le champ '{1}'. Les valeurs Web doivent être uniques et les valeurs HeavyBid doivent être uniques.\",\n duplicatedSelectionValueForTableField:\n \"Valeur en double, '{0}', dans le champ '{1}'. Les valeurs doivent être uniques.\",\n blankSelectionValueForTableColumn:\n \"Le champ '{0}' comporte une valeur vide en option\",\n generic: \"Erreur lors de l'enregistrement de la configuration du projet\"\n },\n message: {\n emptyCompanyList:\n \"Veuillez accéder à Gestion des contacts et créer une entreprise pour commencer à utiliser ce champ\",\n emptyCompanyListWithFilter:\n \"Aucune entreprise ne correspond au filtre Type d'entreprise de ce champ\",\n emptyContactList:\n \"Veuillez accéder à Gestion des contacts et créer un contact pour commencer à utiliser ce champ\"\n }\n },\n estimateMapping: {\n title: \"Cartographie des estimations\",\n buttons: {\n hide: \"Masquer les estimations\",\n unhide: \"Afficher les estimation.s\",\n showHidden: \"Afficher les estimations masquées\",\n undo: \"Annuler\",\n undoLoading: \"Chargement\"\n },\n projectSection: {\n linkProject: \"Lien vers le projet\",\n selectProject:\n \"Sélectionnez le projet pour établir un lien avec les estimations sélectionnées.\",\n searchProjects: \"Rechercher des projets...\",\n hideProjects: \"Masquer les projets avec des estimations liées\",\n addProject: \"Ajouter un projet\"\n },\n projectCard: {\n linkedEstimatesOne: \"Une estimation liée\",\n linkedEstimates: \"{0} estimations liées\",\n cancelButton: \"Annuler\",\n linkButton: \"Lien\"\n },\n projectDialog: {\n title: \"Estimations liées pour\",\n noLinkedEstimates: \"Ce projet n'a pas d'estimations liées\",\n unlinkButton: \"Dissocier\",\n showTotalButton: \"Afficher les totaux\"\n },\n estimateTable: {\n searchEstimates: \"Rechercher des estimations...\",\n selectedEstimates: \"{0} estimation.s sélectionnée.s\",\n estimatesLinked: \"{0} Estimation.s liée.s à {1}\"\n },\n addProjectModal: {\n title: \"Ajouter un projet\",\n cancel: \"Annuler\",\n save: \"Sauvegarder\",\n saveHint: \"Enregistrez le projet sans lier les estimations\",\n saveAndLink1: \"Enregistrer et\",\n saveAndLink2: \"Lien\",\n saveAndLinkHint:\n \"Enregistrez le projet et liez les estimations sélectionnées\"\n },\n notification: {\n title: \"Estimations non liées\"\n },\n sagas: {\n errors: {\n loadHiddenEstimateIds:\n \"Erreur lors du chargement des estimations masquées non liées\",\n updateHiddenEstimateIds:\n \"Erreur lors de la mise à jour des estimations masquées non liées\"\n },\n success: {\n hide: \"Estimation.s masquée.s avec succès\",\n unhide: \"Estimation.s affichée.s avec succès\"\n }\n },\n errors: {\n estimatesMapped: \"Toutes les estimations ont été cartographiées.\",\n estimatesMappedOrHidden:\n \"Toutes les estimations ont été cartographiées ou masquées.\",\n noEstimatesMatchedOrHidden:\n \"Aucune estimation n'est visible avec les filtres appliqués ou elles sont masquées\",\n noEstimatesMatched:\n \"Aucune estimation n'est visible avec les filtres appliqués\",\n noEstimateInsightsAccess:\n \"Vous n’avez pas accès aux Informations sur les estimations. Veuillez supprimer le filtre Total de l'enchère pour voir les estimations.\",\n errorDuringUndoLinkingTittle: \"Impossible d'annuler\",\n errorDuringUndoLinkingDescription:\n \"Veuillez réessayer ou accéder aux détails du projet pour dissocier manuellement les estimations.\",\n errorDuringUndoLinkingLinkText: \"Ouvrir les détails du projet\",\n errorDuringUndoLinkingNotification:\n \"Impossible d'annuler la liaison des estimations\"\n }\n }\n },\n schemas: {\n errors: {\n save: \"Erreur lors de l'enregistrement de la configuration du projet\"\n },\n form: {\n lockedField: \"Verrouillé\",\n required: \"{0} est obligatoire\",\n containsNotListedOptions:\n \"Le champ '{0}' contient une valeur non répertoriée dans les options\",\n multiSelectListError:\n \"Une erreur s'est produite lors de l'enregistrement du champ de sélection multiple\"\n },\n yupValidationErrors: {\n tableField: {\n valueNotInTheList:\n \"Le champ du tableau '{0}' contient une valeur non répertoriée dans les options pour la ou les colonnes suivantes : {1}\"\n },\n singleSelect: {\n valueNotInTheList:\n \"Le champ '{0}' a une valeur non répertoriée dans les options\"\n },\n company:\n \"Le champ '{0}' est associé à une société dont le type de société ne satisfait pas au filtre actuel défini pour le champ.\",\n contact:\n \"Le champ '{0}' a un contact attribué dont les étendues de travail ne satisfont pas au filtre actuel défini pour le champ.\"\n },\n setup: {\n fieldName: \"\",\n columnName: \"Nom de colonne\",\n standardValues: \"Valeurs standard\",\n listValues: \"Valeurs dans la liste\",\n required: \"Requis\",\n editableByAdmin: \"Modifiable par l'administrateur uniquement\",\n managedByCompanyAdmin: \"Géré par l'administrateur de l'entreprise\",\n displaySum: \"Afficher la somme\",\n lockable: \"Verrouillable\",\n fieldNamePlaceholder: \"Nom du champs\",\n columnNamePlaceholder: \"Nom de colonne\",\n quickEntry: \"Entrée rapide\",\n quickEntryInfo:\n \"Autorisez les utilisateurs à ajouter de nouvelles valeurs si nécessaire.\",\n columnLimit: \"Seules six colonnes sont autorisées pour ce champ.\",\n addColumn: \"Ajouter une colonne\",\n multiSelect: \"Sélection multiple\",\n multiSelectInfo:\n \"Autoriser les utilisateurs à sélectionner plusieurs valeurs. Le champ ne pourra pas revenir à une sélection unique une fois les modifications enregistrées.\",\n multiSelectModal: {\n title: \"Activer la liste de sélections multiples\",\n body:\n \"Le champ ne pourra pas revenir à une sélection unique une fois les modifications enregistrées.\"\n },\n sort: \"Trier\",\n sortAlpha: \"Trier les valeurs par ordre alphabétique\",\n sortAlphaShort: \"Trier par ordre alphabétique\",\n customSort: \"Valeurs de tri personnalisées\",\n customSortShort: \"Tri personnalisé\",\n fullProjectTrackingOnly:\n \"Disponible avec la version complète de Suivi de projet\",\n fieldList: {\n section: \"Section\",\n addFields: \"Ajouter des champs\",\n help: \"Aidez-moi à choisir\",\n dragSectionTooltip:\n \"Faites-le glisser vers la droite pour créer une nouvelle section!\",\n dragFieldTooltip:\n \"Faites-le glisser vers la section dans laquelle vous souhaitez l'ajouter!\"\n },\n sections: {\n name: \"Nom de la section\",\n fields: \"Champs\",\n dragFields: \"Faire glisser les champs ici\"\n },\n examples: {\n close: \"Fermer\",\n types: \"Types de champs\",\n text: {\n name: \"Texte\",\n description:\n \"À utiliser pour des informations courtes pouvant dont des chiffres, des lettres ou les deux\",\n examples: [\"Code\", \"Nom du contact\", \"Titre\", \"Adresse e-mail\"],\n alt: \"Champ Texte\"\n },\n note: {\n name: \"Note\",\n description:\n \"À utiliser pour les descriptions longues ou les lignes d'information multiples\",\n examples: [\"Notes\", \"Description du poste\"],\n alt: \"Champ de notes\"\n },\n number: {\n name: \"Nombre\",\n description:\n \"Utilisation pour des informations numériques (mais pas pour de l'argent)\",\n examples: [\"Quantité\", \"Âge\"],\n alt: \"Champ des nombres\"\n },\n currency: {\n name: \"Devise\",\n description: \"Utiliser pour les montants en dollars\",\n examples: [\"Coût\", \"Prix\"],\n alt: \"Champ Devise\"\n },\n date: {\n name: \"Date\",\n description:\n \"Utiliser pour les événements qui ont une date, mais où l'heure de la journée n'est pas importante\",\n examples: [\"Date de la soumission\", \"Date d'échéance\"],\n alt: \"Champ Date\"\n },\n dateTime: {\n name: \"Date/heure\",\n description:\n \"Utilisé pour les événements qui nécessitent une date et une heure\",\n examples: [\"Réunions\", \"Dates limites\"],\n alt: \"Champ Date et heure\"\n },\n selectionList: {\n name: \"Sélectionnez la liste\",\n description:\n \"Aimez un champ de texte, mais choisissez des options à partir d'une liste limitée au lieu de taper n'importe quelle valeur\",\n examples: [\"État\", \"Unité d'affaires\", \"Région\"],\n alt: \"Champ Liste de sélection\"\n },\n hyperlink: {\n name: \"Hyperlien(s)\",\n description: \"Utiliser pour créer des liens vers d'autres sites Web\",\n examples: [\n \"Dropbox\",\n \"Lecteur Google\",\n \"Annonces de soumission du DOT\"\n ],\n alt: \"Champ Liens\"\n },\n yesNo: {\n name: \"Oui/Non\",\n description:\n \"À utiliser pour les options on/off simples, telles que on/off, oui/non, vrai/faux\",\n examples: [\"Approbation requise \", \"Révisé\"],\n alt: \"Champ Case à cocher\"\n },\n checklist: {\n name: \"Liste de contrôle\",\n description: \"Permet de suivre les options simples de marche/arrêt\",\n examples: [\"Terminé\", \"Suivi\"],\n alt: \"Champ Liste de contrôle\"\n },\n location: {\n name: \"Emplacement\",\n description:\n \"Permet de déposer une épingle pour indiquer l'emplacement d'un projet\",\n alt: \"Champ Emplacement\"\n },\n states: {\n name: \"Liste des États\"\n },\n custom: {\n name: \"Personnaliser\"\n },\n bidResults: {\n name: \"Résultats de la soumission\"\n },\n estimates: {\n name: \"Estimations\"\n },\n preconId: {\n name: \"ID pré-con\"\n },\n company: {\n name: \"Entreprise\",\n description: \"Permet de sélectionner une entreprise pour un projet\",\n examples: [\"Sous-traitant sur site\", \"Sous-traitant en camionnage\"],\n alt: \"Champ Entreprise\"\n },\n contact: {\n name: \"Contact\",\n description: \"Permet de sélectionner un contact pour un projet\",\n examples: [\"Admin du projet\", \"répartiteur\"],\n alt: \"Champ Contact\"\n },\n hJJob: {\n name: \"Emploi\",\n description: \"Permet de lier un emploi HeavyJob à un projet\",\n alt: \"Champ Emploi\",\n empty: \"Aucun emploi disponible pour cette unité d'entreprise\",\n noAccess: \"Vous n'avez pas accès à cet emploi.\",\n noAccessCode: \"----\"\n },\n table: {\n name: \"Tableau\",\n description: \"Permet de créer un tableau dans un projet\",\n alt: \"Champ Tableau\"\n }\n },\n selectionList: {\n deleteAllDescription:\n \"Supprimer toutes les valeurs de la liste de visualisation ?\",\n import: {\n importValues: \"Importer des valeurs\",\n selectFile: \"Choisir le dossier\",\n preview: \"Aperçu\",\n filesDescription:\n \"Importez des valeurs dans la liste de sélection à partir d'un fichier Excel ou CSV.\",\n pleaseNote: \"Veuillez noter\",\n noteDescription:\n \"Seules les deux premières colonnes sont importées dans la liste de sélection\",\n skipFirstRow: \"La première ligne contient les en-têtes de colonnes\",\n previewColumn: \"Colonne\",\n webValue: \"Valeur Web\",\n desktopValue: \"Valeur du bureau\",\n previewDescription:\n \"Si une valeur reste vide, la valeur Web ou Desktop correspondante dans la ligne sera dupliquée pour remplir le vide.\",\n notSupportedFile: \"Formats de fichiers acceptés: {0}\",\n importSucceed:\n \"Les valeurs ont été importées avec succès et ajoutées à la liste de sélection!\",\n importAgain: \"Importer à nouveau\"\n }\n },\n canBeImported: \"Peut être importé\",\n canBeSyncedWithHB: \"Peut être synchronisé avec HeavyBid\",\n contact: {\n filterBy: \"Filtrer par champ de travail\",\n filterPlaceholderText:\n \"Acccédez à Gestion des contacts et créez un champ de travail pour commencer à utiliser ce filtre\"\n },\n company: {\n filterBy: \"Filtrer par type d'entreprise\",\n filterPlaceHolderText:\n \"Accédez à la Gestion des contacts et créez un type d'entreprise pour commencer à utiliser ce filtre\"\n },\n errors: {\n tableField: {\n atLeastOneColumn: \"Veuillez ajouter au moins une colonne.\",\n exceedColumnNumberLimit:\n \"Un tableau ne peut contenir que {0} colonnes.\",\n duplicatedColumName:\n \"Les noms de colonnes en double ne sont pas autorisés. Veuillez vous assurer que les noms des colonnes sont uniques.\",\n columnMustHasName: \"Une colonne doit avoir un nom.\"\n }\n },\n banner: {\n copied:\n \"Copie des paramètres du champ « {0} » de l'unité d'entreprise {1}.\",\n multiSelectWarning:\n \"Le champ ne pourra pas revenir à la sélection unique une fois les modifications enregistrées.\",\n hbMappingsWarning:\n \"Remarque : les mappages de l'intégration HeavyBid ne seront pas copiés.\",\n copiedFromTable: \"{0} copié à partir du tableau {1} dans {2}.\",\n copiedFrom: \"{0} copié à partir de {1}.\"\n },\n buttons: {\n undo: \"Annuler\",\n copyFrom: \"Copier à partir\"\n }\n },\n location: {\n geocoder: {\n placeholder: \"Rechercher une adresse ou une adresse latitude/longitude\",\n dropLatLongPin:\n \"Déposer une épingle à latitude : {0} et longitude : {1}\",\n errorFetchingData:\n \"Une erreur s'est produite lors de l'extraction des données. Veuillez réessayer.\"\n }\n }\n },\n import: {\n supportedProjectsFileFormats:\n \"Seuls les formats .xls et .xlsx sont pris en charge\",\n acceptableValues: \"Valeurs acceptables\",\n adminOnly: \"Ce champ n'est accessible qu'aux administrateurs.\",\n acceptableValuesOptions: \"O/N, Oui/Non, Vrai ou Faux, T/F, 1/0\",\n acceptableLocationValues: \"#.###,#.###\",\n acceptableLocationValuesWithGeocoding:\n \"Remarque : Seules les latitudes/longitudes valides (au format ##.###,##.###) ou les adresses valides (au format adresse postale, ville, état, code postal) s'afficheront sur la carte.\",\n acceptableLocationValuesDescription:\n \"Une virgule séparée la valeur Lat,Long avec des plages valides [-90, 90] pour la latitude et [-180, 180] pour la longitude\",\n exampleValueList: \"Exemple de liste de valeurs :\",\n multiSelectSeparators: {\n title:\n \"Choisir un séparateur pour les champs à sélection multiple contenant plusieurs valeurs\",\n comma: \"Virgule (A,B)\",\n semicolon: \"Point-virgule (A;B)\",\n pipe: \"Tuyau (A|B)\"\n },\n importResults: {\n title: \"Importer les résultats\",\n emptyMessage: \"Commencez l'importation pour afficher les résultats\"\n },\n required: \"Requis\",\n title: \"Importer des projets\",\n input: {\n title: \"Importation de fichiers\",\n noFile: \"Aucun fichier sélectionné\",\n supportedFormat: \"Format pris en charge : .xlsx, .xls\"\n },\n settings: \"Paramètres\",\n recordExists: {\n title: \"S'il existe déjà un dossier dans le fichier\",\n skip: \"Ignorer l'enregistrement\",\n overwrite: \"Écraser l'enregistrement\"\n },\n firstRowHeadings: \"La première ligne contient les en-têtes de colonne\",\n fields: \"Champs\",\n excelColumn: \"Colonne Excel\",\n columnMapping: {\n title: \"Mappage des colonnes\"\n },\n clear: \"Effacer\",\n preview: {\n title: \"Prévisualiser\",\n emptyMessage: \"Chargez le fichier pour le prévisualiser\"\n },\n import: \"Importer\",\n cancel: \"Annuler\",\n finish: \"Terminer\",\n projectsCreated: \"{0} projet(s) ajouté(s)\",\n projectsUpdated: \"{0} projet(s) mis à jour\",\n created:\n \"{0} projet(s) auquel(s) les résultats de la soumission ont été ajoutés\",\n updated: \"{0} projet(s) dont les résultats des soumissions sont mis à jour\",\n importSpinner: \"Importation...\",\n importComplete: \"Terminé!\",\n importFailStartAgain: \"Veuillez recommencez!\",\n validateSpinner: \"Validation\",\n validationSuccess: \"Succès de la validation\",\n skipped: \"{0} ignoré\",\n viewErrors: \"Afficher les erreurs\",\n validationWarnings: \"Avertissements de validation\",\n row: \"Ligne\",\n project: \"Projet\",\n errors: {\n mappingsErrorNotificationTitle: \"Impossible d'importer des projets.\",\n mappingsErrorNotificationMessage:\n \"Veuillez vérifier le mappage de vos colonnes.\",\n read: {\n title: \"Erreur de lecture du fichier\",\n message:\n \"Une erreur s'est produite lors de la lecture du fichier sélectionné.\"\n },\n required: {\n title: \"Champ obligatoire non attribué\",\n message:\n \"{0} est un champ obligatoire et doit être attribué à une colonne Excel\"\n },\n invalid: {\n title: \"Entrée invalide\",\n message: \"La valeur doit être une lettre\"\n },\n duplicate: {\n title: \"Valeur en double\",\n message: \"{0} a la même affectation de colonne Excel\"\n },\n rowValidation: \"{0} et a été ignoré\",\n duplicateRow: \"a été ignoré car {0} existe déjà.\",\n genericImport: \"L'importation d'un nom de projet {0} a échoué.\",\n invalidColumn: \"{0}, a une valeur {1} non valide.\",\n lockedField: \"{0}, impossible d'importer dans un champ verrouillé.\",\n requiredColumn: \"Il manque un champ obligatoire à {0},\",\n missingValue:\n \"{0}, a une valeur {1} qui ne correspond pas aux options actuelles de la liste de sélection,\",\n missingMultiValue:\n \"{0}, a des valeurs {1} qui ne correspondent pas aux options actuelles de la liste de sélection,\",\n fileType: {\n title: \"Type de fichier incorrect ({0})\",\n message: \"Seuls les types de fichiers .xlsx et .xls sont pris en charge\"\n },\n locationType: {\n invalidLatitude:\n \"{0} a une valeur de latitude non valide. Il doit être compris entre -90 et 90.\",\n invalidLongitude:\n \"{0} a une valeur de longitude non valide. Il doit être compris entre -180 et 180.\",\n isNullIsland:\n \"{0} a une valeur non valide. L'emplacement est défini sur Null Island (0,0).\"\n }\n },\n notes: {\n warning: \"Avertissement\",\n note: \"Note\",\n preConIdDisabled: \"Le champ {0} est défini sur 'désactivé'.\",\n preConIdEnable: \"Le champ {0} est défini sur « activé ».\",\n preConIdWillBeSet:\n \"Par conséquent, {0} valeurs de champ pour le(s) nouveau(s) projet(s) seront générées automatiquement\",\n preConIdWillNotBeSet:\n \"Par conséquent, {0} valeurs de champ pour le(s) nouveau(s) projet(s) ne seront pas générées automatiquement\",\n noProjectsWithPreConId:\n \"Cependant, aucun projet n'a actuellement une valeur pour le\\n champ {0}. Par conséquent, les valeurs de champ {0} pour le(s) nouveau(s) projet(s) ne seront pas générées automatiquement.\",\n pleaseEnablePreConId:\n \"Si vous souhaitez que ces valeurs soient générées automatiquement, veuillez activer le champ {0} dans Personnaliser la configuration > Projets.\",\n createProjectWithPreConId:\n \"Si vous souhaitez que ces valeurs soient générées automatiquement, veuillez d'abord enregistrer un projet avec une valeur {0}.\",\n pleaseDisablePreConId:\n \"Si vous ne souhaitez pas que ces valeurs soient générées automatiquement, veuillez désactiver le champ {0}\\n dans Personnaliser la configuration > Projets\",\n nextPreConId: \"La prochaine valeur du champ {0} est\",\n allCurrentProjectsDontHavePreConId:\n \"Cependant, aucun projet n'a actuellement une valeur pour le\\n champ {0}. Par conséquent, les valeurs de champ {0} pour le(s) nouveau(s) projet(s) ne seront pas générées automatiquement.\"\n }\n },\n charts: {\n types: {\n pie: \"À secteurs\",\n line: \"Linéaire\",\n bar: \"En barres\"\n },\n options: {\n title: \"Options du graphique\",\n type: \"Type de graphique  :\",\n layout: {\n title: \"Mise en page :\",\n vertical: \"Verticale\",\n horizontal: \"Horizontale\"\n },\n projectCount: \"Nombre de projets\",\n total: \"Total\",\n xAxis: \"Axe X :\",\n groupBy: \"Grouper par :\",\n yAxis: \"Axe Y :\",\n totalBy: \"Total par :\",\n selectField: \"Sélectionnez un champ :\",\n sliceOptions: \"Options de tranche :\",\n inputPlaceholder: \"Sélectionner\",\n clear: \"(clair)\"\n }\n },\n bidResults: {\n title: \"Résultats des enchères\",\n table: {\n noData: \"Ajouter les résultats des enchères\",\n noDataReadOnly: \"Aucun résultat d'enchère à afficher\",\n leftOnTable: \"Laissé sur la table\",\n percentFromLowBid: \"% de l'enchère la plus basse\",\n fromLowBid: \"À partir de l'enchère la plus basse\",\n winner: \"Gagnant\",\n companyName: \"Nom de l'entreprise\",\n amount: \"Total de l'offre\",\n share: \"Partager\",\n copySuccess: \"Ajouté au presse-papier!\",\n copySuccessTwo:\n \"Collez les résultats de votre enchère dans Excel ou dans le corps d'un courriel.\",\n copyFailure:\n \"Un problème est survenu lors de la copie des résultats de votre enchère.\",\n copyFailureTwo:\n \"Veuillez vous assurer que vous utilisez un navigateur compatible avec cette application.\"\n },\n view: {\n toolTip: {\n statsFor: \"Statistiques pour\",\n won: \"Gagné\",\n lost: \"Perdu\",\n dollars: \"Dollars\",\n percent: \"Pour cent\",\n hitRatio: \"Taux de réussite\",\n fromLowBid: \"À partir de l'enchère la plus basse\",\n leftOnTable: \"Laissé sur la table\"\n }\n }\n },\n calendars: {\n subscribePanel: {\n title: \"Abonnez-vous aux calendriers\",\n links: \"Ces liens sont uniques à votre compte\",\n visible:\n \"Les calendriers iCal sont visibles par toute personne disposant du lien\",\n openAccountSettingsButton: \"Ouvrir les paramètres du calendrier\",\n openAccountSettingsAfter: \"pour lier des comptes externes\"\n },\n card: {\n copy: {\n title: \"Copié dans le presse-papier\",\n message: \"Lien du calendrier copié pour {0}\"\n },\n readlonlyLinkLabel: \"Lien iCal partageable (lecture seule)\",\n nylasLinkLabel: \"Calendrier Outlook\",\n createLink: \"Créer un lien\",\n createReadonlyLink: \"Créer un lien iCal partageable\",\n createNylasLinkk: \"Créer une connexion Outlook\",\n deleteReadonlyLink: \"Supprimer le lien iCal\",\n deleteNylasLink: \"Supprimer la connexion Outlook\",\n options: \"Options\",\n deleteReadonlyConfirmation:\n \"Êtes-vous sûr de vouloir supprimer votre lien iCal existant? Cela rompra les intégrations existantes.\",\n deleteHcssConnectConfirmation:\n \"Êtes-vous sûr de vouloir supprimer le lien de votre calendrier connecté existant? Cela supprimera les événements existants de votre calendrier lié.\",\n deleteReadonlyWarning:\n \"Cela supprimera votre lien iCal existant, ce qui rompra les intégrations existantes.\",\n deleteNewReadonlyLink:\n \"Un nouveau lien sera créé pour remplacer l'ancien.\",\n deleteHcssConnectWarning:\n \"Cela supprimera vos événements de calendrier existants du calendrier actuellement lié.\",\n deleteNewHcssConnectLink:\n \"De nouveaux événements seront créés sur le calendrier nouvellement lié.\",\n deleteTitle: \"Supprimer le lien\",\n continue: \"Continuer\",\n cancel: \"Annuler\",\n lastSync: \"Dernière synchronisation : {0}\",\n none: \"aucun\",\n syncWarning:\n \"La mise à jour de votre client de calendrier peut prendre entre quelques minutes et quelques heures. Vérifiez les paramètres de votre client si vous avez besoin de mises à jour plus rapides.\"\n }\n },\n hcssConnect: {\n subscribePanel: {\n title: \"Connectez vos comptes de calendrier\",\n connectAccountButton: \"Connecter un nouveau compte\",\n linkedAccounts: \"Comptes liés\"\n },\n card: {\n delete: \"Supprimer\",\n deleteConfirmation:\n \"Êtes-vous sûr de vouloir supprimer votre compte de calendrier existant? Cela rompra les intégrations existantes.\",\n deleteTitle: \"Supprimer le lien\",\n continue: \"Continuer\",\n cancel: \"Annuler\",\n deletePopover:\n \"Supprimez toutes les connexions au calendrier Outlook existantes dans le panneau « S'abonner au calendrier » avant de supprimer ce compte.\"\n }\n },\n tutorials: {\n close: {\n message:\n \"Vous pouvez toujours accéder à ce tutoriel en allant dans le menu d'aide!\",\n button: \"Fermer\"\n },\n banner: {\n yes: \"Oui\",\n no: \"Non\"\n },\n projectTutorial: {\n create: \"Cela vous permet de créer un nouveau projet.\",\n details:\n \"Cliquer sur le nom du projet vous permet de modifier le projet une fois qu'il a déjà été créé.\",\n rearrange:\n \"Les colonnes peuvent être réorganisées en cliquant et en faisant glisser les en-têtes de colonnes vers la gauche ou la droite.\",\n group:\n \"Cliquez et faites glisser l'en-tête de colonne dans cette zone pour regrouper les résultats par cette colonne.\",\n other:\n \"D'autres personnalisations et rapports sont disponibles dans le menu d'options ou en cliquant avec le bouton droit sur un en-tête de colonne.\",\n save:\n \"Une fois que vous avez configuré le tableau comme vous le souhaitez, vous pouvez l'enregistrer en tant que modèle. Utilisez le menu d'options pour enregistrer de nouveaux modèles ou pour en sélectionner un par défaut.\",\n customizable:\n \"N’oubliez pas que tout est personnalisable dans le suivi de projet! Utilisez le menu Suivi de projet pour accéder à la page Personnaliser les projets ou pour importer des projets existants à partir d’Excel.\",\n complete: \"Terminez le tutoriel!\"\n }\n },\n smtp: {\n title: \"Paramètres du serveur de messagerie\",\n subtitle:\n \"Configurer les paramètres de messagerie pour l’unité commerciale : {0}\",\n subtitle2: \"Configurer les paramètres de courriel de l’entreprise\",\n cancel: \"Annuler\",\n save: \"Sauvegarder et tester\",\n oauth:\n \"Des paramètres personnels de courriel ont été configurés pour l’utilisateur actuel. Ces paramètres remplaceront toutes les autres configurations lors de l’envoi de courriels.\",\n home: \"Accueil\",\n previouslyConfigured:\n \"Les paramètres SMTP ont été configurés pour cette unité commerciale. Si nécessaire, vous pouvez définir de nouveaux paramètres.\",\n changeSettings: \"Modifier les paramètres\",\n resend: \"Renvoyer le message de test\",\n username: \"Nom d’utilisateur\",\n server: \"Serveur\",\n port: \"Port\",\n password: \"Mot de passe\",\n validations: {\n serverAddressBlank: \"L’adresse du serveur ne peut pas être vide.\",\n portBlank: \"Le champ port ne peut pas être vide.\",\n usernameBlank: \"Le nom d’utilisateur ne peut pas être vide.\",\n passwordBlank: \"Le mot de passe ne peut pas être vide.\"\n },\n messages: {\n saved: {\n success: {\n title: \"Sauvegardé\",\n message:\n \"Les paramètres SMTP de cette unité commerciale ont été enregistrés.\"\n },\n error: {\n title: \"Impossible de sauvegarder\",\n message:\n \"Une erreur s’est produite lors de l’envoi du message de test.\"\n }\n },\n test: {\n success: {\n title: \"Message de test envoyé\",\n message: \"Un message test a été envoyé à « {0} ».\"\n },\n unable: {\n title: \"Impossible d’envoyer\",\n message:\n \"Une erreur s’est produite lors de l’envoi du message de test.\"\n },\n failure: {\n title: \"Échec de l’envoi\",\n message: \"L’utilisateur actuel n’a pas d’adresse de courriel valide.\"\n }\n }\n }\n },\n users: {\n messages: {\n saved: {\n success: \"Préférences de l’utilisateur\",\n error: \"Erreur d’enregistrement des préférences de l’utilisateur\"\n }\n },\n oAuthConfig: {\n getUserError: {\n title: \"Erreur\",\n message: \"Impossible de récupérer vos paramètres de messagerie\"\n },\n testMessageError: {\n title: \"Échec du test\",\n message:\n \"Impossible d’envoyer un message de test. Vérifiez que votre login n’a pas expiré.\"\n },\n testMessageSuccess: {\n message: \"Message de test envoyé avec succès {0}.\",\n title: \"Test réussi !\"\n }\n }\n },\n heavyBid: {\n code: \"Code\",\n name: \"Nom\",\n description: \"Description\",\n lastActivity: \"Dernière activité\",\n activeEstimate: \"Estimation synchronisée\",\n excludedEstimate: \"Estimation exclue\",\n division: \"Division\",\n projectName: \"Nom du projet\",\n projectNumber: \"Numéro du projet\",\n status: \"Statut\",\n engineer: \"Ingénieur\",\n estimator: \"Estimateur\",\n owner: \"Propriétaire\",\n bidDate: \"Date de l’offre\",\n startDate: \"Date de début\",\n reviewDate: \"Date de révision\",\n createdDate: \"Date de création\",\n bidTotal: \"Total de l’offre\",\n totalCost: \"Coût total\",\n state: \"État\",\n processedStatus: {\n 0: \"En attente\",\n 1: \"En cours de traitement\",\n 2: \"Succès\",\n 3: \"Échec\",\n 4: \"File d’attente Large\",\n title: \"Statut traité\"\n },\n typeOfWork: \"Type de travail\",\n filter1: \"Étiquette 1\",\n filter2: \"Étiquette 2\",\n filter3: \"Étiquette 3\",\n filter4: \"Étiquette 4\",\n filter5: \"Étiquette 5\",\n filter6: \"Étiquette 6\",\n text1: \"Texte 1\",\n text2: \"Texte 2\",\n text3: \"Texte 3\",\n text4: \"Texte 4\",\n text5: \"Texte 5\",\n text6: \"Texte 6\",\n text7: \"Texte 7\",\n text8: \"Texte 8\",\n text9: \"Texte 9\",\n text10: \"Texte 10\",\n text11: \"Texte 11\",\n text12: \"Texte 12\",\n text13: \"Texte 13\",\n text14: \"Texte 14\",\n text15: \"Texte 15\",\n text16: \"Texte 16\",\n text17: \"Texte 17\",\n text18: \"Texte 18\",\n text19: \"Texte 19\",\n text20: \"Texte 20\",\n integer1: \"Entier 1\",\n integer2: \"Entier 2\",\n integer3: \"Entier 3\",\n integer4: \"Entier 4\",\n integer5: \"Entier 5\",\n number1: \"Numéro 1\",\n number2: \"Numéro 2\",\n number3: \"Numéro 3\",\n number4: \"Numéro 4\",\n number5: \"Numéro 5\",\n number6: \"Numéro 6\",\n number7: \"Numéro 7\",\n number8: \"Numéro 8\",\n number9: \"Numéro 9\",\n number10: \"Numéro 10\",\n number11: \"Numéro 11\",\n number12: \"Numéro 12\",\n number13: \"Numéro 13\",\n number14: \"Numéro 14\",\n number15: \"Numéro 15\",\n number16: \"Numéro 16\",\n number17: \"Numéro 17\",\n number18: \"Numéro 18\",\n number19: \"Numéro 19\",\n number20: \"Numéro 20\",\n date1: \"Date 1\",\n date2: \"Date 2\",\n date3: \"Date 3\",\n date4: \"Date 4\",\n date5: \"Date 5\",\n address: \"Localisation\",\n latitude: \"Latitude\",\n longitude: \"Longitude\",\n estimatesExtended: \"EstimationÉtendue\",\n estimateInfo: \"Informations sur l’estimation\",\n tags: \"Balises\",\n userDefinedText: \"Texte défini par l’utilisateur\",\n userDefinedIntegers: \"Entiers définis par l’utilisateur\",\n userDefinedNumbers: \"Numéros définis par l'utilisateur\",\n userDefinedDates: \"Dates définies par l'utilisateur\",\n projectTrackingField: \"Champ de suivi de projet\",\n heavyBidField: \"Champ HeavyBid\",\n heavyBidInfo:\n 'Les systèmes HeavyBid 2019.1 et 2020.0 afficheront \" Nouvelle estimation de HeavyBid Pre-Construction \". Cette intégration est disponible pour tous les systèmes à partir de HeavyBid 2020.2.',\n multiSelectSyncInfo:\n \"Si un champ MultiSelect List est associé à un champ HeavyBid et que la préférence de synchronisation des données de suivi de projet est choisie, seule la première valeur de la liste sera synchronisée avec HeavyBid. La première valeur est déterminée par l'ordre de tri choisi dans les options du champ.\"\n },\n region: {\n us: \"États-Unis\",\n au: \"Australie\",\n fr: \"France\",\n gb: \"Royaume-Uni\",\n es: \"ESpagne\",\n de: \"Allemagne\",\n ca: \"Canada\"\n },\n account: {\n confirm: {\n confirm: \"Continuer\",\n confirming: \"Confirmation\",\n discover: \"En savoir plus\",\n enterEmail: \"Saisissez votre courriel pour voir les détails du devis.\",\n invalidEmail: \"Un courriel valide est requis.\",\n invalidMessage: \"Courriel ou lien incorrect.\",\n verifyTitleRfq: \"Vérifiez votre courriel pour voir les détails du devis\",\n verifyTitleProposal:\n \"Vérifiez votre adresse courriel pour voir la proposition de devis\",\n signIn: \"Avez-vous déjà un compte ? S'identifier\",\n signUp: \"S'inscrire maintenant\",\n slogan:\n \"Un seul site web pour tous vos besoins en matière de gestion des appels d'offres\",\n welcome: \"Bienvenue\",\n modules: {\n projects: \"Suivre les projets du début à la fin\",\n estimates:\n \"Soumettre des offres plus rapidement et plus intelligemment\",\n quotes: \"Gérer facilement le processus d'appel d'offres et de devis\",\n messages: \"Recevoir des notifications en temps réel\",\n contacts: \"Gérez tous vos contacts en un seul endroit\"\n }\n },\n login: {\n discover: \"En savoir plus\",\n login: \"Se connecter\",\n feature1:\n \"Estimez votre devis une seule fois et envoyez-le à plusieurs entrepreneurs.\",\n feature2: \"Accédez à votre devis en ligne.\",\n feature3: \"Assurer le suivi des communications.\",\n feature4: \"Envoyer des devis à n'importe quel entrepreneur général.\",\n feature5: \"Générer des propositions professionnelles pour vos devis.\",\n feature6: \"Gérez vos contacts en ligne.\",\n signUp: \"En savoir plus\",\n subTitle1: \"Votre devis polyvalent\",\n subTitle2: \"solution de gestion.\"\n },\n emailVerification: {\n success: \"Vous êtes prêt!\",\n successMsg:\n \"Nous avons pu vérifier votre courriel avec succès. Accordez-nous quelques minutes pour rechercher d'autres devis liés à votre courriel. Cliquez sur le bouton ci-dessous pour revenir à la page d'accueil.\",\n successBtn: \"Aller à la page d'accueil\",\n fail: \"OUPS!\",\n failMsg:\n \"Un problème s'est produit lors de la vérification de votre courriel. Veuillez réessayer de cliquer sur le lien dans notre courriel de confirmation.\"\n }\n },\n breadcrumbs: {\n dashboard: \"Tableau de bord\",\n quotes: \"Devis\",\n quoteDetails: \"Devis actuel\"\n },\n genericModal: {\n cancel: \"Annuler\",\n close: \"Fermer\",\n confirm: \"Confirmer\",\n continue: \"Continuer\"\n },\n loaders: {\n loading: \"Chargement...\",\n updating: \"Mise à jour...\"\n },\n maps: {\n default: \"Défaut\",\n satellite: \"Satellite\"\n },\n notFound: {\n back: \"Retour à la page d'accueil\",\n message: \"Nous ne parvenons pas à trouver la page que vous avez demandée.\",\n title: \"Il n'y a rien ici\"\n },\n genericError: {\n back: \"Retour à la page d'accueil\",\n message:\n \"Un problème s'est produit de notre côté. Nous travaillons aussi vite que possible pour rétablir les choses et les faire fonctionner. Contactez le support HCSS si vous avez besoin d'aide immédiatement.\",\n title: \"Quelque chose n'a pas fonctionné\"\n },\n smartdrive: {\n copyLink: \"Copier le lien\",\n download: \"Télécharger\",\n size: \"Taille:\",\n uploaded: \"Charger\",\n deleteFile: \"Supprimer le fichier?\",\n deleteMessage: \"Êtes-vous sûr de vouloir supprimer\",\n warning:\n \"Avertissement : Cette action est immédiate et ne peut être annulée.\",\n confirm: \"Confirmer Supprimer\",\n cancel: \"Annuler\",\n table: {\n uploadFiles: \"\",\n download: \"Télécharger\",\n selected: \"Sélectionné\",\n all: \"Tout\",\n delete: \"Supprimer\",\n noFiles: \"Aucun fichier à afficher\"\n }\n },\n groupSubMenu: {\n week: \"Semaine\",\n month: \"Mois\",\n year: \"Année\",\n day: \"Jour\",\n quarter: \"Trimestre\"\n },\n common: {\n create: \"Créer\",\n modules: {\n projectTracking: \"Suivi des projets\",\n estimating: \"Aperçu des estimations\",\n quotes: \"Gestion de devis\",\n contacts: \"Gestion des contacts\",\n notifications: \"Notifications\"\n }\n },\n comingSoon: {\n title: \"Bientôt disponible\",\n contactsText:\n \"Gérez tous vos contacts en un seul endroit, maintenez automatiquement les informations à jour, accédez aux contacts dans les applications HCSS et plus encore. Tirez le meilleur parti de votre expérience grâce à une multitude d'intégrations puissantes et transparentes.\",\n notificationsText:\n \"Restez informé des mises à jour importantes de l'application. Affichez et gérez plusieurs notifications à la fois, ce qui vous permet de réduire les interruptions tout au long de la journée.\"\n },\n contact: {\n vendorList: {\n confirmDelete: \"Supprimer l'entreprise\"\n },\n contactList: {\n confirmDelete: \"Supprimer le contact\"\n },\n mainInfo: {\n code: \"Code\",\n name: \"Nom\",\n email: \"Courriel\",\n phoneNumber: \"Téléphone\",\n communicationMethod: \"Méthode de communication\",\n webAddress: \"Siteweb\",\n companyType: \"Type d'entreprise\"\n },\n detailInfo: {\n addressLine1: \"Ligne d'adresse 1\",\n addressLine2: \"Ligne d'adresse 2\",\n city: \"Ville\",\n postalCode: \"Code postal\",\n countryRegion: \"Pays\",\n faxNumber: \"Fax\",\n note: \"Notes\",\n clear: \"(Clair)\"\n },\n scopeOfWork: {\n select: \"Sélectionner les champs d'application\",\n scopesOfWork: \"Champ d'application des travaux\"\n },\n minorityStatus: {\n confirmDelete: \"Supprimer le statut de minorité\",\n minorityStatuses: \"Statuts des minorités\",\n notice:\n \"enregistrez d'abord votre vendeur avant de pouvoir ajouter des MS\"\n },\n setup: {\n errors: {\n companyTypeFilterRequired:\n \"Au moins un filtre est requis pour le filtre Type d'entreprise pour le champ « {0} »\",\n contactTypeFilterRequired:\n \"Au moins un filtre est requis pour le filtre sur l'étendue des travaux pour le champ « {0} »\",\n tableTypeEmptyColumn:\n \"Le champ de tableau « {0} » nécessite au moins une colonne.\",\n tableTypeMoreThan6Columns:\n \"Le champ de tableau « {0} » ne peut avoir plus de 6 colonnes.\"\n }\n }\n },\n unsupportedBrowser: {\n iFrameFallback:\n \"Impossible d'afficher le contenu. Ce navigateur n'est pas pris en charge.\",\n bannerTitle:\n \"Il se peut que vous rencontriez des problèmes de performance et des bogues dans votre navigateur actuel.\",\n bannerDetail:\n \"Voir la liste complète des navigateurs recommandés par le HCSS\",\n here: \"ici\",\n dismiss: \"Ignorer\"\n },\n autoSaveIndicator: {\n saving: \"Sauvegarde...\",\n saved: \"Sauvegardé\",\n errorText: \"Nous avons rencontré un problème. Cliquez ici pour réessayer.\"\n },\n estimatesLoadIndicator: {\n loading: \"Chargement...\"\n },\n remarkable: {\n estimateInsights: {\n textHeader:\n \"Vous avez été identifié dans un commentaire sur une Estimation ({0}) :\"\n },\n projectTracking: {\n textHeader:\n \"Vous avez été identifié dans un commentaire sur un projet ({0}) :\"\n },\n quoteManagement: {\n textHeader:\n \"Vous avez été identifié dans un commentaire sur un devis envoyée à {0} {1} par {2} :\"\n }\n },\n modals: {\n columnChooserModal: {\n title: \"Afficher/masquer les colonnes\",\n kpisTitle: \"Afficher/masquer les ICP\",\n buttons: {\n hide: \"Cacher tout\",\n show: \"Tout afficher\",\n collapseAll: \"Réduire tout\",\n expandAll: \"Tout développer\",\n close: \"Fermer\"\n },\n inputs: {\n search: {\n label: \"Rechercher\",\n placeholder: \"Champs de recherche...\"\n },\n dropdown: {\n sortBy: {\n label: \"Trier par\",\n placeHolder: \"Trier par...\"\n }\n },\n radio: {\n summaryType: {\n label: {\n sum: \"Somme\",\n avg: \"Moyenne\"\n }\n }\n }\n },\n noData: {\n title: \"Aucun résultat trouvé\"\n }\n }\n }\n};\nexport default data;\n","import LocalizedStrings, { LocalizedStringsMethods } from \"react-localization\";\nimport { en } from \"./english\";\nimport fr from \"./fr-ca\";\n\nexport type IStrings = typeof en & LocalizedStringsMethods;\n\nexport const strings = new LocalizedStrings(\n {\n en,\n fr\n }\n // { pseudo: true } //for testing out what will be translated\n) as IStrings;\n","import moment from \"moment\";\n\nexport function parseDate(stringValue: string): Date | null {\n const dateValue = moment(stringValue, \"L LT\");\n if (dateValue.isValid()) {\n return dateValue.toDate();\n }\n return null;\n}\n\nexport function formatDate(date: Date, includeTime = true): string {\n if (includeTime) {\n return moment(date).format(\"L LT\");\n }\n\n return moment(date).format(\"L\");\n}\n","import { strings } from \"./strings\";\nimport moment from \"moment\";\n\nexport * from \"./dates\";\nexport * from \"./strings\";\n\nfunction getLanguageName(locale: string) {\n try {\n const languageDisplayName = new Intl.DisplayNames([locale], {\n type: \"language\"\n });\n let languageName = languageDisplayName.of(locale) as string;\n //capital case languageName\n languageName = capitalizeWords(languageName);\n return languageName;\n } catch (error) {\n console.error(\"Error:\", error);\n return null;\n }\n}\n\nexport const regions = {\n \"en-us\": {\n id: \"en-us\",\n language: \"en\",\n dates: \"en-us\",\n name: strings.region.us\n },\n \"en-au\": {\n id: \"en-au\",\n language: \"en\",\n dates: \"en-au\",\n name: strings.region.au\n },\n \"en-gb\": {\n id: \"en-gb\",\n language: \"en\",\n dates: \"en-gb\",\n name: strings.region.gb\n },\n \"en-ca\": {\n id: \"en-ca\",\n language: \"en\",\n dates: \"en-ca\",\n name: strings.region.ca\n },\n \"fr-ca\": {\n id: \"fr-ca\",\n language: \"fr\",\n dates: \"fr-ca\",\n name: strings.region.fr\n }\n};\n\nconst capitalizeWords = (str: string) => {\n return str\n .split(\" \")\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n\nexport const languages = {\n en: {\n id: \"en\",\n name: getLanguageName(\"en\")\n },\n fr: {\n id: \"fr-ca\",\n name: getLanguageName(\"fr-ca\")\n }\n};\n\nexport function switchRegion(region: keyof typeof regions) {\n //uncomment me to get obviously testable moment values\n // moment.locale(\"x-pseudo\");\n //temporary translation solution\n const selectedRegion = regions[region] || regions[\"en-us\"];\n\n moment.locale(selectedRegion.dates);\n}\n\nexport function switchLanguage(language: keyof typeof languages) {\n strings.setLanguage(language);\n}\n","import memoize from \"memoize-one\";\nimport moment from \"moment\";\nimport { filterConstants } from \"./common\";\n\nexport const calculateValuesFromRange = memoize((range: string) => {\n const from = moment().startOf(\"day\");\n const to = moment().startOf(\"day\");\n\n switch (range) {\n case filterConstants.dates.nowM7: {\n return {\n to: to,\n from: from.add(-7, \"day\")\n };\n }\n case filterConstants.dates.nowM30: {\n return {\n from: from.add(-30, \"day\"),\n to: to\n };\n }\n case filterConstants.dates.nowP7: {\n return {\n to: to.add(7, \"day\"),\n from: from\n };\n }\n case filterConstants.dates.nowP30: {\n return {\n to: to.add(30, \"day\"),\n from: from\n };\n }\n case filterConstants.dates.nowM3month: {\n return {\n to: to,\n from: from.add(-3, \"month\")\n };\n }\n case filterConstants.dates.nowM6month: {\n return {\n to: to,\n from: from.add(-6, \"month\")\n };\n }\n case filterConstants.dates.nowM365: {\n return {\n to: to.add(0, \"day\"),\n from: from.add(-1, \"year\")\n };\n }\n case filterConstants.dates.nowP365: {\n return {\n from: from.add(0, \"day\"),\n to: to.add(1, \"year\")\n };\n }\n\n default: {\n return undefined;\n }\n }\n});\n\nexport const isYearIn100Range = (date: Date): boolean => {\n if (!date) return false;\n const currentYear = new Date().getFullYear();\n const year = date.getFullYear();\n return year >= currentYear - 100 && year <= currentYear + 100;\n};\n","import axios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from \"axios\";\nimport { WithId } from \"core\";\nimport { notify } from \"hcss-components\";\nimport { QueryOptions } from \".\";\n\nexport default class RestApi {\n baseUrl = \"/api\";\n instance: AxiosInstance;\n\n constructor(path: string, token: string) {\n this.baseUrl = this.baseUrl + path;\n this.instance = axios.create();\n\n this.instance.interceptors.request.use(config => {\n config.headers.Authorization = `Bearer ${token}`;\n return config;\n });\n\n this.instance.interceptors.response.use(\n response => response,\n error => {\n if (!error.constructor || error.constructor.name !== \"Cancel\") {\n console.error(error);\n }\n\n if (error.response && error.response.status === 401) {\n notify(\n \"danger\",\n \"Something went wrong. Please reload this page and try again.\",\n \"\",\n 0\n );\n }\n\n return Promise.reject(error);\n }\n );\n }\n\n get(path = \"\", options?: QueryOptions): AxiosPromise> {\n return this.instance.get(`${this.baseUrl}/${path}`, {\n params: formatOptions(options)\n });\n }\n\n getOne(id: string): AxiosPromise {\n return this.instance.get(`${this.baseUrl}/${id}`);\n }\n\n create(item: Partial): AxiosPromise {\n return this.instance.post(`${this.baseUrl}/`, item);\n }\n\n createRange(\n item: Partial,\n skipInvalidFields: boolean,\n options: AxiosRequestConfig = {}\n ): AxiosPromise {\n return this.instance.post(\n `${this.baseUrl}/range?skipInvalidFields=${skipInvalidFields}`,\n item,\n options\n );\n }\n\n validateRange(\n item: TEntry,\n options: AxiosRequestConfig = {}\n ): AxiosPromise {\n return this.instance.post(`${this.baseUrl}/validate-range`, item, options);\n }\n\n update(item: WithId>): AxiosPromise {\n return this.instance.put(`${this.baseUrl}/${item.id}`, item);\n }\n\n delete(id: string): AxiosPromise {\n return this.instance.delete(`${this.baseUrl}/${id}`);\n }\n\n deleteRange(ids: string[]): AxiosPromise {\n return this.instance.delete(`${this.baseUrl}/range`, { data: ids });\n }\n\n archive(id: string): AxiosPromise {\n return this.instance.patch(`${this.baseUrl}/archive/${id}`);\n }\n\n archiveRange(ids: string[]): AxiosPromise {\n return this.instance.patch(`${this.baseUrl}/archive-range`, { data: ids });\n }\n}\n\nfunction formatOptions(options?: QueryOptions) {\n if (options) {\n const { continuationToken, top, ...other } = options;\n return {\n continuationToken,\n top,\n \"orderBy.ascending\": other.orderBy ? other.orderBy.ascending : undefined,\n \"orderBy.fieldId\": other.orderBy ? other.orderBy.fieldId : undefined\n };\n }\n}\n\nexport interface PagedResults {\n results?: T[] | undefined;\n nextPageToken?: string | undefined;\n hasNextPage?: boolean;\n}\n","import React, { useEffect, useMemo } from \"react\";\nimport {\n IContactProduct,\n ProductDto\n} from \"api/GeneratedClients/ContactsClient\";\nimport {\n FormControl,\n Autocomplete,\n TextField,\n FilterOptionsState,\n createFilterOptions\n} from \"@mui/material\";\nimport { strings } from \"localization\";\nimport { sortBy } from \"lodash-es\";\nimport { isValidString } from \"core\";\n\nconst inputId = \"scopes-multiselect-select\";\nconst EMPTY_GUID = \"00000000-0000-0000-0000-000000000000\";\n\ninterface ScopeOfWorkProps {\n disabled: boolean;\n vendorProducts: ProductDto[];\n contactProducts: IContactProduct[];\n setContactProducts: React.Dispatch>;\n newCodes: (string | undefined)[];\n setNewCodes: React.Dispatch>;\n}\n\nexport const ContactScopeOfWork = ({\n disabled,\n vendorProducts,\n contactProducts,\n setContactProducts,\n newCodes,\n setNewCodes\n}: ScopeOfWorkProps) => {\n const vendorProductsProduct = useMemo(\n () =>\n vendorProducts.map(vp => ({\n ...vp.product,\n productTypeId: vp.product?.id,\n vendorProductId: vp.id\n })),\n [vendorProducts]\n );\n\n const [options, setOptions] = React.useState<(string | undefined)[]>([]);\n const [createValue, setCreateValue] = React.useState(\"\");\n const [selectedOptions, setSelectedOptions] = React.useState<\n (string | undefined)[]\n >([]);\n const [\n selectedOptionsWithNewCodes,\n setSelectedOptionsWithNewCodes\n ] = React.useState<(string | undefined)[]>([]);\n\n useEffect(() => {\n let contactProductCodes: string[] = [];\n if (selectedOptionsWithNewCodes.length > 0) {\n contactProductCodes = selectedOptionsWithNewCodes as string[];\n } else {\n contactProductCodes = contactProducts.map(p => p.code);\n }\n\n const vendorProductCodes = vendorProductsProduct\n ?.map(vp => vp?.code)\n .filter(vp => !contactProductCodes.includes(vp as string));\n const sortedSelectedOptions = sortBy(contactProductCodes);\n const sortedOptions = sortBy(vendorProductCodes);\n setSelectedOptions(sortedSelectedOptions);\n setOptions(sortedOptions);\n }, [\n contactProducts,\n vendorProducts,\n vendorProductsProduct,\n selectedOptionsWithNewCodes\n ]);\n\n const handleChange = (\n _: React.SyntheticEvent,\n values: unknown\n ) => {\n const selectedCodes = handleAddNewOptionText(\n values as (string | undefined)[]\n );\n const formattedCreateValue = createValue.trim();\n const selectedCreateOption = `Create \"${formattedCreateValue}\"`;\n const newCodesList = determineNewCodesList(selectedCodes);\n const selectedExistingCodes = selectedCodes.filter(\n code => !newCodesList.includes(code) && code !== selectedCreateOption\n );\n const selectedCodesWithNewCodes = [\n ...selectedExistingCodes,\n ...newCodesList\n ];\n setSelectedOptionsWithNewCodes(selectedCodesWithNewCodes);\n const sortedSelectedOptions = sortBy(selectedCodesWithNewCodes);\n setSelectedOptions(sortedSelectedOptions);\n\n const accumulatedContactProducts = getAccumulatedContactProducts(\n selectedExistingCodes,\n newCodesList\n );\n setContactProducts(accumulatedContactProducts as IContactProduct[]);\n setCreateValue(\"\");\n };\n\n const handleAddNewOptionText = (values: (string | undefined)[]) => {\n const selectedCodes: (string | undefined)[] = values.filter(\n value =>\n value !==\n strings.contactManagement.contactListModal.emptyScopeOfWorksText\n );\n return selectedCodes;\n };\n\n const determineNewCodesList = (selectedCodes: (string | undefined)[]) => {\n const selectedOption = selectedCodes[selectedCodes.length - 1];\n const formattedCreateValue = createValue.trim();\n const selectedCreateOption = `Create \"${formattedCreateValue}\"`;\n const createdCode = selectedOption === selectedCreateOption;\n if (createdCode) {\n const newCodesList: (string | undefined)[] = [\n ...newCodes,\n formattedCreateValue\n ];\n setNewCodes(newCodesList);\n return newCodesList;\n }\n const selectedNewCodes = newCodes.filter(code =>\n selectedCodes.includes(code)\n );\n setNewCodes(selectedNewCodes);\n return selectedNewCodes;\n };\n\n const getAccumulatedContactProducts = (\n selectedCodes: (string | undefined)[],\n newCodesList: (string | undefined)[]\n ) => {\n const existingContactProducts = vendorProductsProduct\n .filter(vp => selectedCodes.includes(vp.code as string))\n .map(vp => ({\n vendorProductId: vp.vendorProductId,\n code: vp.code,\n productTypeId: vp.productTypeId\n }));\n const newProducts = newCodesList.map(code => ({\n productTypeId: EMPTY_GUID,\n code: code?.toUpperCase(),\n vendorProductId: EMPTY_GUID\n }));\n const accumulatedContactProducts = [\n ...existingContactProducts,\n ...newProducts\n ];\n return accumulatedContactProducts;\n };\n\n const filterOptions = (\n options: unknown[],\n params: FilterOptionsState\n ) => {\n const filter = createFilterOptions();\n const filtered = filter(options, params) as string[];\n\n const { inputValue } = params;\n const formattedInputValue = inputValue.trim();\n\n const isExistingOption = options.some(\n option => formattedInputValue === option\n );\n const isExistingSelectedOption = selectedOptions.some(\n option => formattedInputValue === option\n );\n const validNewOption =\n isValidString(formattedInputValue) &&\n !isExistingOption &&\n !isExistingSelectedOption;\n\n if (validNewOption) {\n const addValue = `Create \"${formattedInputValue}\"`;\n filtered.push(addValue);\n } else {\n filtered.push(\n strings.contactManagement.contactListModal.emptyScopeOfWorksText\n );\n }\n\n return filtered;\n };\n\n const onInputChange = (\n _: React.SyntheticEvent,\n input: string\n ) => {\n const formattedInput = input.toUpperCase().trimStart().replace(/ +/g, \" \");\n setCreateValue(formattedInput);\n };\n\n return (\n \n (\n \n )}\n />\n \n );\n};\n","import React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { DropdownList } from \"react-widgets\";\nimport { Checkbox, Modal } from \"hcss-components\";\nimport { Flex } from \"hcss-core\";\nimport {\n IContactProduct,\n IContactDto,\n IVendorDtoV1Response,\n ProductDto\n} from \"api/GeneratedClients/ContactsClient\";\nimport {\n actions as contactsActions,\n selectors as contactsSelectors\n} from \"modules/contacts\";\nimport {\n CompanyBadge,\n CompanyDropdownFilter,\n CompanyFieldData,\n CompanyOption\n} from \"modules/schemas/components/fields/CompanyInput\";\nimport { DropdownContainer } from \"modules/schemas/components/fields/MultiSelectListInput\";\nimport Button from \"@mui/material/Button\";\nimport MuiGrid from \"@mui/material/Grid\";\nimport TextField from \"@mui/material/TextField\";\nimport FormGroup from \"@mui/material/FormGroup\";\nimport { formatPhoneNumber, formatFirstNameLastName } from \"core\";\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\nimport { strings } from \"localization\";\nimport { Form, Formik } from \"formik\";\nimport * as Yup from \"yup\";\nimport styled from \"styled-components\";\nimport { useVendorLocationDropDown } from \"../hooks/use-vendor-location-drop-down\";\nimport { useGetSelectedVendorFromProject } from \"../hooks/use-get-selected-vendor-from-project\";\nimport {\n FormControl,\n FormHelperText,\n InputLabel,\n MenuItem,\n Select\n} from \"@mui/material\";\nimport { ContactScopeOfWork } from \"./contact-scopes-of-work\";\nimport { IVendorListOption } from \"../interfaces/IVendorListOption\";\nimport { IContactListOption } from \"../interfaces/IContactListOption\";\n\ninterface ContactListModalProps {\n editingContact: IContactDto;\n vendor: IVendorDtoV1Response | undefined;\n selectNewContactCallback?: (data: IContactListOption) => void;\n setShowCreateContactModal?: (showModal: boolean) => void;\n showCreateContactModal?: boolean;\n}\ninterface LocationIdOption {\n readonly value: string;\n readonly label: string;\n}\n\nexport const ContactListModal = ({\n editingContact: contact,\n vendor,\n selectNewContactCallback,\n setShowCreateContactModal,\n showCreateContactModal\n}: ContactListModalProps) => {\n const showModalFromList = useSelector(contactsSelectors.getShowModal);\n const isLoading = useSelector(contactsSelectors.getLoading);\n const [contactLocationId, setContactLocationId] = useState<\n string | undefined\n >();\n const [contactProducts, setContactProducts] = useState(\n contact.products ? contact.products : []\n );\n const [vendorProducts, setVendorProducts] = useState(\n vendor?.products ? vendor.products : []\n );\n const [newCodes, setNewCodes] = React.useState<(string | undefined)[]>([]);\n const [\n selectedCompany,\n setSelectedCompany\n ] = useState();\n const foundVendor = useGetSelectedVendorFromProject(selectedCompany?.id);\n if (foundVendor) {\n vendor = foundVendor;\n }\n const showCompanyDropdown = !window.location.pathname.includes(\"/contacts/\");\n const ableToSetShowCreateContactModal =\n showCompanyDropdown &&\n showCreateContactModal != undefined &&\n setShowCreateContactModal != undefined;\n\n const vendorDataOptions = useSelector(contactsSelectors.getVendorDataOptions);\n const options: IVendorListOption[] = vendorDataOptions\n .map(data => {\n return {\n display: `${data.code} - ${data.name}`,\n value: data,\n code: data.code,\n id: data.id,\n products: data.products\n };\n })\n .filter(op => op.id !== vendor?.id);\n\n useEffect(() => {\n setNewCodes([]);\n setVendorProducts(vendor?.products ? vendor.products : []);\n setContactProducts(contact.products ? contact.products : []);\n setContactLocationId(contact.vendorLocationId);\n if (ableToSetShowCreateContactModal) {\n setShowCreateContactModal(showCreateContactModal);\n }\n }, [contact, vendor]);\n\n const isNewContact = !!!contact.id;\n const { locationOptions } = useVendorLocationDropDown(vendor);\n const locationSelectionOptions: LocationIdOption[] =\n locationOptions?.map(l => ({\n value: l.id,\n label: l.display\n })) ?? [];\n if (contactLocationId) {\n locationSelectionOptions?.push({ value: \"\", label: \"(clear)\" });\n }\n\n const dispatch = useDispatch();\n const onAddHandler = (contactParams: IContactDto) => {\n contactParams = {\n ...contactParams,\n vendorLocationId: contactLocationId,\n products: contactProducts\n };\n if (vendor && contact !== undefined && !isLoading) {\n dispatch(\n contactsActions.addContact.request({\n vendor: vendor,\n contact: contactParams\n })\n );\n setNewCodes([]);\n }\n };\n\n const onAddFromProjectHandler = (contactParams: IContactDto) => {\n contactParams = {\n ...contactParams,\n vendorLocationId: contactLocationId,\n products: contactProducts\n };\n if (\n vendor &&\n contact !== undefined &&\n !isLoading &&\n setShowCreateContactModal\n ) {\n dispatch(\n contactsActions.addContactFromProject.request({\n vendor: vendor,\n contact: contactParams,\n updateInput: sendContactInputData,\n setShowCreateContactModal: setShowCreateContactModal,\n setSelectedCompany: setSelectedCompany\n })\n );\n setNewCodes([]);\n }\n };\n\n const sendContactInputData = (\n contact: IContactDto,\n vendor: IVendorDtoV1Response\n ) => {\n const fullname = formatFirstNameLastName(\n contact.firstName,\n contact.lastName\n );\n if (selectNewContactCallback) {\n const displayData: IContactListOption = {\n display: fullname,\n value: {\n id: contact.id,\n firstName: contact.firstName,\n lastName: contact.lastName,\n companyId: vendor.id,\n companyCode: vendor.code,\n companyName: vendor.name,\n email: contact.emailAddress,\n phoneNumber: contact.phoneNumber,\n products: contact.products\n },\n id: contact.id\n };\n selectNewContactCallback(displayData);\n }\n };\n\n const onSelectCompanyHandler = (data: IVendorListOption) => {\n setSelectedCompany(data.value);\n };\n\n const onEditHandler = (contactParams: IContactDto) => {\n contactParams = {\n ...contactParams,\n vendorLocationId: contactLocationId,\n products: contactProducts\n };\n if (vendor && contact !== undefined && contactParams.id && !isLoading) {\n dispatch(\n contactsActions.updateContact.request({\n contact: contactParams,\n vendor: vendor\n })\n );\n setNewCodes([]);\n }\n };\n\n const onCancelHandler = () => {\n setNewCodes([]);\n setVendorProducts([]);\n setContactProducts([]);\n setSelectedCompany(null);\n if (ableToSetShowCreateContactModal) {\n setShowCreateContactModal(false);\n } else {\n dispatch(contactsActions.setShowModal(false));\n }\n };\n\n return (\n {}}\n enforceFocus={false}\n >\n \n \n \n

\n {isNewContact\n ? strings.contactManagement.contactListModal.modalAddTitle\n : strings.contactManagement.contactListModal.modalEditTitle}\n

\n
\n \n {\n onCancelHandler();\n }}\n >\n ×\n \n \n
\n
\n \n {\n if (isNewContact && !isLoading) {\n if (showCompanyDropdown) {\n onAddFromProjectHandler(values);\n } else {\n onAddHandler(values);\n }\n } else if (!isLoading) {\n onEditHandler(values);\n }\n }}\n >\n {formik => (\n \n \n \n \n

{strings.contactManagement.contactFields.company}

\n \n \n
\n \n \n CompanyDropdownFilter(option, search)\n }\n textField=\"display\"\n valueField=\"code\"\n value={selectedCompany}\n data={options}\n onChange={onSelectCompanyHandler}\n messages={{\n emptyList:\n strings.projects.setup.message.emptyCompanyList\n }}\n itemComponent={({ item }) => (\n \n )}\n />\n \n
\n \n
\n
\n \n \n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n\n \n \n \n \n \n \n \n \n }\n label={\n strings.contactManagement.contactListModal.placeholders\n .mainContact\n }\n />\n \n \n \n \n {strings.contactManagement.contactListModal.officeLabel}\n \n {\n setContactLocationId(value.target.value);\n }}\n >\n {locationSelectionOptions?.map(o => (\n {o.label}\n ))}\n {locationSelectionOptions?.length === 0 && (\n \n {\n strings.contactManagement.contactListModal\n .emptyLocationsText\n }\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {isNewContact\n ? strings.contactManagement.contactListModal.buttonAdd\n : strings.contactManagement.contactListModal.buttonSave}\n \n \n \n \n
\n )}\n \n
\n \n );\n};\n\nconst YupValidationSchema = Yup.object({\n firstName: Yup.string().required(\"First Name is required\"),\n lastName: Yup.string().required(\"Last Name is required\"),\n emailAddress: Yup.string().email(\"Invalid email address\")\n});\n\nconst StyledTextField = styled(TextField)`\n height: 7rem;\n width: 100%;\n`;\n\nexport const StyledForm = styled(Form)`\n padding: 0 0.6rem;\n`;\nexport const TimesButton = styled.button`\n position: absolute;\n right: 23px;\n button.close {\n color: \"Black\")};\n opacity: 0.4;\n font-size: 28px;\n :hover {\n opacity: 0.9;\n }\n}\n`;\n","import { useSelector } from \"react-redux\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\n\nexport function useGetSelectedVendorFromProject(selectedVendorId = \"\") {\n const vendorList = useSelector(contactsSelectors.getVendorList);\n const currentSelectedVendor = vendorList.find(v => v.id === selectedVendorId);\n return currentSelectedVendor;\n}\n","import { useCallback, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n UndoEstimateLinkingStatus,\n actions,\n selectors as projectSelectors\n} from \"../state\";\nexport interface UndoEstimatesLinkingOptions {\n whenUndid?: (projectId: string, ids: string[]) => void;\n whenFails?: (error?: Error) => void;\n}\n\nexport const useUndoEstimatesLinking = (\n init: UndoEstimatesLinkingOptions | undefined = undefined\n) => {\n const [undoOptions, setUndoOptions] = useState(init);\n const [undoLoading, setUndoLoading] = useState(false);\n const state = useSelector(projectSelectors.getUndoEstimatesLinkingState);\n\n const dispatch = useDispatch();\n\n const resetUndo = useCallback(() => {\n if (state.status) {\n dispatch(actions.resetUndoEstimatesLinking());\n }\n }, [state, dispatch]);\n\n const undoEstimateLinking = useCallback(() => {\n if (undoOptions && state.projectId && state.linkedEstimatesIds?.length) {\n dispatch(actions.undoEstimatesLinking());\n setUndoLoading(true);\n }\n }, [dispatch, undoOptions, state]);\n\n useEffect(() => {\n if (\n undoOptions &&\n undoOptions.whenFails &&\n state.status === UndoEstimateLinkingStatus.Fails\n ) {\n undoOptions.whenFails(state.error);\n setUndoLoading(false);\n }\n }, [undoOptions, state]);\n\n useEffect(() => {\n if (\n undoOptions &&\n undoOptions.whenUndid &&\n state.linkedEstimatesIds &&\n state.projectId &&\n state.status === UndoEstimateLinkingStatus.Success\n ) {\n undoOptions.whenUndid(state.projectId, state.linkedEstimatesIds);\n setUndoLoading(false);\n }\n }, [undoOptions, state]);\n\n const canUndoStatuses = [\n UndoEstimateLinkingStatus.Ready,\n UndoEstimateLinkingStatus.Fails,\n UndoEstimateLinkingStatus.OptimisticallyReady\n ];\n\n return {\n canUndo: !!(\n undoOptions &&\n state.projectId &&\n state.linkedEstimatesIds?.length &&\n state.status &&\n canUndoStatuses.includes(state.status)\n ),\n resetUndo,\n undoEstimateLinking,\n setUndoOptions,\n error: state.error,\n loading: undoLoading,\n projectId: state.projectId\n };\n};\n","import { SchemaField, SchemaFieldType } from \"api\";\nimport { PreConId } from \"./helpers\";\n\nexport const fieldValueExist = (\n field: Pick,\n value: any\n) => {\n switch (field.type) {\n case SchemaFieldType.Number:\n case SchemaFieldType.Currency: {\n return !!value || value === 0;\n }\n\n case SchemaFieldType.Company:\n case SchemaFieldType.Contact:\n return !!value && (!Array.isArray(value) || value.length > 0);\n\n case SchemaFieldType.MultiSelectList:\n return !!value && value.length > 0;\n\n case SchemaFieldType.Boolean:\n return value != null;\n\n default: {\n return !!value;\n }\n }\n};\nconst getEmptyFieldValue = (field: SchemaField) => {\n switch (field.type) {\n case SchemaFieldType.ShortText:\n case SchemaFieldType.LongText: {\n return \"\";\n }\n case SchemaFieldType.Checklist: {\n return field.config.checklistValues ?? null;\n }\n default: {\n return null;\n }\n }\n};\n\nexport interface InitProjectFieldsData {\n columns?: SchemaField[];\n existingValues?: { [key: string]: any };\n preconId?: PreConId | null;\n isNewProject?: boolean;\n}\nexport const initProjectFields = (data: InitProjectFieldsData) => {\n const {\n preconId,\n columns = [],\n existingValues = {},\n isNewProject = false\n } = data;\n const initialValues: { [key: string]: any } = {};\n\n for (const column of columns) {\n const existValue = existingValues[column.id];\n\n if (fieldValueExist(column, existValue)) {\n initialValues[column.id] = existValue;\n } else {\n const useDefaultValue =\n isNewProject &&\n column.useDefaultValue &&\n fieldValueExist(column, column.defaultValue);\n\n if (useDefaultValue) {\n initialValues[column.id] = column.defaultValue;\n } else {\n initialValues[column.id] = getEmptyFieldValue(column);\n }\n }\n }\n\n const pId = isNewProject ? preconId : existingValues[\"preconId\"];\n\n initialValues[\"preconId\"] = pId ?? null;\n\n return initialValues;\n};\n\nexport const initNewProjectFields = (\n columns: SchemaField[] = [],\n preconId: PreConId | null = null\n) => initProjectFields({ columns, preconId, isNewProject: true });\n","import { NoDataPlaceholder, TextOverflowVertically } from \"core\";\nimport { Button, Icon, Modal } from \"hcss-components\";\nimport PaneledPage from \"core/components/paneled-page/PaneledPage\";\nimport { ToggleButtonGroup, ToggleButton } from \"react-bootstrap\";\nimport {\n DataColumnType,\n SummaryType,\n TableSection,\n TypedDataColumn,\n useTableContext\n} from \"hcss-tables\";\nimport { cloneDeep, Dictionary, keyBy } from \"lodash\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport Checkbox from \"@mui/material/Checkbox\";\nimport FormControlLabel from \"@mui/material/FormControlLabel\";\nimport { useMemo, useState, useEffect } from \"react\";\nimport {\n FormControl,\n FormGroup,\n Grid,\n IconButton,\n InputAdornment,\n MenuItem,\n TextField\n} from \"@mui/material\";\nimport SearchIcon from \"@mui/icons-material/Search\";\nimport CancelIcon from \"@mui/icons-material/CancelSharp\";\nimport ImportExportIcon from \"@mui/icons-material/ImportExport\";\nimport { sortBy } from \"lodash-es\";\nimport { useLocalStorage } from \"hcss-hooks\";\nimport {\n useSelectedBusinessUnitId,\n useUserAndCompanyLicense\n} from \"modules/account\";\nimport { strings } from \"localization\";\nimport { schemaFieldTypeOptions } from \"modules/schemas/components/SchemaSetupModels\";\nimport { SchemaFieldType } from \"api\";\nimport { constantSections } from \"modules/projects\";\n\nenum SortType {\n Alphabetically,\n FieldType,\n Default\n}\nconst sortByOptions = [\n {\n label:\n strings.modals.columnChooserModal.inputs.dropdown.sortByOptions\n .alphabetically,\n value: SortType.Alphabetically\n },\n {\n label:\n strings.modals.columnChooserModal.inputs.dropdown.sortByOptions.fieldType,\n value: SortType.FieldType\n },\n {\n label:\n strings.modals.columnChooserModal.inputs.dropdown.sortByOptions.default,\n value: SortType.Default\n }\n];\ninterface CustomColumnChooserModalProps {\n showProductIcons?: boolean;\n}\nexport const CustomColumnChooserModal = ({\n showProductIcons = false\n}: CustomColumnChooserModalProps) => {\n const {\n columnLookup,\n columns,\n sections,\n visibility: { hiddenColumns, setHiddenColumns },\n columnSelect: { showModal, setShowModal }\n } = useTableContext();\n const { companyLicense } = useUserAndCompanyLicense();\n\n const disabledColumnList: TypedDataColumn[] = useMemo(() => {\n const result: TypedDataColumn[] = [];\n if (!companyLicense.isLimitedLicense) {\n return result;\n }\n\n const hJJobCodeColumn = columns.find(col => col.name === \"hJJob.Code\");\n const hJJobDescription = columns.find(\n col => col.name === \"hJJob.Description\"\n );\n if (hJJobCodeColumn) {\n result.push(hJJobCodeColumn);\n }\n if (hJJobDescription) {\n result.push(hJJobDescription);\n }\n const quickPriceTotalPriceColumn = columns.find(\n col => col.name === \"quickPriceSheet.TotalPrice\"\n ) as TypedDataColumn;\n const quickPriceCountColumn = columns.find(\n col => col.name === \"quickPriceSheet.ProjectPayItemCount\"\n ) as TypedDataColumn;\n if (quickPriceTotalPriceColumn) {\n result.push(quickPriceTotalPriceColumn);\n }\n if (quickPriceCountColumn) {\n result.push(quickPriceCountColumn);\n }\n return result;\n }, [columns, companyLicense]);\n\n useEffect(() => {\n for (const column of disabledColumnList) {\n if (!hiddenColumns.includes(column.name)) {\n changeHiddenColumns(column, false);\n }\n }\n }, [disabledColumnList]);\n\n const hiddenColumnLookup = keyBy(hiddenColumns);\n const [searchFieldsValue, setSearchFieldsValue] = useState(\"\");\n const [sortBySelection, setSortBySelection] = useState(2);\n const businessUnitId = useSelectedBusinessUnitId();\n const [collapsed, setCollapsed] = useLocalStorage(\n `${businessUnitId}-column-chooser-sections-collapsed`,\n []\n );\n // This flag is to deal with modals that don't have section;\n const hasSection = sections.length > 1;\n\n const isTableOrDisabled = (col: TypedDataColumn) => {\n const isTable = col.config?.preConType\n ? col.config.preConType === SchemaFieldType.Table\n : false;\n if (isTable) return true;\n return disabledColumnList.includes(col);\n };\n\n const showAllColumns = React.useCallback(() => {\n setHiddenColumns(\n columns.filter(isTableOrDisabled).map(column => column.name)\n );\n }, [setHiddenColumns, companyLicense]);\n const hideAllColumns = React.useCallback(() => {\n setHiddenColumns(\n columns.filter(column => column.hidingEnabled).map(column => column.name)\n );\n }, [setHiddenColumns, columns]);\n\n const handleSearchFieldChange = (\n event: React.ChangeEvent\n ) => {\n setSearchFieldsValue(event.target.value);\n };\n const handleClearFieldsSearch = () => {\n setSearchFieldsValue(\"\");\n };\n const handleSortBySelection = (\n event: React.ChangeEvent\n ) => {\n setSortBySelection(+event.target.value);\n };\n\n const filteredSectionsOrColumns = useMemo(() => {\n const sectionsToFilter = constantSections.filter(\n s => s !== \"operations\" && s !== \"quickPrice\"\n );\n let newSections = cloneDeep(\n sections.filter(s => !sectionsToFilter.includes(s.id))\n );\n let newColumns = cloneDeep(columns);\n // filtering out table field for now\n const fieldIdsToExclude = newColumns\n .filter(col => col.config?.preConType === SchemaFieldType.Table)\n .map(col => col.id);\n newSections.forEach(section => {\n section.fields = section.fields.filter(\n field => !fieldIdsToExclude.includes(field)\n );\n });\n if (searchFieldsValue) {\n if (hasSection) {\n newSections.forEach(section => {\n section.fields = section.fields.filter(field =>\n columnLookup[field]?.title\n ?.toLowerCase()\n .includes(searchFieldsValue.toLowerCase())\n );\n });\n const updatedCollapsed = collapsed.filter(\n sectionId => !newSections.map(s => s.id).includes(sectionId)\n );\n setCollapsed(updatedCollapsed);\n } else {\n newColumns = newColumns.filter(col =>\n col.title?.toLowerCase().includes(searchFieldsValue.toLowerCase())\n );\n }\n }\n if (sortBySelection !== SortType.Default) {\n switch (sortBySelection) {\n case SortType.Alphabetically:\n if (hasSection) {\n newSections.forEach(section => {\n section.fields = sortBy(section.fields, c =>\n columnLookup[c]?.title?.trim().toLowerCase()\n );\n });\n } else {\n newColumns = sortBy(newColumns, c => c.title);\n }\n break;\n case SortType.FieldType:\n if (hasSection) {\n newSections.forEach(section => {\n section.fields = sortBy(\n section.fields,\n c =>\n columnLookup[c]?.config?.preConType || columnLookup[c]?.type\n );\n });\n } else {\n newColumns = sortBy(newColumns, [\n c => c.config?.preConType ?? c.type,\n c => c.title\n ]);\n }\n break;\n default:\n break;\n }\n }\n newSections = newSections.filter(s => s.fields.length !== 0);\n return hasSection ? newSections : newColumns;\n }, [searchFieldsValue, sortBySelection, sections]);\n\n const isCollapsedAll = collapsed.length === sections.length;\n const handleToggleAll = () => {\n if (isCollapsedAll) {\n setCollapsed([]);\n } else {\n setCollapsed(sections.map(s => s.id));\n }\n };\n const onToggleHandler = (sectionId: string, isSectionCollapsed: boolean) => {\n let newCollapsed = [...collapsed];\n if (isSectionCollapsed) {\n newCollapsed = newCollapsed.filter(s => s !== sectionId);\n } else {\n newCollapsed.push(sectionId);\n }\n setCollapsed(newCollapsed);\n };\n\n const changeHiddenColumns = React.useCallback(\n (column: TypedDataColumn, show: boolean) => {\n let newHiddenColumns = [...hiddenColumns];\n column.hidingEnabled &&\n !show &&\n newHiddenColumns.indexOf(column.name) === -1\n ? newHiddenColumns.push(column.name)\n : (newHiddenColumns = newHiddenColumns.filter(\n columnName => columnName !== column.name\n ));\n setHiddenColumns(newHiddenColumns);\n },\n [hiddenColumns, setHiddenColumns]\n );\n\n const handleCheckAll = (fields: any) => {\n const fieldsLookup = keyBy(fields);\n let newHiddenColumns = [...hiddenColumns];\n const atLeastOneFieldIsHidden =\n fields.findIndex((f: any) => f in hiddenColumnLookup) !== -1;\n if (!atLeastOneFieldIsHidden) {\n newHiddenColumns.push(...fields);\n } else {\n newHiddenColumns = hiddenColumns.filter(c => !(c in fieldsLookup));\n }\n setHiddenColumns(newHiddenColumns);\n };\n\n return (\n {\n setShowModal(false);\n setSearchFieldsValue(\"\");\n }}\n // this is the required class name to prevent the ability to drag the projects table while you editing the modal.\n className=\"drag-ignore\"\n enforceFocus={false}\n >\n \n {strings.modals.columnChooserModal.title}\n \n \n \n \n \n \n \n ),\n endAdornment: searchFieldsValue.length > 0 && (\n \n \n \n \n \n )\n }}\n />\n \n \n \n \n \n )\n }}\n >\n {sortByOptions.map(option => (\n \n {option.label}\n \n ))}\n \n \n \n \n {hasSection ? (\n \n ) : (\n \n {filteredSectionsOrColumns.length === 0 ? (\n \n ) : (\n \n \n {filteredSectionsOrColumns.map(column => {\n return (\n \n );\n })}\n \n \n )}\n \n )}\n \n \n \n <>\n
\n \n \n {hasSection && (\n \n \n \n {isCollapsedAll\n ? `${strings.modals.columnChooserModal.buttons.expandAll}`\n : `${strings.modals.columnChooserModal.buttons.collapseAll}`}\n \n \n )}\n
\n
\n {\n setShowModal(false);\n setSearchFieldsValue(\"\");\n }}\n >\n {`${strings.modals.columnChooserModal.buttons.close}`}\n \n
\n \n
\n \n );\n};\n\ninterface ColumnChooserPaneledPageProps {\n sections: TableSection[];\n columnLookup: Dictionary;\n hiddenColumnLookup: Dictionary;\n collapsedSections: string[];\n showProductIcons: boolean;\n onToggleHandler: (sectionId: string, isSectionCollapsed: boolean) => void;\n changeHiddenColumns: (column: TypedDataColumn, show: boolean) => void;\n handleCheckAll: (fields: any) => void;\n}\n\nexport const ColumnChooserPaneledPage = ({\n sections,\n columnLookup,\n hiddenColumnLookup,\n collapsedSections,\n showProductIcons,\n onToggleHandler,\n changeHiddenColumns,\n handleCheckAll\n}: ColumnChooserPaneledPageProps) => {\n const { companyLicense } = useUserAndCompanyLicense();\n return (\n \n {sections.length === 0 ? (\n \n ) : (\n \n \n {sections.map(section => {\n if (!section.fields) return null;\n const checkedStatuses: boolean[] = section.fields\n .filter(f => f in columnLookup)\n .map(f => {\n if (f in hiddenColumnLookup) return false;\n return true;\n });\n if (checkedStatuses.length === 0) return null;\n const areAllChecked = checkedStatuses.findIndex(s => !s) === -1;\n const atLeastOneChecked = checkedStatuses.findIndex(s => s) !== -1;\n const isCollapsed = collapsedSections.includes(section.id);\n const isHJSectionInLimitedCompany =\n companyLicense.isLimitedLicense && section.id == \"operations\";\n const isQuickPriceSectionInLimitedCompany =\n companyLicense.isLimitedLicense && section.id == \"quickPrice\";\n return (\n \n onToggleHandler(section.id, isSectionCollapsed)\n }\n sectionCheckBox={\n \n handleCheckAll(section.fields)}\n disabled={\n isHJSectionInLimitedCompany ||\n isQuickPriceSectionInLimitedCompany\n }\n style={{\n padding: 0\n }}\n />\n \n }\n >\n {isHJSectionInLimitedCompany && (\n
\n {strings.projects.heavyJob.limitedPreConDescription}\n
\n )}\n {isQuickPriceSectionInLimitedCompany && (\n
\n {\n strings.projects.quickPricing\n .limitedDescriptionColumnChooser\n }\n
\n )}\n {section.fields.map(fieldId => {\n const column = columnLookup[fieldId];\n return (\n column && (\n \n )\n );\n })}\n \n );\n })}\n \n )}\n
\n );\n};\n\ninterface ColumnCheckboxProps {\n column: TypedDataColumn;\n hiddenColumnLookup: Record;\n changeHiddenColumns: (column: TypedDataColumn, show: boolean) => void;\n showProductIcons: boolean;\n isDisabled?: boolean;\n}\n\nconst ColumnCheckbox = ({\n column,\n hiddenColumnLookup,\n changeHiddenColumns,\n showProductIcons,\n isDisabled = false\n}: ColumnCheckboxProps) => {\n const isVisible = !(column.name in hiddenColumnLookup);\n const leadingIcon = getLeadingIcon(column);\n const trailingIcon = getTrailingIcon(column);\n const disableField = !column.hidingEnabled || isDisabled;\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {showProductIcons && trailingIcon && (\n \n \n \n \n \n )}\n \n }\n control={\n \n {\n changeHiddenColumns(column, !isVisible);\n }}\n />\n \n }\n />\n \n \n \n \n \n \n \n );\n};\n\ninterface NumericOptionsProps {\n column: TypedDataColumn;\n disabled: boolean;\n}\n\nconst NumericOptionsToggle = ({ column, disabled }: NumericOptionsProps) => {\n const {\n summary: { setSummaryItems, summaryItems, showOptionToggle }\n } = useTableContext();\n\n if (!showOptionToggle(column)) return null;\n if (\n column.id === \"values.filters.latitude\" ||\n column.id === \"values.filters.longitude\"\n )\n return null;\n const selected =\n summaryItems.find(summ => column.name === summ.columnName)?.type ??\n SummaryType.Sum;\n return (\n {\n setSummaryItems(e, column);\n }}\n >\n \n {strings.modals.columnChooserModal.inputs.radio.summaryType.label.sum}\n \n \n {strings.modals.columnChooserModal.inputs.radio.summaryType.label.avg}\n \n \n );\n};\n\nconst getLeadingIcon = (column: TypedDataColumn) => {\n const icon = { name: \"\", color: \"black\" };\n if (\n column.type === DataColumnType.Custom ||\n (column.config && column.config.preConType)\n ) {\n icon.name = schemaFieldTypeOptions[column.config?.preConType]?.icon ?? null;\n } else {\n icon.name = schemaFieldTypeOptions[column.type]?.icon ?? null;\n }\n return icon;\n};\n\nconst getTrailingIcon = (column: TypedDataColumn) => {\n const icon = { name: \"\", color: \"\" };\n if (column.id === \"hJJob.Code\" || column.id === \"hJJob.Description\") {\n icon.color = \"rgb(0, 94, 184)\";\n icon.name = \"product-heavyjob\";\n } else if (\n column.id === \"values.code\" ||\n column.id?.includes(\"values.totals\") ||\n column.id?.includes(\"values.customTotals\")\n ) {\n icon.name = \"product-heavybid\";\n icon.color = \"rgb(0, 150, 57)\";\n } else {\n return null;\n }\n return icon;\n};\n\nexport const ModalBodyContainer = styled(Modal.Body)`\n max-height: 70vh;\n overflow: auto;\n`;\n\nexport const ScrollableModalContent = styled.div`\n height: calc(100% - 57px);\n`;\n\nexport const StyledModal = styled(Modal)`\n & .modal-content {\n border: none;\n background-color: #f0f0f0;\n }\n`;\n\nconst StyledButton = styled(ToggleButton)`\n padding: 2px 5px !important;\n`;\n\nconst SectionColumnContainer = styled.div`\n break-inside: avoid;\n`;\n\nconst ColumnList = styled.div`\n display: flex;\n flex-direction: column;\n padding: 0 16px;\n`;\n\nconst ColumnListContainer = styled.div`\n background-color: #ffffff;\n padding: 8px 0;\n border-radius: 4px;\n box-shadow: -4px 4px 10px -2px #d6d6d6;\n`;\n\nconst ColumnTitleContainer = styled.div`\n &.required:after {\n content: \" *\";\n }\n`;\n\nconst ColumnTitle = ({ column }: { column: TypedDataColumn }) => (\n \n {column.title}\n \n);\n","import React from \"react\";\nimport {\n GroupingPanel as DGroupingPanel,\n GroupingPanelProps\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport styled from \"styled-components\";\nimport { Dropdown, MenuItem } from \"hcss-components\";\nimport moment from \"moment\";\nimport { capitalize } from \"lodash\";\nimport {\n DataColumnType,\n useTableContext,\n VirtualDateColumn\n} from \"hcss-tables\";\n\nexport const LegacyGroupingPanel = (props: GroupingPanelProps) => {\n return ;\n};\n\nexport const GroupingPanelItem = ({\n showSortingControls,\n showGroupingControls,\n sortingDirection,\n onSort,\n onGroup,\n item,\n ...other\n}) => {\n const column = item.column as VirtualDateColumn;\n return (\n \n {\n if (showSortingControls) {\n onSort({\n direction: sortingDirection !== \"asc\" ? \"asc\" : \"desc\"\n });\n }\n }}\n >\n {item.column.title}\n {showSortingControls && sortingDirection && (\n \n  \n \n \n )}\n
\n {(column.type === DataColumnType.DateTime ||\n column.type === DataColumnType.Date) && (\n \n \n \n \n \n \n \n \n )}\n {showGroupingControls && (\n onGroup()}\n >\n \n \n )}\n \n );\n};\n\nconst DateOptions = ({\n activeItem,\n column,\n keys = [\"year\", \"quarter\", \"month\", \"week\", \"day\"]\n}: {\n activeItem?: moment.unitOfTime.StartOf;\n column: VirtualDateColumn;\n keys?: moment.unitOfTime.StartOf[];\n}) => {\n const {\n grouping: { setGrouping },\n extendedGroups\n } = useTableContext();\n\n const updateDateType = (interval: moment.unitOfTime.StartOf) => {\n const existingGroupIndex = extendedGroups.findIndex(\n group => group.columnName === column.name\n );\n const newGroup = {\n ...extendedGroups[existingGroupIndex],\n config: { dateGrouping: interval }\n };\n const newGroups = [...extendedGroups];\n newGroups.splice(existingGroupIndex, 1, newGroup);\n setGrouping(newGroups);\n };\n\n return (\n <>\n {keys.map(key => (\n updateDateType(key)}\n >\n {capitalize(key as string)}\n
\n ))}\n \n );\n};\n\nconst ButtonGroup = styled.div`\n margin-right: 5px;\n margin-bottom: 5px;\n`;\n\nconst ButtonIcon = styled.i`\n top: 0px;\n font-size: 9px;\n`;\n","import React from \"react\";\nimport { DataColumnType, normalizeDate, TypedDataColumn } from \"hcss-tables\";\nimport { Filter, IntegratedFiltering } from \"@devexpress/dx-react-grid\";\n\ndeclare type ColumnPredicatesByType = Record<\n DataColumnType,\n (\n value: string | number | Date,\n filter: Filter,\n column: TypedDataColumn\n ) => boolean\n>;\n\nconst columnPredicatesByType: Partial = {\n [DataColumnType.Date]: (value, filter, column) => {\n if (!value || !filter.value) {\n return false;\n }\n\n const dateValue = normalizeDate(\n value.toString(),\n column.config && column.config.utc,\n column.config && column.config.ignoreTimezone\n );\n const searchValue = filter.value.toLowerCase().trim();\n\n return (\n dateValue.isValid() &&\n dateValue.format(\"L\").toLowerCase().includes(searchValue)\n );\n },\n [DataColumnType.DateTime]: (value, filter, column) => {\n if (!value || !filter.value) {\n return false;\n }\n\n const dateValue = normalizeDate(\n value.toString(),\n column.config && column.config.utc,\n column.config && column.config.ignoreTimezone\n );\n const searchValue = filter.value.toLowerCase().trim();\n\n return (\n dateValue.isValid() &&\n dateValue.format(\"L LT\").toLowerCase().includes(searchValue)\n );\n },\n // the following logic for (Links, CheckList, Custom) was copied from the filtering-search.tsx in the hcss-tables\n [DataColumnType.Links]: (value, filter) => {\n if (!filter.value) return false;\n return (\n linkToString(value).toUpperCase().indexOf(filter.value.toUpperCase()) > -1\n );\n },\n [DataColumnType.CheckList]: (value, filter) => {\n if (!filter.value) return false;\n return (\n checkListToString(value)\n .toUpperCase()\n .indexOf(filter.value.toUpperCase()) > -1\n );\n },\n\n [DataColumnType.Custom]: (value, filter, column) => {\n if (!column.config || !column.config.valueAsString || !filter.value)\n return false;\n return (\n column.config\n .valueAsString(value)\n .toUpperCase()\n .indexOf(filter.value.toUpperCase()) > -1\n );\n }\n} as const;\n\nexport const getColumnsExtensions = (\n type: DataColumnType,\n columns: TypedDataColumn[]\n): IntegratedFiltering.ColumnExtension[] => {\n const predicateByType = columnPredicatesByType[type];\n\n if (!predicateByType) {\n return [];\n }\n\n return columns\n .filter(c => c.type === type)\n .map(c => {\n return {\n columnName: c.name,\n predicate: (value, filter) => predicateByType(value, filter, c)\n };\n });\n};\n\nconst extensionsDataTypes = Object.keys(columnPredicatesByType)\n .map(key => +key as DataColumnType)\n .filter(key => !!key);\n\nexport interface ExtendedIntegratedFilteringProps {\n columns: TypedDataColumn[];\n}\n\nexport const ExtendedIntegratedFiltering = React.memo(\n ({ columns }: ExtendedIntegratedFilteringProps) => {\n const filterExtensions = extensionsDataTypes.reduce<\n IntegratedFiltering.ColumnExtension[]\n >(\n (extensions, type) => [\n ...extensions,\n ...getColumnsExtensions(type, columns)\n ],\n []\n );\n return ;\n }\n);\n\nconst linkToString = (value: any) => {\n let retString = \"\";\n if (value) {\n value.forEach((link: any, index: number) => {\n retString += index > 0 ? \", \" : \"\";\n retString += link.description || link.url;\n });\n }\n return retString;\n};\n\nconst checkListToString = (value: any) => {\n let retString = \"\";\n if (value) {\n value.forEach((list: any, index: number) => {\n retString += index > 0 ? \", \" : \"\";\n retString += list.checked ? \"Checked \" : \"Not Checked \";\n retString += list.description;\n });\n }\n return retString;\n};\n","import { select, call, put, takeLatest } from \"redux-saga/effects\";\nimport { getType } from \"typesafe-actions\";\nimport { actions, STATE_KEY, StateSlice } from \"./state\";\nimport { apiSagaFactory } from \"api/api-saga-factory\";\n\nconst genericSagas = apiSagaFactory({\n apiPath: \"/configuration\",\n stateKey: STATE_KEY\n});\n\nfunction* loadConfigurationSettings() {\n const loaded = yield select(\n ({ configurationSettings }: StateSlice) => configurationSettings.loaded\n );\n if (!loaded) {\n try {\n const api = yield call(genericSagas.getApi);\n const { data } = yield call([api, api.get]);\n yield put(actions.loadConfigurationSettings.success(data));\n } catch (error) {\n console.error(error);\n yield put(actions.loadConfigurationSettings.failure(error));\n }\n }\n}\n\nexport const sagas = [\n takeLatest(\n getType(actions.loadConfigurationSettings.request),\n loadConfigurationSettings\n )\n];\n","import { SchemaFieldFilter } from \"modules/schemas/components/filters/SchemaFieldFilter\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport { createTheme, Popover, ThemeProvider } from \"@mui/material\";\nimport { SchemaField, SchemaViewFilter } from \"api\";\nimport { isFilterActive as isFilterActiveCheck } from \"../../modules/schemas/filters\";\nimport { ConcreteColors, Icon } from \"hcss-components\";\n\nexport interface FilterControlProps {\n filterId: string;\n displayFilters: string[];\n setDisplayedFilters: React.Dispatch>;\n field: SchemaField;\n filter: SchemaViewFilter;\n onChange: (filter: SchemaViewFilter) => void;\n onReset: (filter: SchemaViewFilter) => void;\n}\nexport interface FilterPillButtonProps {\n isActive: boolean;\n onDelete: (e: any) => void;\n onReset: (e: any) => void;\n}\n\nconst FilterPillButton = ({\n isActive,\n onDelete,\n onReset\n}: FilterPillButtonProps) => {\n return (\n {\n e.stopPropagation();\n isActive ? onReset(e) : onDelete(e);\n }}\n >\n {isActive ? : }\n \n );\n};\n\nexport const FilterPillNoView = (props: FilterControlProps) => {\n const [showFilterConfig, setShowFilterConfig] = React.useState(false);\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n const id = open ? \"simple-popover\" : undefined;\n\n const isFilterActive = React.useMemo(\n () =>\n isFilterActiveCheck({\n ...props.filter,\n fieldType: props.field.type\n }),\n [props.filter, props.field.type]\n );\n\n const onPillContainerClickHandler = (\n e: React.MouseEvent\n ) => {\n e.stopPropagation();\n setAnchorEl(e.currentTarget);\n setShowFilterConfig((showFilterConfig: any) => !showFilterConfig);\n };\n const handleClose = (e: React.MouseEvent) => {\n e.stopPropagation();\n setAnchorEl(null);\n setShowFilterConfig(false);\n };\n\n const resetFilterHandler = (\n e: React.MouseEvent\n ) => {\n e.stopPropagation();\n props.onReset(props.filter);\n };\n const deleteFilterHandler = (\n e: React.MouseEvent\n ) => {\n e.stopPropagation();\n props.setDisplayedFilters(\n props.displayFilters.filter(filter => filter !== props.filterId)\n );\n };\n return (\n
\n onPillContainerClickHandler(e)}\n >\n {props.field.name}\n \n \n \n ) =>\n handleClose(e)\n }\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"center\"\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"center\"\n }}\n >\n \n \n \n
\n );\n};\n\nconst FilterPillContainer = styled.div<{\n canUseFilter: boolean;\n isActive: boolean;\n}>`\n padding: 0.5rem 1.3rem;\n display: inline-flex;\n justify-content: space-between;\n align-items: center;\n border: solid 2px ${props => (props.isActive ? \"#0370f5\" : \"darkgrey\")};\n border-radius: 25px;\n align-item: center;\n color: black;\n cursor: pointer;\n background-color: ${props =>\n !props.canUseFilter\n ? \"#DB1010\"\n : props.isActive\n ? ConcreteColors.blue150\n : \"#f6f6f6\"};\n :hover {\n background-color: ${ConcreteColors.blue150};\n }\n`;\n\nconst FilterPillName = styled.div`\n max-width: 20rem;\n height: 2rem;\n font-size: 15px;\n text-overflow: ellipsis;\n display: inline-block;\n overflow: hidden;\n white-space: nowrap;\n margin-left: 0.5rem;\n margin-right: 1rem;\n`;\n\nconst StyledFilterPillButton = styled.button<{\n isActive: boolean;\n}>`\n border: none;\n padding: 0;\n height: 2rem;\n background: none;\n color: grey;\n transition: 0.6s ease-out;\n [name=\"trash-o\"]:hover {\n color: red;\n }\n [name=\"rotate-left\"]:hover {\n transition: 0.6s ease-out;\n color: ${ConcreteColors.blue200};\n transform: rotateZ(-360deg);\n }\n`;\nconst customStyles = createTheme({\n components: {\n MuiPopover: {\n styleOverrides: {\n paper: {\n overflow: \"initial\",\n borderRadius: \"12px\"\n }\n }\n }\n }\n});\n","import React, { useContext } from \"react\";\nimport { DropdownButton, Icon, MenuItem } from \"hcss-components\";\nimport { SchemaFieldFilter } from \"modules/schemas/components/filters/SchemaFieldFilter\";\nimport { FilterSelect } from \"modules/views/components/filters/filter-select\";\nimport { defaultFilterOperation } from \"modules/schemas/components/filters/common\";\nimport { SchemaViewFilter } from \"api\";\nimport { strings } from \"localization\";\nimport { useSelectedFilters } from \"modules/views/components/filters/use-selected-filters\";\nimport { FilterPillNoView } from \"./filter-pill-noview\";\nimport {\n ExpandFilters,\n FiltersWrapper,\n FilterControl,\n FiltersContainer,\n FilterClearOption,\n FilterAddEditOption,\n dropdownButtonStylings\n} from \"./filters-styles\";\n\ninterface FiltersProps {\n schemaId: string;\n selectedFields: string[];\n permanentFilters?: Record;\n pageId: string;\n}\n\nexport const FiltersNoView = ({\n schemaId,\n selectedFields,\n permanentFilters,\n pageId\n}: FiltersProps) => {\n const [isExpanded, setIsExpanded] = React.useState(false);\n const filters = useContext(FiltersNoViewContext);\n const setFilters = useContext(SetFiltersNoViewContext);\n const {\n activeFilters,\n displayedFilters,\n fields,\n showFilterSelect,\n fieldsBySection,\n setDisplayedFilters,\n setShowFilterSelect\n } = useSelectedFilters(selectedFields, schemaId, filters, pageId);\n\n let filteredDisplayedFilters = displayedFilters;\n let filteredActiveFilters = activeFilters;\n if (permanentFilters) {\n filteredDisplayedFilters = displayedFilters.filter(\n filter => !permanentFilters[filter]\n );\n filteredActiveFilters = activeFilters.filter(\n filter => !permanentFilters[filter]\n );\n }\n const isFilterActive = filteredActiveFilters.length > 0;\n const isDisplayedFilters = filteredDisplayedFilters.length > 0;\n const currentFilterSelect: Record = {};\n displayedFilters.forEach(filter => {\n currentFilterSelect[filter] = true;\n });\n\n const onExpandFiltersClick = (\n e: React.MouseEvent\n ) => {\n e.stopPropagation();\n setIsExpanded(isExpanded => !isExpanded);\n };\n\n const handleFilterReset = (filter: SchemaViewFilter) => {\n const newFilterLookup = { ...filters };\n delete newFilterLookup[filter.columnName];\n setFilters(newFilterLookup);\n };\n\n return (\n \n
\n \n \n {strings.core.filters.title}\n \n }\n >\n {\n setShowFilterSelect(true);\n }}\n >\n \n {isDisplayedFilters ? (\n \n \n {strings.core.filters.adjustFiltersText}\n \n ) : (\n \n \n {strings.core.filters.addFiltersText}\n \n )}\n \n \n {!isFilterActive && isDisplayedFilters && (\n {\n setDisplayedFilters([]);\n }}\n >\n \n \n \n {strings\n .formatString(\n strings.core.filters.removeDisplayedFilters,\n filteredDisplayedFilters.length\n )\n .toString()}\n \n \n \n )}\n {isFilterActive && (\n {\n setFilters(permanentFilters ? permanentFilters : {});\n }}\n >\n \n \n \n {strings\n .formatString(\n strings.core.filters.clearActiveFilters,\n filteredActiveFilters.length\n )\n .toString()}\n \n \n \n )}\n \n
\n \n {filteredDisplayedFilters\n .sort((a, b) => {\n // sort filters by active status\n const filterA = filters[a];\n const filterB = filters[b];\n if (filterA && filterB) return 0;\n if (filterA && filterB === undefined) return -1;\n if (filterA === undefined && filterB) return 1;\n return 0;\n })\n .map(filterId => {\n const field = fields[filterId];\n const filter = filters[filterId];\n if (!field) {\n return null;\n }\n return isExpanded ? (\n \n setFilters({\n ...filters,\n [newFilter.columnName]: newFilter\n })\n }\n />\n ) : (\n \n setFilters({\n ...filters,\n [newFilter.columnName]: newFilter\n })\n }\n onReset={handleFilterReset}\n />\n );\n })}\n {isDisplayedFilters && (\n \n \n \n )}\n \n\n setShowFilterSelect(false)}\n selection={currentFilterSelect}\n activeFilters={activeFilters}\n onChange={newFilters => {\n setDisplayedFilters(\n Object.keys(newFilters).filter(key => newFilters[key])\n );\n }}\n fieldsBySection={fieldsBySection}\n />\n
\n );\n};\n\nexport const FiltersNoViewContext = React.createContext<\n Record\n>({});\nexport const SetFiltersNoViewContext = React.createContext(\n (value: Record) => null\n);\n\nexport const FiltersNoViewProvider = (\n //@ts-ignores\n { filters, setFilters, children }\n) => {\n return (\n \n \n {children}\n \n \n );\n};\n","import { useMemo, useState } from \"react\";\nimport { difference } from \"lodash-es\";\nimport {\n isFilterActive,\n TypedSchemaViewFilter\n} from \"../../../schemas/filters\";\nimport { SelectorState } from \"modules/schemas\";\nimport { useSelector } from \"react-redux\";\nimport { SchemaFieldType, SchemaViewFilter } from \"api\";\nimport { useLocalStorage } from \"hcss-hooks\";\n\nexport function useSelectedFilters(\n selectedFields: string[],\n schemaId: string,\n filterLookup: Record,\n pageId: string\n) {\n const [showFilters, setShowFilters] = useState(false);\n const [showFilterSelect, setShowFilterSelect] = useState(false);\n\n const { fields = {}, orderedSections = [], sections = {} } =\n useSelector((state: SelectorState) => {\n const rawSchema = state.schemas.workingCopy[schemaId];\n const selectedSchemaFields = Object.fromEntries(\n Object.entries(rawSchema.fields).filter(([key]) =>\n selectedFields.includes(key)\n )\n );\n const selectedSections = Object.fromEntries(\n Object.entries(rawSchema.sections).filter(([_, value]) =>\n value.fields.some(f => Object.keys(selectedSchemaFields).includes(f))\n )\n );\n const selectedOrderedSections = rawSchema.orderedSections.filter(s =>\n Object.keys(selectedSections).includes(s)\n );\n return {\n ...rawSchema,\n fields: selectedSchemaFields,\n sections: selectedSections,\n orderedSections: selectedOrderedSections\n };\n }) ?? {};\n\n const typedFilters = useMemo(() => {\n return Object.values(filterLookup)\n .filter(filter => fields[filter.columnName])\n .map(filter => {\n const typedFilter: TypedSchemaViewFilter = {\n ...filter,\n fieldType: fields[filter.columnName].type\n };\n return typedFilter;\n });\n }, [fields, filterLookup]);\n\n const activeFilters = useMemo(\n () => typedFilters.filter(isFilterActive).map(filter => filter.columnName),\n [typedFilters]\n );\n\n const [displayedFilters, setDisplayedFilters] = useLocalStorage(\n `${pageId}-displayed-filters`,\n []\n );\n\n const missingFilters = difference(activeFilters, displayedFilters);\n const allFilters = displayedFilters.concat(missingFilters);\n const validFilters = allFilters.filter(filterId => filterId in fields);\n if (\n allFilters.length !== displayedFilters.length ||\n validFilters.length !== allFilters.length\n ) {\n setDisplayedFilters(validFilters);\n }\n\n if (showFilters && displayedFilters.length === 0) {\n setShowFilterSelect(true);\n }\n\n const currentFilterSelect: Record<\n string,\n { isDisplayed: boolean; isActive: boolean }\n > = {};\n displayedFilters.forEach(filter => {\n currentFilterSelect[filter] = {\n isDisplayed: true,\n isActive: activeFilters.find(f => f === filter) ? true : false\n };\n });\n\n const fieldsBySection = useMemo(() => {\n return orderedSections.map(sectionId => {\n return {\n name: sections[sectionId].name,\n id: sections[sectionId].id,\n fields: sections[sectionId].fields\n .filter(\n fieldId =>\n Object.keys(fields).includes(fieldId) &&\n fields[fieldId].type !== SchemaFieldType.Location\n )\n .map(fieldId => fields[fieldId])\n .sort(\n (a, b) =>\n selectedFields.indexOf(a.id) - selectedFields.indexOf(b.id)\n )\n };\n });\n }, [fields, orderedSections, sections]);\n\n return {\n fieldsBySection,\n showFilters,\n setShowFilters,\n showFilterSelect,\n setShowFilterSelect,\n activeFilters,\n fields,\n displayedFilters,\n setDisplayedFilters\n };\n}\n","export enum SANDBOX_CONSTANTS {\n COMPANY_ID = \"be819ffa-5f9e-4608-a40c-5dfab19188cb\",\n USER_ID = \"c34cfb5f-d453-4273-a7e5-4dbf49818004\",\n USER_FIRST_NAME = \"John\",\n USER_LAST_NAME = \"Doe\",\n COMPANY_NAME = \"Sandbox Company\",\n BUSINESS_UNIT_ID = \"37682b0b-f27f-42b9-83e4-1b086a72716f\",\n BUSINESS_UNIT_NAME = \"MANAGER\",\n USER_NAME = \"JohnDoe@SandboxCo\",\n USER_EMAIL = \"johnDoe@sandbox.com\"\n}\n","import styled from \"styled-components\";\n\ninterface FilterWrapperStyleProps {\n isFilterActive: boolean;\n}\n\nexport const ExpandFilters = styled.div`\n display: flex;\n text-align: center;\n align-items: center;\n > button {\n margin: 0;\n font-size: 15px;\n color: #005bca;\n border: none;\n background: none;\n padding: 0;\n }\n & button:hover {\n text-decoration: underline;\n }\n`;\n\nexport const FiltersWrapper = styled.div`\n height: initial;\n vertical-align: middle;\n padding: 10px 16px;\n background-color: #d6d6d6;\n display: flex;\n column-gap: 1rem;\n font-size: 13px;\n box-shadow: none;\n & button.styled-filter-dropdown-button {\n :hover {\n box-shadow: none;\n }\n :active {\n box-shadow: none;\n }\n }\n`;\n\nexport const FilterControl = styled.div`\n display: flex;\n align-items: center;\n font-size: 15px;\n font-weight: bold;\n margin-right: 1rem;\n > span {\n :hover {\n text-decoration: underline;\n }\n }\n :hover {\n box-shadow: none;\n }\n & > svg {\n padding-bottom: 2px;\n }\n`;\n\nexport const FiltersContainer = styled.div`\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n column-gap: 1rem;\n > div {\n margin-bottom: 8px;\n }\n`;\n\nexport const FilterClearOption = styled.div`\n min-width: 19rem;\n font-size: 13px;\n margin-top: 3px;\n color: #005bca;\n`;\n\nexport const FilterAddEditOption = styled.div`\n min-width: 19rem;\n font-size: 13px;\n margin-top: 3px;\n color: #005bca;\n`;\n\nexport const dropdownButtonStylings = {\n background: \"none\",\n color: \"black\",\n padding: \"0px\",\n border: \"none\",\n borderRadius: \"8px\",\n display: \"flex\",\n alignItems: \"center\",\n marginRight: \"2rem\",\n marginLeft: \"1.5rem\",\n marginTop: \"0.6rem\",\n boxShadow: \"none\"\n};\n","import { DataColumnType, TypedDataColumn } from \"hcss-tables\";\nimport {\n ContactDto,\n IVendorDtoV1Response\n} from \"api/GeneratedClients/ContactsClient\";\nimport { formatPhoneNumber } from \"core\";\nimport { SchemaFieldType } from \"api\";\nimport { sortBy } from \"lodash-es\";\nimport { strings } from \"localization\";\n\nexport const getContactListColumns = (\n vendor: IVendorDtoV1Response | undefined\n) => {\n const FirstNameColumn: TypedDataColumn = {\n name: \"firstName\",\n title: strings.contact.contactColumnNames.firstName,\n type: DataColumnType.ShortText,\n hidingEnabled: false\n };\n\n const LastNameColumn: TypedDataColumn = {\n name: \"lastName\",\n title: strings.contact.contactColumnNames.lastName,\n type: DataColumnType.ShortText,\n hidingEnabled: false,\n getCellValue: (row: ContactDto) => row.lastName ?? \"\"\n };\n\n const TitleColumn: TypedDataColumn = {\n name: \"title\",\n title: strings.contact.contactColumnNames.title,\n type: DataColumnType.ShortText,\n getCellValue: (row: ContactDto) => row.title ?? \"\"\n };\n\n const CellPhoneNumberColumn: TypedDataColumn = {\n name: \"cellPhoneNumber\",\n title: strings.contact.contactColumnNames.cellNumber,\n type: DataColumnType.PhoneNumber,\n groupingEnabled: false,\n getCellValue: (row: ContactDto) =>\n formatPhoneNumber(row.cellPhoneNumber ?? \"\")\n };\n\n const PhoneNumberColumn: TypedDataColumn = {\n name: \"phoneNumber\",\n title: strings.contact.contactColumnNames.phoneNumber,\n groupingEnabled: false,\n type: DataColumnType.PhoneNumber,\n getCellValue: (row: ContactDto) => formatPhoneNumber(row.phoneNumber ?? \"\")\n };\n\n const EmailColumn: TypedDataColumn = {\n name: \"emailAddress\",\n title: strings.contact.contactColumnNames.emailAddress,\n groupingEnabled: false,\n type: DataColumnType.ShortText,\n getCellValue: (row: ContactDto) => row.emailAddress ?? \"\"\n };\n\n const MainContactColumn: TypedDataColumn = {\n name: \"isMainContact\",\n title: strings.contact.contactColumnNames.mainContact,\n groupingEnabled: false,\n type: DataColumnType.Boolean,\n getCellValue: (row: ContactDto) => row.isMainContact ?? false\n };\n\n const LocationColumn: TypedDataColumn = {\n name: \"location\",\n title: strings.contact.contactColumnNames.office,\n type: DataColumnType.ShortText,\n config: {\n preConType: SchemaFieldType.List\n },\n getCellValue: (row: ContactDto) => {\n return vendor?.locations?.find(l => l.id === row.vendorLocationId)\n ?.nickname;\n }\n };\n\n const NoteColumn: TypedDataColumn = {\n name: \"note\",\n title: strings.contact.contactColumnNames.notes,\n groupingEnabled: false,\n type: DataColumnType.LongText,\n getCellValue: (row: ContactDto) => row.note ?? \"\"\n };\n\n const Scope: TypedDataColumn = {\n name: \"scope\",\n title: strings.contact.contactColumnNames.scopes,\n groupingEnabled: true,\n type: DataColumnType.LongText,\n config: {\n preConType: SchemaFieldType.MultiSelectList\n },\n getCellValue: (row: ContactDto) => {\n const sortedProducts = sortBy(row.products, p => p.code);\n return sortedProducts.map(p => p.code).join(\", \");\n }\n };\n\n return [\n FirstNameColumn,\n LastNameColumn,\n TitleColumn,\n EmailColumn,\n CellPhoneNumberColumn,\n PhoneNumberColumn,\n MainContactColumn,\n LocationColumn,\n Scope,\n NoteColumn\n ];\n};\n\nexport const defaultColumnOrdering = [\n \"firstName\",\n \"lastName\",\n \"title\",\n \"cellPhoneNumber\",\n \"phoneNumber\",\n \"emailAddress\",\n \"isMainContact\",\n \"location\",\n \"scopes\",\n \"note\"\n];\n","import { DataTypeProvider } from \"@devexpress/dx-react-grid\";\nimport { isNullOrWhitespace, TextOverflow, ContactListColumnName } from \"core\";\nimport { useTableContext } from \"hcss-tables\";\nimport React, { useState, useRef } from \"react\";\nimport { Overlay, Popover } from \"react-bootstrap\";\nimport { useSelector } from \"react-redux\";\nimport { selectors as contactsSelectors } from \"../state\";\nimport { PhoneNumber, VendorLocationAddress } from \"./vendor-details\";\n\nconst ContactLocationFormatter = (\n props: DataTypeProvider.ValueFormatterProps\n) => {\n const { column, row, value } = props;\n const vendors = useSelector(contactsSelectors.getVendorList);\n const currentVendorLocations = vendors.find(v => v.id === row.companyId)\n ?.locations;\n const contactLocation = currentVendorLocations?.find(\n vl => vl.id === row.vendorLocationId\n );\n const [show, setShow] = useState(false);\n const optionRef = useRef(null);\n const popover = (\n \n {contactLocation?.nickname} {column.title}\n \n }\n >\n {contactLocation?.address && (\n \n \n \n )}\n {contactLocation?.phoneNumber && (\n \n \n \n )}\n \n );\n\n return (\n
\n {\n setShow(true);\n }}\n onMouseLeave={() => {\n setShow(false);\n }}\n onClick={e => {\n setShow(false);\n }}\n >\n {value}\n {(!isNullAddress(contactLocation?.address) ||\n !isNullOrWhitespace(contactLocation?.phoneNumber)) && (\n \n {popover}\n \n )}\n \n
\n );\n};\nexport const ContactLocationProvider = () => {\n const { columns } = useTableContext();\n return React.useMemo(\n () => (\n column.name === ContactListColumnName.Location)\n .map(column => column.name)}\n />\n ),\n [columns]\n );\n};\n\nconst ContactEmailFormatter = (props: DataTypeProvider.ValueFormatterProps) => {\n const { value } = props;\n return {value};\n};\n\nexport const ContactEmailProvider = () => {\n const { columns } = useTableContext();\n return (\n column.name === ContactListColumnName.EmailAddress)\n .map(column => column.name)}\n />\n );\n};\n\nconst ContactPhoneFormatter = (props: DataTypeProvider.ValueFormatterProps) => {\n const { value } = props;\n return {value};\n};\n\nexport const ContactPhoneProvider = () => {\n const { columns } = useTableContext();\n return (\n \n column.name === ContactListColumnName.PhoneNumber ||\n column.name === ContactListColumnName.CellPhoneNumber\n )\n .map(column => column.name)}\n />\n );\n};\n\nconst isNullAddress = (address: any) => {\n if (\n !address?.addressLine1 &&\n !address?.addressLine2 &&\n !address?.city &&\n !address?.stateProvince &&\n !address?.postalCode &&\n !address?.countryRegion\n ) {\n return true;\n }\n};\n","import React from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { Modal, Button } from \"hcss-components\";\nimport { actions as contactsActions } from \"modules/contacts\";\nimport MuiGrid from \"@mui/material/Grid\";\nimport { TimesButton } from \"./contact-list-modal\";\nimport { IContactDto } from \"api/GeneratedClients/ContactsClient\";\nimport { Typography } from \"@mui/material\";\nimport { strings } from \"localization\";\n\ninterface SyncContactModalProps {\n contactToSync: IContactDto;\n showModal: boolean;\n setShowModal: React.Dispatch>;\n}\nexport const SyncContactModal = ({\n contactToSync,\n showModal,\n setShowModal\n}: SyncContactModalProps) => {\n const dispatch = useDispatch();\n const handleCloseModal = () => {\n setShowModal(false);\n };\n const handleSync = () => {\n dispatch(contactsActions.syncContactToProjects.request(contactToSync));\n setShowModal(false);\n };\n return (\n \n \n \n \n

\n {\n strings.formatString(\n strings.contactManagement.contactListSyncContactModal.title,\n contactToSync?.firstName ?? \"\",\n contactToSync?.lastName ?? \"\"\n ) as string\n }\n

\n
\n \n \n ×\n \n \n
\n
\n \n \n {strings.contactManagement.contactListSyncContactModal.message}\n \n \n \n \n \n \n
\n );\n};\n","import React, { useState } from \"react\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\nimport ConfirmDelete from \"core/components/modals/ConfirmDelete\";\nimport { strings } from \"localization\";\nimport {\n ContactDto,\n IContactDto,\n IVendorDtoV1Response\n} from \"api/GeneratedClients/ContactsClient\";\nimport { cloneDeep } from \"lodash-es\";\nimport {\n defaultColumnOrdering,\n getContactListColumns\n} from \"./contact-list-columns\";\nimport { EditingState, TableRow } from \"@devexpress/dx-react-grid\";\n\nimport NavigationPrompt from \"react-router-navigation-prompt\";\nimport ConfirmBack from \"../../../core/components/modals/ConfirmBack\";\nimport { disableCallbackInSandbox } from \"core/util/sandbox\";\n\nimport {\n BooleanFormatProvider,\n ColumnResizing,\n getRowId,\n GroupingState,\n IntegratedFiltering,\n IntegratedGrouping,\n IntegratedSorting,\n LinkProvider,\n Root,\n SearchState,\n SortingState,\n TableContainer,\n TableGroupRow,\n TableHeaderRow,\n TableWrapper,\n ColumnVisibility,\n ColumnReordering,\n CommandComponent\n} from \"hcss-tables\";\n\nimport {\n Grid,\n Toolbar,\n SearchPanel,\n TableEditColumn,\n DragDropProvider\n} from \"@devexpress/dx-react-grid-bootstrap3\";\n\nimport {\n NoDataPlaceholder,\n ContentLoadingOverlay,\n formatFirstNameLastName\n} from \"core\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { actions as contactsActions, selectors } from \"modules/contacts\";\nimport { NoteProvider } from \"modules/tables/columns/column-providers\";\nimport { ContactListModal } from \"./contact-list-modal\";\nimport { useGetSelectedVendor } from \"../hooks/use-get-selected-vendor\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\nimport { ConcreteColors, DropdownButton, Icon } from \"hcss-components\";\nimport { MenuItem } from \"react-bootstrap\";\nimport styled from \"styled-components\";\nimport { MoveContactModal } from \"./move-contact-modal\";\nimport { CustomEditCellHeaderComponent } from \"modules/tables/cells/custom-cells-components\";\nimport {\n ContactLocationProvider,\n ContactEmailProvider,\n ContactPhoneProvider\n} from \"./contact-column-providers\";\nimport { CustomColumnChooserModal } from \"modules/tables/column-chooser-modal\";\nimport { SyncContactModal } from \"./sync-contact-modal\";\nimport LegacyVirtualTable from \"core/components/bundle-fixes/LegacyVirtualTable\";\nimport { LegacyGroupingPanel } from \"core/components/bundle-fixes/LegacyGroupingPanel\";\n\nexport const ContactList = () => {\n const dispatch = useDispatch();\n const permissions = usePermissions();\n const authorization = useAuthorization();\n const vendor = useGetSelectedVendor();\n const isLoading = useSelector(selectors.getLoading);\n\n const newContact: IContactDto = {\n id: \"\",\n companyId: vendor?.id,\n firstName: \"\",\n lastName: \"\",\n title: \"\",\n phoneNumber: \"\",\n faxNumber: \"\",\n cellPhoneNumber: \"\",\n emailAddress: \"\",\n note: \"\",\n isMainContact: false\n };\n\n const [editingRowIds, setEditingRowIds] = useState<(string | number)[]>([]);\n const [addedRows, setAddedRows] = useState([]);\n const [rowChanges, setRowChanges] = useState({});\n const [isDeleting, setIsDeleting] = useState(false);\n const [toDelete, setToDelete] = useState();\n const [editingContact, setEditingContact] = useState(newContact);\n const [movingContact, setMovingContact] = useState(newContact);\n const [contactToSync, setContactToSync] = useState(newContact);\n\n const [showSyncContactModal, setShowSyncContactModal] = useState(\n false\n );\n const addBlankRow = () => {\n if (vendor) {\n setEditingContact(newContact);\n }\n };\n\n const changeAddedRows = (value: ContactDto[]) => {\n setAddedRows([...value]);\n };\n\n const changeEditedRows = (value: Record>) => {\n setRowChanges(value);\n };\n\n const handleDelete = () => {\n if (toDelete && vendor) {\n dispatch(\n contactsActions.deleteContact.request({\n contact: toDelete,\n vendorId: vendor.id\n })\n );\n }\n\n setIsDeleting(false);\n };\n\n const handleOnExecute = (change: OnHandlerCommitProps) => {\n const { id: command } = change;\n if (!vendor) return;\n if (command === \"add\") {\n addBlankRow();\n dispatch(contactsActions.setShowModal(true));\n }\n };\n\n const hasUnsavedChanges = () => {\n if (rowChanges && Object.keys(rowChanges).length > 0) {\n return true;\n } else if (addedRows && Object.keys(addedRows).length > 0) {\n return true;\n }\n\n return false;\n };\n\n if (!vendor) {\n return ;\n }\n\n return (\n <>\n \n \n {showSyncContactModal && contactToSync && (\n \n )}\n \n \n {isLoading && (\n \n )}\n {vendor.contacts &&\n (vendor.contacts.length > 0 || addedRows.length > 0) ? (\n \n \n \n \n \n {}}\n />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n (\n {\n handleOnExecute(props);\n }}\n />\n )}\n cellComponent={props => (\n \n )}\n headerCellComponent={CustomEditCellHeaderComponent}\n />\n \n \n \n \n \n \n ) : (\n {\n addBlankRow();\n dispatch(contactsActions.setShowModal(true));\n }}\n mainIconName=\"user-alt\"\n isAddEditDisplay={\n permissions.contactWrite && authorization.canAccessLimitedPrecon\n }\n helpText={{\n title:\n strings.contactManagement.contactList.noContactsHelpText\n .title,\n body:\n strings.contactManagement.contactList.noContactsHelpText.body\n }}\n buttonText={\n strings.contactManagement.contactList.noContactsButtonText\n }\n />\n )}\n {isDeleting && toDelete && vendor.contacts && (\n setIsDeleting(false)}\n handleDelete={() => handleDelete()}\n >\n {strings.formatString(\n strings.contactManagement.contactList.deleteConfirmation,\n formatFirstNameLastName(toDelete.firstName, toDelete.lastName)\n )}\n \n )}\n \n \n hasUnsavedChanges()} allowGoBack>\n {({ onConfirm, onCancel }) => {\n return (\n onConfirm()}\n >\n {strings.core.modals.confirmBack.unsavedChanges}\n \n );\n }}\n \n \n );\n};\n\nconst CustomCommandCell = ({\n children,\n vendor,\n setIsDeleting,\n setToDelete,\n setEditingContact,\n setMovingContact,\n setShowSyncContactModal,\n setContactToSync,\n ...restProps\n}: CustomCellComponentProps) => {\n const dispatch = useDispatch();\n const permissions = usePermissions();\n const authorization = useAuthorization();\n const handleEdit = () => {\n if (restProps.tableRow) {\n const changedContactId = restProps.tableRow.rowId;\n const editingVendorContact = vendor?.contacts.find(\n (contact: IContactDto) => contact.id === changedContactId\n );\n if (!editingVendorContact) return;\n const originalContact = cloneDeep(editingVendorContact);\n dispatch(contactsActions.setShowModal(true));\n setEditingContact(originalContact);\n }\n };\n\n const handleDelete = () => {\n if (restProps.tableRow) {\n if (vendor?.contacts) {\n const rowIndex = vendor.contacts.findIndex(\n (c: any) => c.id === restProps.tableRow.row.id\n );\n setToDelete({ ...vendor.contacts[rowIndex] });\n setIsDeleting(true);\n }\n }\n };\n\n const handleMove = () => {\n if (!restProps.tableRow) return;\n const movingContactId = restProps.tableRow.rowId;\n const movingContact = vendor?.contacts.find(\n (contact: IContactDto) => contact.id === movingContactId\n );\n if (!movingContact) return;\n setMovingContact(movingContact);\n dispatch(contactsActions.setShowMoveContactModal(true));\n };\n\n const handleSync = () => {\n if (!restProps.tableRow) return;\n const contactToSyncId = restProps.tableRow.rowId;\n const contactToSync = vendor?.contacts.find(\n (contact: IContactDto) => contact.id === contactToSyncId\n );\n if (!contactToSync) return;\n setContactToSync(contactToSync);\n setShowSyncContactModal(true);\n };\n return (\n \n \n \n \n {strings.contactManagement.contactList.commandButton.edit}\n \n \n \n {strings.contactManagement.contactList.commandButton.move}\n \n\n \n \n {strings.contactManagement.contactList.commandButton.sync}\n \n \n \n {strings.contactManagement.contactList.commandButton.delete}\n \n \n \n );\n};\n\ninterface CustomCellComponentProps extends TableEditColumn.CellProps {\n vendor: IVendorDtoV1Response | undefined;\n setEditingContact: React.Dispatch>;\n setToDelete: React.Dispatch>;\n setIsDeleting: React.Dispatch>;\n setMovingContact: React.Dispatch>;\n setContactToSync: React.Dispatch>;\n setShowSyncContactModal: React.Dispatch>;\n}\n\nconst StyledIcon = styled(Icon)`\n margin-right: 1.2rem;\n`;\n\nconst StyledDropdownButton = styled(DropdownButton)`\n background: none !important;\n box-shadow: none !important;\n color: ${props =>\n props.disabled\n ? `grey !important`\n : `${ConcreteColors.blue200} !important`};\n border: 0;\n margin-top: 1px;\n :active,\n :focus,\n :hover {\n box-shadow: none !important;\n color: ${props =>\n props.disabled\n ? `grey !important`\n : `${ConcreteColors.blue200} !important`};\n background-color: white !important;\n }\n :disable {\n color: grey !important;\n background-color: white !important;\n }\n`;\nexport default ContactList;\n\ninterface OnHandlerCommitProps extends TableEditColumn.CommandProps {\n tableRow?: TableRow;\n}\n\ntype ContactRecord = Record>;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useHistory } from \"react-router-dom\";\nimport { FullPageLoading } from \"modules/layout/components/FullPageLoading\";\nimport { PaneledPage, Button, Icon, Link as HLink } from \"hcss-components\";\nimport {\n formatPhoneNumber,\n isNullOrWhitespace,\n PanelLoadingOverlay,\n Section,\n TextOverflow\n} from \"core\";\nimport { strings } from \"localization\";\nimport ContactList from \"./contact-list\";\nimport { ConcreteColors } from \"hcss-components\";\nimport {\n IVendorDtoV1Response,\n IAddress\n} from \"api/GeneratedClients/ContactsClient\";\nimport { useSelector } from \"react-redux\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\nimport { VendorLocationOption } from \"./vendor-edit-details\";\nimport { DropdownList } from \"react-widgets\";\nimport { useVendorLocationDropDown } from \"modules/contacts/hooks/use-vendor-location-drop-down\";\nimport { useGetSelectedVendor } from \"../hooks/use-get-selected-vendor\";\nimport { useAuthorization, usePermissions } from \"modules/account\";\nimport { sortBy } from \"lodash-es\";\n\nexport const VendorDetails = () => {\n const history = useHistory();\n const vendor = useGetSelectedVendor();\n const permissions = usePermissions();\n const authorization = useAuthorization();\n\n const isLoading = useSelector(contactsSelectors.getLoading);\n\n if (!vendor) {\n return ;\n }\n\n const handleEditVendor = () => {\n history.push(`/contacts/${vendor.id}/edit`);\n };\n\n return (\n \n \n \n {strings.contactManagement.vendorDetails.title}\n \n \n history.replace(\"/contacts\")}\n style={{ marginRight: \"2rem\" }}\n >\n {strings.projects.details.header.back}\n \n {permissions.contactWrite && authorization.canAccessLimitedPrecon && (\n \n )}\n \n \n \n {isLoading && (\n \n )}\n \n \n \n {vendor.code} - {vendor.name}\n {vendor.type?.code && (\n \n {` [${vendor.type?.code}]`}\n \n )}\n \n \n \n
\n
\n \n
\n
\n \n
\n
\n
\n
{strings.contactManagement.vendorDetails.isBonded}
\n
\n {vendor.isBonded ? (\n \n ) : (\n \n )}\n
\n
\n
\n
{strings.contactManagement.vendorDetails.bondRate}
\n
{vendor.bondRate}
\n
\n
\n {vendor.accountingCode && (\n
\n
\n {\n strings.contactManagement.vendorDetails\n .accountingCodeHeading\n }\n
\n
\n {vendor.accountingCode}\n
\n
\n )}\n
\n
\n
\n
{strings.contactManagement.vendorDetails.notesHeading}
\n {vendor.note}\n
\n
\n \n
\n \n
\n
\n
\n );\n};\n\nexport default VendorDetails;\n\nconst VendorContactInfo = ({ vendor }: { vendor: IVendorDtoV1Response }) => {\n const {\n localVendor,\n locationOptions,\n vendorLocation,\n setVendorLocation\n } = useVendorLocationDropDown(vendor);\n const handleVendorLocationChange = (data: VendorLocationOption) => {\n setVendorLocation(data.value);\n };\n return (\n
\n
\n
{strings.contactManagement.vendorDetails.officeHeading}:
\n
\n \n
\n
\n {vendorLocation && (\n \n )}\n {localVendor && }\n {vendorLocation && (\n \n )}\n {vendorLocation && }\n
\n );\n};\n\nconst MinorityStatuses = ({ vendor }: { vendor: IVendorDtoV1Response }) => {\n if (vendor.minorityStatuses.length === 0) return null;\n return (\n
\n
{strings.contactManagement.vendorDetails.minorityStatusesHeading}
\n {vendor.minorityStatuses.map(dto => (\n \n \n {dto.type?.code} {dto.percent}%\n \n \n ))}\n
\n );\n};\n\nconst FaxNumber = ({ faxNumber }: { faxNumber: string | undefined }) => {\n if (!faxNumber) return null;\n return (\n
\n \n {formatPhoneNumber(faxNumber)}\n
\n );\n};\n\nexport const WebAddress = ({\n webAddress\n}: {\n webAddress: string | undefined;\n}) => {\n if (!webAddress) return null;\n let url = webAddress;\n if (!webAddress.startsWith(\"http\") && !webAddress.startsWith(\"https\")) {\n url = `https://${webAddress}`;\n }\n return (\n \n \n \n \n {webAddress}\n \n \n \n );\n};\n\nexport const PhoneNumber = ({\n phoneNumber\n}: {\n phoneNumber: string | undefined;\n}) => {\n if (!phoneNumber) return null;\n return (\n
\n \n \n {formatPhoneNumber(phoneNumber)}\n \n
\n );\n};\n\nconst VendorProducts = ({ vendor }: { vendor: IVendorDtoV1Response }) => {\n if (vendor.products.length === 0) return null;\n const sortedProducts = sortBy(vendor.products, p => p.product?.code);\n return (\n
\n
\n {strings.contactManagement.vendorDetails.scopesHeading}\n
\n {sortedProducts.map(dto => (\n \n {dto.product?.code}\n \n ))}\n
\n );\n};\n\nexport const VendorLocationAddress = ({\n address\n}: {\n address: IAddress | undefined;\n}) => {\n const displayCityStateZip = (address: IAddress) => {\n if (\n !address?.city &&\n !address?.stateProvince &&\n !address?.postalCode &&\n !address?.countryRegion\n ) {\n return null;\n }\n\n return (\n
\n {address.city ?? \"\"}\n {address.city && (address.stateProvince || address.postalCode) && \", \"}\n {address.stateProvince ?? \"\"}\n {address.postalCode && ` ${address.postalCode}`}\n {address.countryRegion &&\n (address.city || address.stateProvince || address.postalCode) &&\n \", \"}\n {address.countryRegion && `${address.countryRegion}`}\n
\n );\n };\n\n if (\n !address?.addressLine1 &&\n !address?.addressLine2 &&\n !address?.city &&\n !address?.stateProvince &&\n !address?.postalCode &&\n !address?.countryRegion\n ) {\n return null;\n }\n\n return (\n \n
\n \n
\n \n
{address.addressLine1}
\n {address.addressLine2 &&
{address.addressLine2}
}\n {displayCityStateZip(address)}\n \n \n );\n};\n\nconst StyledIcon = styled(Icon)`\n margin-right: 1rem;\n font-size: 1.5rem;\n width: 1em;\n`;\n\nconst Pill = styled.span<{ fillPercentage?: number }>`\n display: inline-block;\n padding: 0 0.7rem;\n margin: 0 0.5rem 0.5rem 0;\n border-radius: 2rem;\n border-color: ${props => props.color || props.theme.colors.primary};\n background: linear-gradient(\n to right,\n ${ConcreteColors.blue150}\n ${props =>\n typeof props.fillPercentage === \"number\"\n ? props.fillPercentage + \"%\"\n : \"100%\"},\n ${ConcreteColors.gray200}\n ${props => (typeof props.fillPercentage === \"number\" ? \"0%\" : \"100%\")}\n );\n color: ${ConcreteColors.blue400};\n`;\n\nconst CompanyType = styled.span`\n font-style: italic;\n`;\n","import { TableEditColumn } from \"@devexpress/dx-react-grid\";\nimport React from \"react\";\nimport styled from \"styled-components\";\n\nexport const CustomEditCellComponent = (props: TableEditColumn.CellProps) => {\n return (\n
\n );\n};\n\nexport const CustomEditCellHeaderComponent = (\n props: TableEditColumn.HeaderCellProps\n) => {\n return (\n \n );\n};\n\nconst WrapperDiv = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-around;\n`;\n\nconst InnerDiv = styled.div`\n width: 100%;\n text-align: center;\n white-space: nowrap;\n overflow: visible;\n text-overflow: ellipsis;\n`;\n","export const statesEnum = {\n enum: [\n \"AL\",\n \"AK\",\n \"AS\",\n \"AZ\",\n \"AR\",\n \"CA\",\n \"CO\",\n \"CT\",\n \"DE\",\n \"DC\",\n \"FM\",\n \"FL\",\n \"GA\",\n \"GU\",\n \"HI\",\n \"ID\",\n \"IL\",\n \"IN\",\n \"IA\",\n \"KS\",\n \"KY\",\n \"LA\",\n \"ME\",\n \"MH\",\n \"MD\",\n \"MA\",\n \"MI\",\n \"MN\",\n \"MS\",\n \"MO\",\n \"MT\",\n \"NE\",\n \"NV\",\n \"NH\",\n \"NJ\",\n \"NM\",\n \"NY\",\n \"NC\",\n \"ND\",\n \"MP\",\n \"OH\",\n \"OK\",\n \"OR\",\n \"PW\",\n \"PA\",\n \"PR\",\n \"RI\",\n \"SC\",\n \"SD\",\n \"TN\",\n \"TX\",\n \"UT\",\n \"VT\",\n \"VI\",\n \"VA\",\n \"WA\",\n \"WV\",\n \"WI\",\n \"WY\"\n ],\n enumNames: [\n \"Alabama\",\n \"Alaska\",\n \"American Samoa\",\n \"Arizona\",\n \"Arkansas\",\n \"California\",\n \"Colorado\",\n \"Connecticut\",\n \"Delaware\",\n \"District Of Columbia\",\n \"Federated States Of Micronesia\",\n \"Florida\",\n \"Georgia\",\n \"Guam\",\n \"Hawaii\",\n \"Idaho\",\n \"Illinois\",\n \"Indiana\",\n \"Iowa\",\n \"Kansas\",\n \"Kentucky\",\n \"Louisiana\",\n \"Maine\",\n \"Marshall Islands\",\n \"Maryland\",\n \"Massachusetts\",\n \"Michigan\",\n \"Minnesota\",\n \"Mississippi\",\n \"Missouri\",\n \"Montana\",\n \"Nebraska\",\n \"Nevada\",\n \"New Hampshire\",\n \"New Jersey\",\n \"New Mexico\",\n \"New York\",\n \"North Carolina\",\n \"North Dakota\",\n \"Northern Mariana Islands\",\n \"Ohio\",\n \"Oklahoma\",\n \"Oregon\",\n \"Palau\",\n \"Pennsylvania\",\n \"Puerto Rico\",\n \"Rhode Island\",\n \"South Carolina\",\n \"South Dakota\",\n \"Tennessee\",\n \"Texas\",\n \"Utah\",\n \"Vermont\",\n \"Virgin Islands\",\n \"Virginia\",\n \"Washington\",\n \"West Virginia\",\n \"Wisconsin\",\n \"Wyoming\"\n ]\n};\n\nexport const statesObjectList = statesEnum.enum.map((abbr, index) => {\n return { value: abbr, display: statesEnum.enumNames[index] };\n});\n\nexport default statesEnum;\n","import { Button, Modal as CModal } from \"hcss-components\";\nimport * as React from \"react\";\nimport { Sizes } from \"react-bootstrap\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\n\nexport interface ModalProps {\n title?: string;\n children?: React.ReactNode;\n show: boolean;\n handleClose: () => void;\n footer?: React.ReactNode;\n size?: Sizes;\n columns?: ModalColumnConfig;\n style?: React.CSSProperties;\n isScrollable?: boolean;\n}\n\nexport interface ModalColumnConfig {\n columns: number;\n width: string;\n}\n\nexport default function Modal(props: ModalProps) {\n const body =\n props.isScrollable === false ? (\n \n {props.children}\n \n ) : (\n \n {props.children}\n \n );\n\n return (\n \n \n {props.title}\n \n {body}\n \n {props.footer || (\n \n )}\n \n \n );\n}\nconst ScrollableModalBody = styled(CModal.Body)`\n max-height: 70vh;\n overflow-y: auto;\n`;\n\nconst ModalColumns = styled.div<{ config?: ModalColumnConfig }>`\n ${props =>\n props.config\n ? `columns: ${props.config.width} ${props.config.columns};`\n : \"\"}\n`;\n","import { EstimateEntity } from \"api\";\nimport {\n ActivityFormulaDto,\n ActivityTotal,\n FormulaMatchOptions\n} from \"api/GeneratedClients/insights\";\nimport { WithId } from \"core\";\n\nexport function normalizeDate(dateString?: string | null) {\n if (dateString && dateString.indexOf(\"+00:00\")) {\n return dateString.substring(0, 19);\n }\n return dateString;\n}\n\nexport function normalizeEstimateDates(estimate: WithId) {\n if (estimate.values.filters) {\n estimate.values.filters.bidDate = normalizeDate(\n estimate.values.filters.bidDate\n );\n estimate.values.filters.startDate = normalizeDate(\n estimate.values.filters.startDate\n );\n estimate.values.filters.reviewDate = normalizeDate(\n estimate.values.filters.reviewDate\n );\n estimate.values.filters.createdDate = normalizeDate(\n estimate.values.filters.createdDate\n );\n estimate.values.filters.userDefinedDate1 = normalizeDate(\n estimate.values.filters.userDefinedDate1\n );\n estimate.values.filters.userDefinedDate2 = normalizeDate(\n estimate.values.filters.userDefinedDate2\n );\n estimate.values.filters.userDefinedDate3 = normalizeDate(\n estimate.values.filters.userDefinedDate3\n );\n estimate.values.filters.userDefinedDate4 = normalizeDate(\n estimate.values.filters.userDefinedDate4\n );\n estimate.values.filters.userDefinedDate5 = normalizeDate(\n estimate.values.filters.userDefinedDate5\n );\n }\n if (estimate.values.totals) {\n estimate.values.totals.summary_Date = normalizeDate(\n estimate.values.totals.summary_Date\n );\n estimate.values.totals.spread_Date = normalizeDate(\n estimate.values.totals.spread_Date\n );\n }\n return estimate;\n}\n\nexport const shouldGenerateKV = (\n formula: ActivityFormulaDto,\n item: ActivityTotal\n) => {\n const itemCode = item.activityCode.toLocaleUpperCase();\n const formulaExpression = formula.expression.toLocaleUpperCase();\n const itemUnit = item.units.toLocaleUpperCase();\n const formulaUnit = formula.unit.toLocaleUpperCase();\n switch (formula.match) {\n case FormulaMatchOptions.StartsWith:\n if (itemCode.startsWith(formulaExpression) && itemUnit === formulaUnit)\n return true;\n return false;\n case FormulaMatchOptions.Exact:\n if (itemCode === formulaExpression && itemUnit === formulaUnit)\n return true;\n return false;\n }\n};\n\nexport const generateActivityTotalFormulaKey = (\n match: FormulaMatchOptions,\n expression: string,\n unit: string\n) => {\n //\".\" is the real issue here. there doesn't seem to be a good native\n // way to encode \".\". I think replacing it is sufficient and is unlikely to cause\n // users issues\n return encodeURIComponent(\n `${match}-${expression.toLocaleUpperCase()}-${unit.toLocaleUpperCase()}`.replace(\n /\\./g,\n \"\"\n )\n );\n};\n\nexport const mapActivityTotalsBackToFormulas = (\n activityTotals: ActivityTotal[],\n formulas: ActivityFormulaDto[]\n) => {\n const estWithFormulasAndTotals: Record = {};\n\n activityTotals.forEach(activityTotal => {\n const { estimateId, cost, quantity } = activityTotal;\n formulas.forEach(formula => {\n const match = formula.match;\n const expression = formula.expression;\n const unit = formula.unit;\n const uniqueKey = generateActivityTotalFormulaKey(\n match,\n expression,\n unit\n );\n const generateKV = shouldGenerateKV(formula, activityTotal);\n if (!estWithFormulasAndTotals[estimateId])\n estWithFormulasAndTotals[estimateId] = {};\n if (generateKV) {\n const currentCost =\n estWithFormulasAndTotals[estimateId][uniqueKey]?.totals?.cost ?? 0;\n\n const currentQuantity =\n estWithFormulasAndTotals[estimateId][uniqueKey]?.totals?.quantity ??\n 0;\n\n estWithFormulasAndTotals[estimateId][uniqueKey] = {\n totals: {\n cost: currentCost + cost,\n quantity: currentQuantity + quantity\n },\n expression,\n unit,\n match\n };\n }\n });\n });\n\n return estWithFormulasAndTotals;\n};\n\nexport interface EstimateToFormulaDict {\n [key: string]: {\n match: FormulaMatchOptions;\n expression: string;\n unit: string;\n totals: {\n cost: number;\n quantity: number;\n };\n };\n}\n\n//This method is used to map estimate filter labels from their EH key, to their PreCon key,\n// \"tag2\" -> \"estimateTag2\"\nexport const determineFilterKeyForLabelKey = (labelKey: string) => {\n if (labelKey.includes(\"tag\")) {\n return labelKey.replace(\"tag\", \"estimateTag\");\n }\n if (labelKey.includes(\"integer\")) {\n return labelKey.replace(\"integer\", \"userDefinedInteger\");\n }\n if (labelKey.includes(\"date\")) {\n return labelKey.replace(\"date\", \"userDefinedDate\");\n }\n if (labelKey.includes(\"text\")) {\n return labelKey.replace(\"text\", \"userDefinedText\");\n }\n if (labelKey.includes(\"number\")) {\n return labelKey.replace(\"number\", \"userDefinedNumber\");\n }\n return labelKey;\n};\n\n//This method is used to map estimate filter labels from their HBFields.ts key, to their PreCon key,\n// \"estimateFilter1\" -> \"estimateTag1\"\nexport const determineHBFieldKeyForLabelKey = (labelKey: string) => {\n if (labelKey.includes(\"estimateFilter\")) {\n return labelKey.replace(\"estimateFilter\", \"estimateTag\");\n }\n if (labelKey.includes(\"userInteger\")) {\n return labelKey.replace(\"userInteger\", \"userDefinedInteger\");\n }\n if (labelKey.includes(\"userDate\")) {\n return labelKey.replace(\"userDate\", \"userDefinedDate\");\n }\n if (labelKey.includes(\"userAscii\")) {\n return labelKey.replace(\"userAscii\", \"userDefinedText\");\n }\n if (labelKey.includes(\"userNumber\")) {\n return labelKey.replace(\"userNumber\", \"userDefinedNumber\");\n }\n return labelKey;\n};\n","import axios, { AxiosInstance, AxiosPromise } from \"axios\";\nimport { ModelMappingService } from \"core/services/model-mapping-service\";\nimport { UsableAccount, HcssCalendarAccount } from \"../models\";\nimport { CreateAccountResponse } from \"../models/CreateAccountResponse\";\nimport { NylasAccount } from \"../models/NylasAccount\";\nimport { NylasCalendar } from \"../models/NylasCalendar\";\n\nexport class HcssConnectAccountService {\n instance: AxiosInstance;\n baseUrl: string;\n token: string;\n client: AxiosInstance;\n mapperService: ModelMappingService;\n\n constructor(baseUrl: string, token: string) {\n this.instance = axios.create();\n this.baseUrl = baseUrl;\n this.token = token;\n this.client = axios.create();\n this.mapperService = new ModelMappingService();\n\n this.client.interceptors.request.use(config => {\n config.headers = { \"X-Kloudless-Raw-Data\": true };\n config.headers.Authorization = `Bearer ${this.token}`;\n return config;\n });\n\n this.instance.interceptors.response.use(\n response => response,\n error => {\n console.error(error);\n if (error.response.status === 401) {\n window.location.reload();\n }\n\n return Promise.reject(error);\n }\n );\n }\n\n async getNylasAccounts(hcssCalendarAccounts: HcssCalendarAccount[]) {\n const promises = [] as AxiosPromise[];\n const validAccounts: UsableAccount[] = [];\n const inValidAccounts: UsableAccount[] = [];\n\n hcssCalendarAccounts.forEach(account => {\n promises.push(this.getNylasAccountDetails(account.id));\n });\n const responses = await Promise.allSettled(promises);\n\n for (let i = 0; i < responses.length; i++) {\n const response = responses[i];\n if (!response) continue;\n if (response.status === \"rejected\") {\n const nylasAccount = await this.getNylasAccountInfo(\n hcssCalendarAccounts[i].id\n );\n const invalidAccount = this.mapperService.mapNylasAccountToUsableAccount(\n nylasAccount.data,\n true\n );\n inValidAccounts.push(invalidAccount);\n } else {\n const validAccount = this.mapperService.mapNylasAccountToUsableAccount(\n response.value.data,\n false\n );\n validAccounts.push(validAccount);\n }\n }\n\n return validAccounts.concat(inValidAccounts);\n }\n\n async getNylasCalendarsForNylasAccounts(accounts: UsableAccount[]) {\n const promises: Promise[] = [];\n let calendars: NylasCalendar[] = [];\n accounts.forEach(account => {\n promises.push(this.getNylasAccountCalendars(account.id));\n });\n const responses = await Promise.allSettled(promises);\n responses.forEach(response => {\n if (response.status === \"fulfilled\") {\n const cals = response.value;\n calendars = [...calendars, ...cals];\n }\n });\n return calendars;\n }\n\n async connectAccount(redirectUrl: string) {\n const response = await this.client.post(\n `${this.baseUrl}/api/v2/accounts/`,\n { redirect: redirectUrl }\n );\n return response.data.connectionUrl;\n }\n\n private async getNylasAccountCalendars(accountId: string) {\n const response = await this.client.get(\n `${this.baseUrl}/api/v2/nylas/accounts/${accountId}/calendars`\n );\n return response.data;\n }\n\n async getHcssCalendarAccounts() {\n return this.client.get(\n `${this.baseUrl}/api/v2/accounts`\n );\n }\n\n private getNylasAccountDetails(accountId: string) {\n return this.client.get(\n `${this.baseUrl}/api/v2/nylas/accounts/${accountId}/account`\n );\n }\n\n // this endpoint is used to get invalid accounts info. Since we do not store invalid account's email, we need to use nylas client credentials to get the info.\n // The reason we cannot use the getNylasAccountDetails method because it tries to use the account invalid token to get the data. Look into the kloudless repo for more info.\n private getNylasAccountInfo(accountId: string) {\n return this.client.get(\n `${this.baseUrl}/api/v2/applicationAccounts/${accountId}/`\n );\n }\n\n async disconnectNylasAccount(accountId: string) {\n return await this.client.delete(\n `${this.baseUrl}/api/v2/accounts/${accountId}`\n );\n }\n}\n","import constate from \"constate\";\nimport { UsableAccount, HcssCalendarAccount } from \"./models\";\nimport { notify } from \"hcss-components\";\nimport { useHcssUser, useHcssToken } from \"modules/account\";\nimport { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { HcssConnectAccountService } from \"./services/account-service\";\nimport config from \"config\";\nimport { UserType } from \"core\";\nimport { NylasCalendar } from \"./models/NylasCalendar\";\nimport { strings } from \"localization\";\n\nconst useHcssConnect = () => {\n const token = useHcssToken();\n const user = useHcssUser();\n const [loadingNylasAccounts, setLoadingNylasAccounts] = useState(\n true\n );\n const [\n loadingHcssCalendarAccounts,\n setLoadingHcssCalendarAccounts\n ] = useState(true);\n const [loadingNylasCalendars, setLoadingNylasCalendars] = useState(\n true\n );\n const [loadingRedirect, setLoadingRedirect] = useState(false);\n const [nylasAccounts, setNylasAccounts] = useState([]);\n const [nylasCalendars, setNylasCalendars] = useState([]);\n\n const hcssConnectApi = useMemo(\n () => new HcssConnectAccountService(config.endpoints.HCSSCONNECT, token),\n [token]\n );\n\n const redirectQueryArg = \"kloudlessRedirect=true\";\n\n const loadHcssCalendarAccounts = useCallback(async () => {\n setLoadingHcssCalendarAccounts(true);\n try {\n const accs = await hcssConnectApi.getHcssCalendarAccounts();\n setLoadingHcssCalendarAccounts(false);\n return accs.data;\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.hcssConnect.errors.fetchingAccount);\n setLoadingHcssCalendarAccounts(false);\n }\n }, [hcssConnectApi]);\n\n const loadNylasAccounts = useCallback(\n async (hcssAccounts: HcssCalendarAccount[]) => {\n setLoadingNylasAccounts(true);\n try {\n const hcssNylasAccounts = hcssAccounts.filter(\n account => account.serviceName === \"Nylas\"\n );\n const accounts = await hcssConnectApi.getNylasAccounts(\n hcssNylasAccounts\n );\n if (accounts.some(acc => acc.isBad)) {\n notify(\"danger\", strings.hcssConnect.errors.fetchingAccount);\n }\n setNylasAccounts(accounts);\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.hcssConnect.errors.fetchingAccount);\n }\n setLoadingNylasAccounts(false);\n },\n [hcssConnectApi]\n );\n\n const loadNylasCalendars = useCallback(async () => {\n setLoadingNylasCalendars(true);\n try {\n const calendars = await hcssConnectApi.getNylasCalendarsForNylasAccounts(\n nylasAccounts\n );\n setNylasCalendars(calendars);\n } catch (error) {\n console.error(error);\n notify(\"danger\", \"Error fetching calendars\");\n }\n setLoadingNylasCalendars(false);\n }, [nylasAccounts, hcssConnectApi]);\n\n useEffect(() => {\n const loadData = async () => {\n const hcssCalendarAccounts = await loadHcssCalendarAccounts();\n if (hcssCalendarAccounts) {\n await loadNylasAccounts(hcssCalendarAccounts);\n }\n };\n if (user.type !== UserType.Guest) {\n void loadData();\n }\n }, [loadHcssCalendarAccounts, loadNylasAccounts, user.type]);\n\n useEffect(() => {\n if (nylasAccounts) void loadNylasCalendars();\n }, [nylasAccounts, loadNylasCalendars]);\n\n const deleteNylasAccount = async (accountId: string) => {\n try {\n const {\n data: deletedAccount\n } = await hcssConnectApi.disconnectNylasAccount(accountId);\n if (deletedAccount !== null) {\n const tempAccounts = [...nylasAccounts];\n const deleteIndex = tempAccounts.findIndex(acc => acc.id === accountId);\n if (deleteIndex !== -1) {\n tempAccounts.splice(deleteIndex, 1);\n notify(\"success\", \"Account link deleted successfully\");\n setNylasAccounts(tempAccounts);\n }\n }\n } catch (error) {\n notify(\"danger\", \"Unable to delete account link\");\n }\n };\n\n const connectAccount = async () => {\n setLoadingRedirect(true);\n try {\n const connectUrl = !window.location.href.includes(\"?\")\n ? `${window.location.href}?${redirectQueryArg}`\n : `${window.location.href}&${redirectQueryArg}`;\n const redirectUrl = await hcssConnectApi.connectAccount(connectUrl);\n window.location.assign(redirectUrl);\n } catch (error) {\n notify(\"danger\", \"Error connecting new account\");\n }\n setLoadingRedirect(false);\n };\n\n return {\n loading:\n loadingHcssCalendarAccounts ||\n loadingNylasAccounts ||\n loadingNylasCalendars ||\n loadingRedirect,\n nylasAccounts,\n nylasCalendars,\n deleteNylasAccount,\n connectAccount,\n loadNylasCalendars\n };\n};\n\nconst [provider, context] = constate(useHcssConnect);\nexport const HcssConnectProvider = provider;\nexport const useHcssConnectContext = context;\n","import { useState } from \"react\";\nimport { useLocalStorage } from \"hcss-hooks\";\nimport { UIState } from \"../models/ui-state\";\nimport { Resize } from \"../models/resize\";\n\nimport {\n DYNAMIC_NAV_WIDTH,\n MODULE_NAV_WIDTH_CACHE_KEY,\n NAV_COLLAPSED_CACHE_KEY,\n NAV_COLLAPSED_STORE_CACHE_KEY\n} from \"../common/constants\";\n\nexport interface UIController {\n uiState: {\n isResizing: boolean;\n isResizeDisabled: boolean;\n moduleNavWidth: number;\n flyoutIsOpen: boolean;\n isCollapsed: boolean;\n };\n collapse: () => void;\n expand: () => void;\n toggleCollapse: () => void;\n manualResizeStart: (resize: Resize) => void;\n manualResizeEnd: (resize: Resize) => void;\n enableResize: () => void;\n disableResize: () => void;\n setFlyoutIsOpen: (isOpen: boolean) => void;\n}\n\nexport const useUIController = (initialState: UIState): UIController => {\n const [flyoutIsOpen, _setFlyoutIsOpen] = useState(false);\n const [isResizing, setIsResizing] = useState(false);\n\n const [isResizeDisabled, setIsResizeDisabled] = useState(\n initialState.isResizeDisabled || false\n );\n\n const [moduleNavWidth, setmoduleNavWidth] = useLocalStorage(\n MODULE_NAV_WIDTH_CACHE_KEY,\n initialState.moduleNavWidth || DYNAMIC_NAV_WIDTH\n );\n\n const [isCollapsed, setIsCollapsed] = useLocalStorage(\n NAV_COLLAPSED_CACHE_KEY,\n initialState.isCollapsed || false\n );\n\n const [isCollapsedStore, setIsCollapsedStore] = useLocalStorage(\n NAV_COLLAPSED_STORE_CACHE_KEY,\n isCollapsed\n );\n\n const setFlyoutIsOpen = (isOpen: boolean) => _setFlyoutIsOpen(isOpen);\n\n const collapse = () => {\n if (isResizeDisabled) return;\n setIsCollapsed(true);\n };\n\n const expand = () => {\n if (isResizeDisabled) return;\n setIsCollapsed(false);\n };\n\n const toggleCollapse = () => {\n const toggle = isCollapsed ? expand : collapse;\n toggle();\n\n // When we are in a previous state where a hover\n // caused the flyout to open and now it menu has been\n // toggled to stay open. The flyout state should be\n // reset to false.\n if (isCollapsed && flyoutIsOpen) {\n setFlyoutIsOpen(false);\n }\n };\n\n const manualResizeStart = ({ moduleNavWidth, isCollapsed }: Resize) => {\n if (isResizeDisabled) return;\n setIsResizing(true);\n setmoduleNavWidth(moduleNavWidth);\n setIsCollapsed(isCollapsed);\n };\n\n const manualResizeEnd = ({ moduleNavWidth, isCollapsed }: Resize) => {\n if (isResizeDisabled) return;\n setIsResizing(false);\n setmoduleNavWidth(moduleNavWidth);\n setIsCollapsed(isCollapsed);\n };\n\n const enableResize = () => {\n setIsCollapsed(isCollapsedStore);\n setIsResizeDisabled(false);\n };\n\n const disableResize = () => {\n setIsCollapsedStore(isCollapsed);\n setIsCollapsed(false);\n setIsResizeDisabled(true);\n };\n\n return {\n uiState: {\n isResizing,\n isResizeDisabled,\n moduleNavWidth,\n isCollapsed,\n flyoutIsOpen\n },\n collapse,\n expand,\n toggleCollapse,\n manualResizeStart,\n manualResizeEnd,\n enableResize,\n disableResize,\n setFlyoutIsOpen\n };\n};\n","import constate from \"constate\";\nimport { useUIController } from \"../controllers/ui-controller\";\nimport { UIState } from \"../models/ui-state\";\nimport { DYNAMIC_NAV_WIDTH } from \"../common/constants\";\n\nconst DEFAULT_UI_STATE: UIState = {\n isCollapsed: false,\n moduleNavWidth: DYNAMIC_NAV_WIDTH,\n isResizeDisabled: false\n};\n\nconst useNavigationController = () => {\n const controller = useUIController(DEFAULT_UI_STATE);\n return controller;\n};\n\nconst [provider, context] = constate(useNavigationController);\n\nexport const NavigationControllerProvider = provider;\nexport const useNavigationControllerContext = context;\n","import { call, put, select, SelectEffect } from \"redux-saga/effects\";\nimport RestApi, { PagedResults } from \"./RestApi\";\nimport { WithId } from \"core\";\nimport { StoreState } from \"modules/store\";\nimport { Action } from \"redux\";\n\nexport interface ApiFactoryOptions {\n stateKey?:\n | \"schemas\"\n | \"views\"\n | \"projects\"\n | \"estimates\"\n | \"calendars\"\n | \"configurationSettings\";\n apiPath: string;\n onBeforeLoadSuccess?: (\n payload?: WithId[]\n ) => Generator[] | undefined, unknown>;\n onLoadSuccess?: (payload: WithId[]) => Action;\n onLoadFail?: (payload: Error) => Action;\n onLoadedAllRecords?: () => Action;\n onLoadedFirstPage?: () => Action;\n isBusinessUnitApi?: boolean;\n}\n\nexport function* getTokenSaga() {\n const accessToken = yield select(\n ({ account }: StoreState) => account.user?.idsrvAccessToken\n );\n return accessToken;\n}\n\nexport function* getSelectedBusinessUnitIdSaga() {\n const selectedBusinessUnitId = yield select(\n ({ account }: StoreState) => account?.user?.selectedBusinessUnitId\n );\n return selectedBusinessUnitId;\n}\n\nexport function apiSagaFactory(opts: ApiFactoryOptions) {\n function* getApi() {\n const accessToken = yield call(getTokenSaga);\n const selectedBusinessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n if (opts.isBusinessUnitApi)\n return new RestApi(\n `/v1/businessUnits/${selectedBusinessUnitId}${opts.apiPath}`,\n accessToken\n );\n else return new RestApi(opts.apiPath, accessToken);\n }\n return {\n getApi,\n getTokenSaga,\n // tslint:disable-next-line:object-literal-shorthand\n load: function* () {\n const { stateKey } = opts;\n const previouslyLoaded = stateKey\n ? yield select(\n ({ [stateKey]: stateSlice }: StoreState) => stateSlice.loaded\n )\n : false;\n\n const api = yield getApi();\n\n if (!previouslyLoaded) {\n try {\n let hasNextPage: boolean | undefined = true;\n let continuationToken: string | undefined;\n while (hasNextPage) {\n const loadingFirstPage =\n stateKey === \"projects\" && (!hasNextPage || !continuationToken);\n const top = loadingFirstPage ? 100 : -1;\n const response = yield call([api, api.get], \"\", {\n continuationToken,\n orderBy: {\n fieldId: \"lastModified\",\n ascending: false\n },\n top\n });\n const data: PagedResults> = response.data;\n let { results } = data;\n\n if (opts.onBeforeLoadSuccess) {\n results = yield call(opts.onBeforeLoadSuccess, results);\n }\n\n if (opts.onLoadSuccess) {\n yield put(opts.onLoadSuccess(results || []));\n if (opts.onLoadedFirstPage && loadingFirstPage)\n yield put(opts.onLoadedFirstPage());\n }\n continuationToken = data.nextPageToken;\n hasNextPage = data.hasNextPage;\n }\n if (opts.onLoadedAllRecords) {\n yield put(opts.onLoadedAllRecords());\n }\n } catch (error) {\n console.error(error);\n if (opts.onLoadFail) {\n yield put(opts.onLoadFail(error));\n }\n if (opts.onLoadedAllRecords) {\n yield put(opts.onLoadedAllRecords());\n }\n }\n }\n }\n };\n}\n","export * from \"./views\";\nexport * from \"./state\";\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Action, Getter, Plugin } from \"@devexpress/dx-react-core\";\nimport moment from \"moment\";\nimport numeral from \"numeral\";\nimport * as React from \"react\";\nimport { SchemaFieldType } from \"../../../api\";\nimport { DataColumnType } from \"hcss-tables\";\nimport { statesObjectList as states } from \"../../../core/util/states\";\nimport { getHighlightColor } from \"../columns/column-providers\";\nimport { sortBy } from \"lodash-es\";\nimport { strings } from \"localization\";\nimport { formatCompanyField, formatContactField, formatLatLong } from \"core\";\nimport { preconIdToString } from \"modules/projects\";\n\nexport const ExportRows: React.FunctionComponent<{\n templateDisplayName: string;\n}> = ({ templateDisplayName }) => {\n return (\n \n \n \n \n \n \n \n );\n};\n\nexport default ExportRows;\n\nexport const exportPDF = async (\n { tableColumns, exportRows, getCellValue, columnUConfig }: any,\n { templateDisplayName }: any\n) => {\n if (tableColumns === undefined) {\n return;\n }\n const dataBody = formatExportRows(\n tableColumns,\n exportRows,\n getCellValue,\n true\n );\n\n await import(/* webpackChunkName: \"jspdf-autotable\" */ \"jspdf-autotable\");\n const jspdf = await import(/* webpackChunkName: \"jspdf\" */ \"jspdf\");\n\n let options = {};\n\n const columns = tableColumns.filter((c: any) => {\n return c.column?.name?.indexOf?.(\"|VIRTUAL|\") === -1;\n });\n\n if (columns.length >= 8) {\n options = {\n orientation: \"l\",\n unit: \"mm\",\n format: \"a3\", // a3, a4 (default), a5, letter, legal\n compress: true\n };\n } else {\n options = {\n orientation: \"p\",\n unit: \"mm\",\n format: \"a4\",\n compress: true\n };\n }\n\n const jsPDF = jspdf.default;\n const doc: any = new jsPDF(options);\n\n const totalPagesExp = \"{total_pages_count_string}\";\n\n const headers: any[] = [];\n const columnStyles: any = {};\n if (dataBody[0]) {\n Object.keys(dataBody[0]).forEach(headerName => {\n if (headerName !== \"id\") {\n const header = { dataKey: headerName, header: headerName };\n headers.push(header);\n\n const wrapCol = columns.find(\n (x: any) =>\n x.column !== undefined &&\n x.column !== null &&\n x.column.title === headerName &&\n x.width >= 250\n );\n if (wrapCol) {\n // Create columnStyles\n columnStyles[headerName] = { halign: \"left\", cellWidth: 40 };\n }\n\n const rightCol = columns.find(\n (x: any) =>\n x.column !== undefined &&\n x.column !== null &&\n x.column.title === headerName &&\n x.align === \"right\"\n );\n if (rightCol) {\n // Create columnStyles\n columnStyles[headerName] = { halign: \"right\" };\n }\n\n // center date & time colums data 'X' for true\n const centerCol = columns.find(\n (x: any) =>\n x.column !== undefined &&\n x.column !== null &&\n x.column.title === headerName &&\n x.column.type === SchemaFieldType.Boolean\n );\n if (centerCol) {\n // Create columnStyles\n columnStyles[headerName] = { halign: \"center\" };\n }\n }\n });\n }\n\n const headStyles = {\n font: \"helvetica\",\n fontStyle: \"bold\",\n overflow: \"linebreak\",\n fillColor: [255, 255, 255],\n textColor: [0, 0, 0],\n halign: \"left\",\n valign: \"middle\",\n fontSize: 11,\n cellPadding: 1.5,\n lineColor: [128, 128, 128],\n lineWidth: 0.1,\n cellWidth: \"auto\",\n minCellHeight: 12\n };\n\n const bodyStyles = {\n font: \"helvetica\",\n fontStyle: \"normal\",\n overflow: \"linebreak\",\n fillColor: [255, 255, 255],\n textColor: [0, 0, 0],\n halign: \"left\",\n valign: \"middle\",\n fontSize: 9,\n cellPadding: 1.5,\n lineColor: [221, 221, 221],\n lineWidth: 0.25,\n cellWidth: \"auto\",\n minCellHeight: 10\n };\n\n const alternateRowStyles = {\n font: \"helvetica\",\n fontStyle: \"normal\",\n overflow: \"linebreak\",\n fillColor: [255, 255, 255],\n textColor: [0, 0, 0],\n halign: \"left\",\n valign: \"middle\",\n fontSize: 9,\n cellPadding: 1.5,\n lineColor: [221, 221, 221],\n lineWidth: 0.25,\n cellWidth: \"auto\",\n minCellHeight: 10\n };\n\n const pdfObject = {\n columns: headers,\n body: dataBody,\n startY: 30,\n columnStyles,\n theme: \"striped\",\n pageBreak: \"auto\",\n tableWidth: \"auto\",\n showHead: \"everyPage\",\n showFoot: \"everyPage\",\n margin: { top: 30, left: 20, right: 20, bottom: 30 },\n bodyStyles,\n headStyles,\n alternateRowStyles,\n allSectionHooks: true,\n didDrawCell: (data: any) => {\n // First check Name column is visible in Table\n const dataColumns = columns.filter(\n (tableColumn: any) => \"column\" in tableColumn\n );\n const nameColumn = dataColumns\n .map((cell: any) => cell.column)\n .filter((col: any) => col.name === \"name\")[0];\n if (!nameColumn) {\n return;\n }\n\n if (\n data.column.dataKey === nameColumn.title &&\n data.row.section === \"body\"\n ) {\n if (\n !columnUConfig ||\n (columnUConfig.id !== \"state\" &&\n !columnUConfig.config &&\n !columnUConfig.config.listValues &&\n columnUConfig.config.listValues.length <= 0)\n ) {\n return;\n }\n\n let listValues = [];\n if (columnUConfig.type === DataColumnType.States) {\n listValues = states;\n } else if (columnUConfig.config.customSort) {\n listValues = columnUConfig.config.listValues;\n } else {\n listValues = sortBy(columnUConfig.config.listValues, (opt: any) =>\n opt.display.toLocaleLowerCase()\n );\n }\n const row = exportRows.filter(\n (row: any) => row.id === data.row.raw.id\n )[0];\n const rowVal = row.fields[columnUConfig.name];\n if (!rowVal) {\n return;\n }\n const index = listValues.findIndex(\n (lisVal: any) => lisVal.value === rowVal\n );\n if (index > -1) {\n const hexColor = getHighlightColor(index);\n const rgbColor: number[] = hexToRgb(hexColor);\n const maxY = data.cell.y + data.cell.height;\n doc.setDrawColor(...rgbColor);\n doc.setLineWidth(0.75);\n doc.line(\n data.cell.textPos.x,\n maxY - 2,\n data.cell.textPos.x + data.cell.wrappedWidth,\n maxY - 2,\n \"F\"\n );\n }\n }\n },\n didDrawPage: (data: any) => {\n // HEADER\n doc.setFontSize(14);\n doc.setTextColor(40);\n doc.setFontStyle(\"bold\");\n const headerPageWidth = doc.internal.pageSize.getWidth() - 55;\n const options = { maxWidth: data.settings.margin.left + headerPageWidth };\n doc.text(templateDisplayName, data.settings.margin.left, 16, options); // set your margins\n\n // Footer\n doc.setFontSize(10);\n doc.setTextColor(40);\n doc.setFontStyle(\"normal\");\n\n const pageSize = doc.internal.pageSize;\n const pageHeight = pageSize.height\n ? pageSize.height\n : pageSize.getHeight();\n\n const currentPage = strings.formatString(\n strings.tables.export.pdf.currentPage,\n doc.internal.getNumberOfPages(),\n totalPagesExp\n );\n doc.text(currentPage, data.settings.margin.left, pageHeight - 18);\n doc.text(moment().format(\"L LT\"), data.table.width - 20, pageHeight - 18);\n }\n };\n\n doc.autoTable(pdfObject);\n\n // Total page number plugin only available in jspdf v1.0+\n if (typeof doc.putTotalPages === \"function\") {\n doc.putTotalPages(totalPagesExp);\n }\n\n doc.save(\n strings.formatString(\n strings.tables.export.pdf.filename,\n templateDisplayName,\n new Date().toISOString()\n )\n );\n};\n\nexport const exportCSV = async (\n { tableColumns, exportRows, getCellValue }: any,\n { templateDisplayName }: any\n) => {\n if (tableColumns === undefined) {\n return;\n }\n const data = formatExportRows(tableColumns, exportRows, getCellValue);\n const Papa = await import(/* webpackChunkName: \"papaparse\" */ \"papaparse\");\n const csv = Papa.unparse(data);\n const blob = new Blob([csv], { type: \"text/csv;charset=utf-8\" });\n const FileSaver = await import(\n /* webpackChunkName: \"file-saver\" */ \"file-saver\"\n );\n FileSaver.saveAs(\n blob,\n strings.formatString(\n strings.tables.export.csv.filename,\n templateDisplayName,\n new Date().toISOString()\n ) as string\n );\n};\n\nexport const exportBidResultsCSV = async (\n { tableColumns, exportRows, getCellValue }: any,\n { templateDisplayName }: any\n) => {\n if (tableColumns === undefined) {\n return;\n }\n const data = formatExportBidResultsRows(exportRows, false);\n const Papa = await import(/* webpackChunkName: \"papaparse\" */ \"papaparse\");\n const csv = Papa.unparse(data);\n const blob = new Blob([csv], { type: \"text/csv;charset=utf-8\" });\n const FileSaver = await import(\n /* webpackChunkName: \"file-saver\" */ \"file-saver\"\n );\n FileSaver.saveAs(\n blob,\n strings.formatString(\n strings.tables.export.csv.filename,\n templateDisplayName,\n new Date().toISOString()\n ) as string\n );\n};\n\nexport const highlightProjects = ({\n tableColumns,\n exportRows,\n getCellValue\n}: any) => {\n if (tableColumns === undefined) {\n return;\n }\n};\n\nconst formatNumber = (value: any) => {\n return value.toString().indexOf(\".\") !== -1\n ? numeral(value).format(\"0,0.00\")\n : numeral(value).format(\"0,0.\");\n};\n\nconst formatPercent = (value: any) => {\n return value.toString().indexOf(\".\") !== -1\n ? numeral(value).format(\"0,0.00%\")\n : numeral(value).format(\"0,0.%\");\n};\n\nexport const formatExportRows = (\n tableColumns: any,\n exportRows: any[],\n getCellValue: any,\n isPDFExport = false\n) => {\n const dataColumns = tableColumns.filter((c: any) => {\n return c.column?.name?.indexOf?.(\"|VIRTUAL|\") === -1;\n });\n\n return exportRows.map((row: any) => {\n const dataRow: any = isPDFExport ? { id: row.id } : {};\n dataColumns.forEach(({ column }: any) => {\n const keyExists = column.title in dataRow;\n const key = `${column.title}${keyExists ? \" (2)\" : \"\"}`;\n let value = getCellValue(row, column.name);\n if (column.type === SchemaFieldType.Date && value && value !== \"\") {\n const dateValue = moment(value);\n if (dateValue.isValid()) {\n value = isPDFExport\n ? dateValue.format(\"L\")\n : dateValue.format(\"YYYY-MM-DD\");\n }\n } else if (column.id === \"preconId\") {\n value = preconIdToString(value);\n } else if (\n column.type === SchemaFieldType.DateTime &&\n value &&\n value !== \"\"\n ) {\n const dateValue = moment(value);\n if (dateValue.isValid()) {\n value = isPDFExport\n ? dateValue.format(\"L LT\")\n : dateValue.format(\"YYYY-MM-DD HH:mm\");\n }\n } else if (isPDFExport && column.type === SchemaFieldType.Currency) {\n if (value || value === 0) {\n value = numeral(value).format(`$0,0.${\"0\".repeat(2)}`);\n }\n } else if (isPDFExport && column.type === SchemaFieldType.Number) {\n if (value && column?.config?.[\"showAsPercent\"]) {\n value = formatPercent(value);\n } else if (value && isFinite(value)) {\n value = formatNumber(value);\n }\n } else if (column.type === SchemaFieldType.Boolean) {\n if (value && value !== \"\") {\n value = \"X\";\n } else {\n value = \"\";\n }\n } else if (column.type === SchemaFieldType.Links) {\n value = getLinks(value);\n } else if (column.type === SchemaFieldType.Checklist) {\n value = getCheckList(value);\n } else if (column?.config?.[\"latLong\"]) {\n value = formatLatLong(value);\n } else if (column?.config?.[\"company\"]) {\n value = formatCompanyField(value);\n } else if (column?.config?.[\"contact\"]) {\n value = formatContactField(value);\n }\n dataRow[key] = value;\n });\n return dataRow;\n });\n};\n\nexport const formatExportBidResultsRows = (\n exportRows: any[],\n isPDFExport = false\n) => {\n const parsedRows: any[] = [];\n const winningValues: any = {};\n\n exportRows.forEach((row: any) => {\n row.fields?.bidResults?.forEach((bidResult: any) => {\n const result: any = isPDFExport ? { id: row.id } : {};\n result[\"Project Name\"] = row.fields?.name;\n result[\"Winner?\"] = bidResult.winner ? \"Yes\" : \"No\";\n if (bidResult.winner === true) {\n winningValues[result[\"Project Name\"]] = bidResult.amount;\n }\n result[\"Company Name\"] = bidResult.name;\n result[\"Amount\"] = bidResult.amount;\n\n parsedRows.push(result);\n });\n });\n\n console.log(winningValues);\n\n parsedRows.forEach((row: any) => {\n const winningValue = winningValues[row[\"Project Name\"]];\n if (winningValue !== null) {\n row[\"From Low Bid\"] = formatNumber(row[\"Amount\"] - winningValue);\n }\n row[\"Amount\"] = formatNumber(row[\"Amount\"]);\n });\n console.log(parsedRows);\n return parsedRows;\n};\n\nconst getLinks = (value: any) => {\n let link = \"\";\n if (value && value.length > 0 && Object.keys(value).length > 0) {\n value.forEach((val: any) => {\n if (val.url) {\n link += val.url + \"; \";\n }\n });\n }\n return link;\n};\n\nconst getCheckList = (value: any) => {\n let checkedString = \"\";\n let unCheckedString = \"\";\n const totalChecked = value && value.filter((x: any) => x.checked).length > 1;\n const totalUnchecked =\n value && value.filter((x: any) => !x.checked).length > 1;\n if (value && value.length > 0 && Object.keys(value).length > 0) {\n value.forEach((val: any) => {\n if (val.checked) {\n checkedString += val.description;\n checkedString += totalChecked ? \", \" : \"\";\n } else {\n unCheckedString += val.description;\n unCheckedString += totalUnchecked ? \", \" : \"\";\n }\n });\n }\n\n if (checkedString !== \"\") {\n checkedString =\n `${strings.tables.export.checklist.true} - ` +\n (totalChecked\n ? checkedString.slice(0, checkedString.length - 2) + \"; \"\n : checkedString + \"; \");\n }\n\n if (unCheckedString !== \"\") {\n checkedString +=\n `${strings.tables.export.checklist.false} - ` +\n (totalUnchecked\n ? unCheckedString.slice(0, unCheckedString.length - 2) + \"; \"\n : unCheckedString + \"; \");\n }\n\n return checkedString;\n};\n\nfunction hexToRgb(hex: string): number[] {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return result\n ? [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16)\n ]\n : [255, 255, 255];\n}\n","import React from \"react\";\nimport * as qs from \"querystring\";\n\nexport function useQueryParam(name: string, search: string): T | undefined {\n const rawQuery = React.useMemo(() => qs.parse(search.replace(/^(\\?)/, \"\")), [\n search\n ]);\n\n // read in the raw string value\n const rawValue = rawQuery[name];\n\n // cast if the raw value has changed, otherwise re-use memoized value\n const value = React.useMemo(() => {\n if (rawValue == null) {\n return undefined;\n }\n return (rawValue as unknown) as T;\n }, [rawValue]);\n\n return value;\n}\n","import {\n EstimateEntity,\n JobDto,\n LocationDto,\n Project,\n SchemaField,\n SchemaFieldType\n} from \"api\";\nimport {\n CredentialsUserDto,\n IdentityClientsDto\n} from \"api/GeneratedClients/precon\";\nimport { CurrentUser, WithId } from \"core\";\nimport { get, meanBy, reduce, sortBy, sumBy } from \"lodash-es\";\nimport { LOCAL_PROJECT_ID } from \"../components/NewProjectLink\";\n\nexport const parsePreConId = (stringpreconId: string): PreConId | null => {\n const regex = /(.*?)(0*)(\\d+)?$/g;\n const [_, prefix, leadingZeros, number] = [\n ...stringpreconId.matchAll(regex)\n ][0];\n\n if (!prefix && !number && !leadingZeros) {\n return null;\n }\n const parsedNumber = parseInt(number, 10);\n let numLeadingZeros = leadingZeros.length;\n let finalNumber = isNaN(parsedNumber) ? null : parsedNumber;\n //this could likely be done in regex. but id rather be explicit for now\n // If there are leading zeros, and number is undefined, make number 0, and subtract one from number of leading zeros\n if (numLeadingZeros > 0 && !finalNumber) {\n finalNumber = 0;\n numLeadingZeros = numLeadingZeros - 1;\n }\n const paddedNumberLength =\n numLeadingZeros + (finalNumber?.toString()?.length ?? 0);\n return {\n prefix: prefix ? prefix.toUpperCase() : null,\n number: finalNumber,\n paddedNumberLength,\n completedString: stringpreconId?.toUpperCase()\n };\n};\n\nexport const preconIdToString = (preconId: PreConId | null): string => {\n if (!preconId) return \"\";\n return `${preconId.prefix?.toUpperCase() ?? \"\"}${(preconId.number ?? \"\")\n .toString()\n .padStart(preconId.paddedNumberLength, \"0\")}`;\n};\n\nexport const trueUpCompletedProjectIdString = (preconId: PreConId) => {\n const completedString = preconIdToString(preconId);\n return { ...preconId, completedString };\n};\n\nexport const sortPreConId = (a: PreConId | null, b: PreConId | null) => {\n if (!a) {\n if (!b) return 0;\n return -1;\n }\n if (!b) {\n return 1;\n }\n if (a && b) {\n if (!a.prefix && !b.prefix) return (a?.number ?? 0) - (b?.number ?? 0);\n if (a.prefix === b.prefix) return (a?.number ?? 0) - (b?.number ?? 0);\n if (!a.prefix && b.prefix) return -1;\n if (!b.prefix && a.prefix) return 1;\n if (a.prefix && b.prefix) {\n if (a.prefix < b.prefix) return -1;\n if (a.prefix > b.prefix) return 1;\n }\n }\n return 0;\n};\n\nexport interface PreConId {\n prefix: string | null;\n paddedNumberLength: number;\n number: number | null;\n completedString: string;\n}\n\nexport const validProjectName = (\n name: string,\n id?: string,\n projects?: Project[]\n): boolean => {\n const formattedName = name.toLowerCase().trim();\n if (projects && formattedName.length > 0) {\n const existingProjectsWithName = projects.filter(\n project =>\n project.id !== LOCAL_PROJECT_ID &&\n project.fields.name.toLowerCase().trim() === formattedName\n );\n\n if (\n !existingProjectsWithName.length ||\n id === existingProjectsWithName[0].id\n ) {\n return true;\n }\n }\n\n return false;\n};\n\nexport const linkableLocationId = (\n locationId: string,\n currentLocationId: string | undefined,\n projects: Project[]\n): boolean => {\n const isSameLocationId = locationId === currentLocationId;\n const hasLinkedToAnotherProject = projects.some(\n project => project.locationId === locationId\n );\n\n const isLinkable = !isSameLocationId && !hasLinkedToAnotherProject;\n return isLinkable;\n};\n\nexport const populateProjectWithEstimateValues = (\n project: Pick,\n estimateField: SchemaField,\n selectedEstimates: WithId[]\n) => {\n if (\n estimateField.type === SchemaFieldType.Number ||\n estimateField.type === SchemaFieldType.Currency\n ) {\n if (selectedEstimates.length > 0) {\n project.fields[estimateField.id] = estimateField.config?.showAsPercent\n ? meanBy(selectedEstimates, estimateField.id)\n : sumBy(selectedEstimates, estimateField.id);\n } else {\n project.fields[estimateField.id] = null;\n }\n } else if (\n estimateField.type === SchemaFieldType.ShortText ||\n estimateField.type === SchemaFieldType.List\n ) {\n project.fields[estimateField.id] = reduce(\n selectedEstimates,\n\n (combined, n) => {\n if (combined === \"\") {\n return `${get(n, estimateField.id)}`;\n }\n return `${combined}, ${get(n, estimateField.id)}`;\n },\n \"\"\n );\n }\n};\n\nexport const populateHJJobFieldsWithValues = (\n project: WithId,\n jobs: (LocationDto | JobDto)[]\n) => {\n const job = jobs?.find(j => j.id === project.fields[\"hJJob\"]);\n if (project.fields[\"hJJob\"] && !job) {\n project.fields[\"hJJob.Code\"] = \"----\";\n project.fields[\"hJJob.Description\"] = \"----\";\n return;\n }\n if (!job) {\n return;\n }\n project.fields[\"hJJob.Code\"] = job.code;\n project.fields[\"hJJob.Description\"] = job.description;\n};\n\nexport const filterProjectFieldsBeforeSave = (projectFields: any) => {\n const fieldsToBeExcluded = [\n \"values.code\",\n \"values.totals.totalCost_Takeoff\",\n \"values.totals.bidTotal_Bid\",\n \"values.totals.totalLabor_Total\",\n \"values.totals.permanentMaterial_Total\",\n \"values.totals.constructionMaterial_Total\",\n \"values.totals.subcontract_Total\",\n \"values.totals.totalEqp_Total\",\n \"values.totals.bond\",\n \"values.totals.addon_Total\",\n \"values.totals.manhours_Total\",\n \"values.totals.markupPercentCost_Takeoff\",\n \"values.totals.markupPercentCost_Bid\",\n \"values.totals.markupPercentSales_Takeoff\",\n \"values.totals.balMarkup_Bid\",\n \"values.totals.balMarkup_Takeoff\",\n \"values.totals.actualMarkup_Takeoff\",\n \"values.totals.actualMarkup_Bid\",\n \"values.totals.markupPercentSales_Bid\",\n \"hJJob.Code\",\n \"hJJob.Description\"\n ];\n fieldsToBeExcluded.forEach(field => {\n delete projectFields[field];\n });\n};\ninterface BidResult {\n winner?: boolean;\n amount: number;\n name: string;\n}\ninterface WinningBid {\n company: string | null;\n amount: number | null;\n}\n\nexport const getWinningBid = (row: { bidResults?: BidResult[] }) => {\n const rows = row[\"bidResults\"];\n if (!rows) {\n return;\n }\n\n const result: WinningBid = { company: null, amount: null };\n const winningRow = rows.find((bidRows: BidResult) => bidRows.winner);\n if (winningRow) {\n result.company = winningRow.name;\n result.amount = winningRow.amount;\n }\n\n return result;\n};\n\nexport const getDifferenceWinnerCellValue = (\n row: { bidResults?: BidResult[] },\n companyName: string\n) => {\n const rows = row[\"bidResults\"];\n if (!rows || rows.length <= 1) {\n return;\n }\n const winningRow = rows.find((bidRows: BidResult) => bidRows.winner);\n if (!winningRow || winningRow.name === companyName) {\n return;\n }\n\n const companyRow = rows.find(\n (bidRow: BidResult) => bidRow.name === companyName\n );\n\n if (!companyRow) {\n return;\n }\n const fromLowBid = companyRow.amount - winningRow.amount;\n const percentFromLowBid = fromLowBid / winningRow.amount;\n\n return { fromLowBid, percentFromLowBid };\n};\n\nexport const getDifferenceFromSecondValue = (\n row: { bidResults?: BidResult[] },\n companyName: string\n) => {\n const rows = row[\"bidResults\"];\n if (!rows || rows.length <= 1) {\n return;\n }\n const sortedRows = sortBy(rows, \"amount\");\n const winningRowIndex = sortedRows.findIndex(bidRows => bidRows.winner);\n if (\n winningRowIndex === -1 ||\n sortedRows.length === winningRowIndex ||\n sortedRows[winningRowIndex].name !== companyName\n ) {\n return;\n }\n\n if (\n !sortedRows[winningRowIndex + 1] ||\n !sortedRows[winningRowIndex + 1].amount\n ) {\n return;\n }\n\n const winningAmount = sortedRows[winningRowIndex].amount;\n const secondPlaceAmount = sortedRows[winningRowIndex + 1].amount;\n\n const leftOnTable = secondPlaceAmount - winningAmount;\n const percentLeftOnTable = leftOnTable / winningAmount;\n return { leftOnTable, percentLeftOnTable };\n};\n\nexport const populateProjectWithBidResults = (\n project: WithId,\n currentUser: Readonly\n) => {\n const leftOnTableResult = getDifferenceFromSecondValue(\n project.fields,\n currentUser.companyName\n );\n const fromLowBidResult = getDifferenceWinnerCellValue(\n project.fields,\n currentUser.companyName\n );\n\n const winningBid = getWinningBid(project.fields);\n const fields = project.fields;\n fields.fromLowBid = fromLowBidResult?.fromLowBid;\n fields.percentFromLowBid = fromLowBidResult?.percentFromLowBid;\n fields.percentLeftOnTable = leftOnTableResult?.percentLeftOnTable;\n fields.leftOnTable = leftOnTableResult?.leftOnTable;\n fields.winningBidCompany = winningBid?.company;\n fields.winningBidAmount = winningBid?.amount;\n};\n\nexport const getLastModifiedByName = (\n lastModifiedByUserId: string,\n user: CredentialsUserDto | undefined\n) => {\n switch (lastModifiedByUserId) {\n case \"heavyBid\":\n return \"HeavyBid\";\n\n case \"developerPortal\":\n return \"Developer Portal\";\n\n case \"hcssSupport\":\n return \"HCSS Support\";\n\n default:\n return user ? `${user.firstName} ${user.lastName}` : \"Deleted User\";\n }\n};\n\nexport const getLastModifiedByClientName = (\n lastModifiedByClientId: string,\n client: IdentityClientsDto | undefined\n) => `Via API: ${client?.clientName ?? lastModifiedByClientId}`;\n\nexport const populateProjectWithLastModifiedBy = (\n project: WithId,\n users: Record,\n clients: Record\n) => {\n if (project.lastModifiedBySystemUser && project.lastModifiedByClientId) {\n const client = clients[project.lastModifiedByClientId];\n\n project.fields.lastModifiedBy = getLastModifiedByClientName(\n project.lastModifiedByClientId,\n client\n );\n } else if (project.lastModifiedByUserId) {\n const currentUser = users[project.lastModifiedByUserId];\n\n project.fields.lastModifiedBy = getLastModifiedByName(\n project.lastModifiedByUserId,\n currentUser\n );\n }\n};\n\nexport const constantSections = [\"operations\", \"materials\", \"quickPrice\"];\n\nexport const nonEstimatesLookupFieldIds = [\n \"fromLowBid\",\n \"leftOnTable\",\n \"percentFromLowBid\",\n \"percentLeftOnTable\",\n \"winningBidAmount\",\n \"winningBidCompany\",\n \"lastModified\",\n \"lastModifiedBy\",\n \"hJJob.Code\",\n \"hJJob.Description\"\n];\n\nexport const selectEstimatesFields = (fields: SchemaField[]) =>\n fields.filter(\n field =>\n field.lookup &&\n !field.config.tableLookupField &&\n !nonEstimatesLookupFieldIds.includes(field.id)\n );\n","import produce from \"immer\";\nimport { get, map, values } from \"lodash-es\";\nimport { EstimateEntity as BaseEstimateEntity, UpdateEstimateDto } from \"api\";\nimport { WithId, setNested } from \"core\";\nimport { createSelector } from \"reselect\";\n\nimport {\n ActionType,\n createAction,\n createAsyncAction,\n getType\n} from \"typesafe-actions\";\nimport {\n ActivityFormulaDto,\n ActivityTotal,\n Estimate,\n UniqueEstimateFilters,\n QuoteFolderDto\n} from \"api/GeneratedClients/insights\";\nimport { AxiosError } from \"axios\";\nimport {\n EstimateToFormulaDict,\n mapActivityTotalsBackToFormulas,\n normalizeEstimateDates\n} from \"./utils\";\nimport {\n selectors as schemaSelectors,\n SelectorState as SchemaStateSlice\n} from \"modules/schemas\";\nimport {\n selectors as viewSelectors,\n SelectorState as ViewStateSlice\n} from \"modules/views\";\nimport { selectors as projectSelectors } from \"modules/projects\";\nimport { filterField } from \"modules/schemas/filters\";\n\ninterface CustomTotal {\n expression: string;\n unit: string;\n totals: Record;\n}\ninterface EstimateWithCustomTotals extends Estimate {\n customTotals?: Record;\n}\n\ninterface EstimateEntity extends BaseEstimateEntity {\n values: EstimateWithCustomTotals;\n}\nexport interface HeavybidDivision {\n partitionId: string;\n code: string;\n description: string;\n}\nexport interface SystemBackup {\n partitionId: string;\n name: string;\n lastProcessed?: string | null;\n}\n\ninterface CodebooksActivity {\n id: string;\n code: string;\n description: string;\n units: string;\n partitionId: string;\n}\n\nexport interface UnusedActivity extends CodebooksActivity {\n level: string;\n lastUpdate?: Date;\n}\n\nexport interface MissingActivity extends CodebooksActivity {\n estimate: string;\n biditem: string;\n lastModified?: Date;\n}\nexport interface UtilizedActivityCodebookCode {\n id: string;\n code: string;\n description: string;\n level: string;\n timesModified: number;\n timesUsed: number;\n partitionId: string;\n}\nexport interface UtilizedActivityCodebookCodeDetail {\n code: string;\n modification: string;\n codebookValue: string;\n modifiedValue: string;\n biditem: string;\n estimate: string;\n lastModified?: string;\n}\n\nexport interface ModificationType {\n [key: string]: string;\n}\nexport interface ActivityCodebooksOverflowStatus {\n unusedOverflow?: boolean;\n utilizedOverflow?: boolean;\n missingOverflow?: boolean;\n}\nexport const ModificationTypes: ModificationType = {\n Units: \"Units\",\n Crew: \"Crew\",\n ProdType: \"Production Type\",\n ProdRate: \"Production Rate\",\n WorkersCompCode: \"WC\",\n ReportGroup1: \"Report Group 1\",\n ReportGroup2: \"Report Group 2\",\n ReportGroup3: \"Report Group 3\",\n ReportGroup4: \"Report Group 4\",\n ReportGroup5: \"Report Group 5\",\n ReportGroup6: \"Report Group 6\"\n};\n\nexport interface DatabasePartition {\n businessUnitCode: string;\n businessUnitId: string;\n divisionCode: string;\n divisionId: string;\n partitionId: string;\n systemId: string;\n regCode: string;\n description: string;\n}\n\nexport const STATE_KEY = \"estimates\";\n\nexport enum LoadEstimateErrorStatus {\n None,\n MissingDivToBUMapping,\n Unauthorized\n}\n\nexport interface ActivityCodebooksOverflowStatus {\n unusedOverflow?: boolean;\n utilizedOverflow?: boolean;\n missingOverflow?: boolean;\n}\n\n// Models\nexport interface State {\n allIds: string[];\n workingCopy: { [key: string]: WithId };\n original: { [key: string]: WithId };\n loading: boolean;\n loaded: boolean;\n allLoaded: boolean;\n quoteFolders: {\n [key: string]: QuoteFolderDto;\n };\n activityTotals: Record;\n quoteFoldersLoaded: boolean;\n activityTotalsLoaded: boolean;\n loadEstimateErrorStatus: LoadEstimateErrorStatus;\n hiddenUnlinkedEstimateIds: string[];\n hiddenUnlinkedEstimateIdsLoaded: boolean;\n heavybidDivisions: HeavybidDivision[];\n heavybidDivisionsLoaded: boolean;\n activityCodebookUtilized: Record;\n activityCodebookUtilizedLoaded: boolean;\n activityCodebookUtilizedDetails: UtilizedActivityCodebookCodeDetail[];\n activityCodebookUtilizedDetailsLoaded: boolean;\n activityCodebookUnused: UnusedActivity[];\n activityCodebookUnusedLoaded: boolean;\n activityCodebookMissing: MissingActivity[];\n activityCodebookMissingLoaded: boolean;\n activityCodebooksOverflowStatus: ActivityCodebooksOverflowStatus;\n lastProcessedActivityCodebooks: SystemBackup[];\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n loadEstimates: createAsyncAction(\n \"ESTIMATES/LOAD_REQUEST\",\n \"ESTIMATES/LOAD_SUCCESS\",\n \"ESTIMATES/LOAD_FAILURE\"\n )[], AxiosError>(),\n\n loadHeavybidDivisions: createAsyncAction(\n \"ESTIMATES/LOAD_HBDIVISIONS_REQUEST\",\n \"ESTIMATES/LOAD_HBDIVISIONS_SUCCESS\",\n \"ESTIMATES/LOAD_HBDIVISIONS_FAILURE\"\n )(),\n\n loadLastProcessedActivityCodebooks: createAsyncAction(\n \"ESTIMATES/LOAD_LASTPROCESSEDACTIVITYCODEBOOKS_REQUEST\",\n \"ESTIMATES/LOAD_LASTPROCESSEDACTIVITYCODEBOOKS_SUCCESS\",\n \"ESTIMATES/LOAD_LASTPROCESSEDACTIVITYCODEBOOKS_FAILURE\"\n )(),\n\n loadActivityCodebookUnused: createAsyncAction(\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUNUSED_REQUEST\",\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUNUSED_SUCCESS\",\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUNUSED_FAILURE\"\n )(),\n\n loadActivityCodebookMissing: createAsyncAction(\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKMISSING_REQUEST\",\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKMISSING_SUCCESS\",\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKMISSING_FAILURE\"\n )(),\n\n loadActivityCodebookUtilized: createAsyncAction(\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUTILIZED_REQUEST\",\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUTILIZED_SUCCESS\",\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUTILIZED_FAILURE\"\n )<\n void,\n UtilizedActivityCodebookCode[],\n { axiosError?: AxiosError; overflow?: boolean }\n >(),\n\n loadActivityCodebookUtilizedDetails: createAsyncAction(\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUTILIZEDDETAILS_REQUEST\",\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUTILIZEDDETAILS_SUCCESS\",\n \"ESTIMATES/LOAD_ACTIVITYCODEBOOKUTILIZEDDETAILS_FAILURE\"\n )<\n { partitionId: string; activityCode: string },\n UtilizedActivityCodebookCodeDetail[],\n AxiosError\n >(),\n\n loadQuoteFolders: createAsyncAction(\n \"ESTIMATES/LOAD_QUOTEFOLDERS_REQUEST\",\n \"ESTIMATES/LOAD_QUOTEFOLDERS_SUCCESS\",\n \"ESTIMATES/LOAD_QUOTEFOLDERS_FAILURE\"\n )(),\n\n loadEstimateFilters: createAsyncAction(\n \"ESTIMATES/LOAD_FILTERS_REQUEST\",\n \"ESTIMATES/LOAD_FILTERS_SUCCESS\",\n \"ESTIMATES/LOAD_FILTERS_FAILURE\"\n )(),\n\n loadUserDefinedLabels: createAsyncAction(\n \"ESTIMATES/LOAD_USERDEFINEDLABELS_REQUEST\",\n \"ESTIMATES/LOAD_USERDEFINEDLABELS_SUCCESS\",\n \"ESTIMATES/LOAD_USERDEFINEDLABELS_FAILURE\"\n ), AxiosError>(),\n\n loadActivityTotals: createAsyncAction(\n \"ESTIMATES/LOAD_TOTALS_ACTIVITY_REQUEST\",\n \"ESTIMATES/LOAD_TOTALS_ACTIVITY_SUCCESS\",\n \"ESTIMATES/LOAD_TOTALS_ACTIVITY_FAILURE\"\n )(),\n\n saveEstimate: createAsyncAction(\n \"ESTIMATES/SAVE_REQUEST\",\n \"ESTIMATES/SAVE_SUCCESS\",\n \"ESTIMATES/SAVE_FAILURE\"\n )<\n WithId> & { code: string },\n WithId,\n { id: string; error: AxiosError }\n >(),\n\n loadedAllEstimates: createAction(\"ESTIMATES/LOAD_ALL_COMPLETE\", resolve => {\n return () => resolve();\n }),\n\n updateEstimates: createAsyncAction(\n \"ESTIMATES/UPDATE_REQUEST\",\n \"ESTIMATES/UPDATE_SUCESS\",\n \"ESTIMATES/UPDATE_FAILURE\"\n )[], AxiosError>(),\n\n setLoading: createAction(\"ESTIMATES/SET_LOADING\", resolve => {\n return (loadingState: { loaded?: boolean; loading?: boolean }) =>\n resolve({ loadingState });\n }),\n\n updateHiddenEstimateIds: createAction(\n \"ESTIMATES/UPDATE_HIDDEN_ESTIMATE_IDS\",\n resolve => {\n return (ids: string[]) => resolve({ ids });\n }\n ),\n\n loadHiddenUnlinkedEstimateIds: createAsyncAction(\n \"ESTIMATES/LOAD_HIDDEN_UNLINKED_ESTIMATES_REQUEST\",\n \"ESTIMATES/LOAD_HIDDEN_UNLINKED_ESTIMATES_SUCCESS\",\n \"ESTIMATES/LOAD_HIDDEN_UNLINKED_ESTIMATES_FAILURE\"\n )(),\n\n patchHiddenUnlinkedEstimateIds: createAsyncAction(\n \"ESTIMATES/PATCH_HIDDEN_UNLINKED_ESTIMATES_REQUEST\",\n \"ESTIMATES/PATCH_HIDDEN_UNLINKED_ESTIMATES_SUCCESS\",\n \"ESTIMATES/PATCH_HIDDEN_UNLINKED_ESTIMATES_FAILURE\"\n )<{ ids: string[]; action?: string }, string[], AxiosError>()\n};\n\nexport type EstimatesActions = ActionType;\n\nconst initialState: State = {\n allIds: [],\n workingCopy: {},\n original: {},\n loading: false,\n loaded: false,\n allLoaded: false,\n quoteFolders: {},\n activityTotals: {},\n quoteFoldersLoaded: false,\n activityTotalsLoaded: false,\n loadEstimateErrorStatus: LoadEstimateErrorStatus.None,\n hiddenUnlinkedEstimateIds: [],\n hiddenUnlinkedEstimateIdsLoaded: false,\n heavybidDivisions: [],\n heavybidDivisionsLoaded: false,\n activityCodebookUnused: [],\n activityCodebookUnusedLoaded: false,\n activityCodebookUtilized: {},\n activityCodebookUtilizedLoaded: false,\n activityCodebookUtilizedDetails: [],\n activityCodebookUtilizedDetailsLoaded: false,\n activityCodebookMissing: [],\n activityCodebookMissingLoaded: false,\n activityCodebooksOverflowStatus: {},\n lastProcessedActivityCodebooks: []\n};\n\n// Reducer\nexport const reducer = (state = initialState, action: EstimatesActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.loadEstimates.request): {\n draft.loaded = false;\n draft.loading = true;\n draft.allLoaded = false;\n break;\n }\n case getType(actions.loadEstimates.success): {\n action.payload.forEach(estimate => {\n const normalizedEstimate = normalizeEstimateDates(estimate);\n if (!(normalizedEstimate.id in draft.original)) {\n draft.allIds.push(normalizedEstimate.id);\n }\n draft.workingCopy[normalizedEstimate.id] = normalizedEstimate;\n draft.original[normalizedEstimate.id] = normalizedEstimate;\n });\n draft.loaded = true;\n break;\n }\n case getType(actions.loadEstimates.failure): {\n draft.loading = false;\n draft.loaded = false;\n draft.allLoaded = true;\n if (action.payload.response?.status === 403) {\n draft.loaded = true;\n draft.loadEstimateErrorStatus = LoadEstimateErrorStatus.Unauthorized;\n }\n if (action.payload.response?.status === 404) {\n draft.loaded = true;\n draft.loadEstimateErrorStatus =\n LoadEstimateErrorStatus.MissingDivToBUMapping;\n }\n break;\n }\n case getType(actions.loadHeavybidDivisions.request): {\n draft.heavybidDivisionsLoaded = false;\n break;\n }\n case getType(actions.loadHeavybidDivisions.success): {\n draft.heavybidDivisions = [];\n action.payload\n .sort((p1, p2) =>\n p1.divisionCode\n .toLowerCase()\n .localeCompare(p2.divisionCode.toLowerCase())\n )\n .forEach(p =>\n draft.heavybidDivisions.push({\n partitionId: p.partitionId,\n code: p.divisionCode,\n description: p.description ?? p.divisionCode\n })\n );\n draft.heavybidDivisionsLoaded = true;\n break;\n }\n case getType(actions.loadLastProcessedActivityCodebooks.request): {\n draft.lastProcessedActivityCodebooks = [];\n break;\n }\n case getType(actions.loadLastProcessedActivityCodebooks.success): {\n draft.lastProcessedActivityCodebooks = [];\n draft.lastProcessedActivityCodebooks = action.payload;\n break;\n }\n case getType(actions.loadActivityCodebookUnused.request): {\n draft.activityCodebookUnusedLoaded = false;\n draft.activityCodebookUnused = [];\n break;\n }\n case getType(actions.loadActivityCodebookUnused.success): {\n draft.activityCodebookUnused = draft.activityCodebookUnused.concat(\n action.payload\n );\n draft.activityCodebookUnusedLoaded = true;\n break;\n }\n case getType(actions.loadActivityCodebookUnused.failure): {\n draft.activityCodebookUnusedLoaded = true;\n if (action.payload.overflow) {\n draft.activityCodebooksOverflowStatus.unusedOverflow = true;\n }\n break;\n }\n case getType(actions.loadActivityCodebookMissing.request): {\n draft.activityCodebookMissingLoaded = false;\n draft.activityCodebookMissing = [];\n break;\n }\n case getType(actions.loadActivityCodebookMissing.success): {\n draft.activityCodebookMissing = draft.activityCodebookMissing.concat(\n action.payload\n );\n draft.activityCodebookMissingLoaded = true;\n break;\n }\n case getType(actions.loadActivityCodebookMissing.failure): {\n draft.activityCodebookMissingLoaded = true;\n if (action.payload.overflow) {\n draft.activityCodebooksOverflowStatus.missingOverflow = true;\n }\n break;\n }\n case getType(actions.loadActivityCodebookUtilized.request): {\n draft.activityCodebookUtilizedLoaded = false;\n draft.activityCodebookUtilized = {};\n break;\n }\n case getType(actions.loadActivityCodebookUtilized.success): {\n action.payload.forEach(\n code => (draft.activityCodebookUtilized[code.id] = code)\n );\n draft.activityCodebookUtilizedLoaded = true;\n break;\n }\n case getType(actions.loadActivityCodebookUtilized.failure): {\n draft.activityCodebookUtilizedLoaded = true;\n if (action.payload.overflow) {\n draft.activityCodebooksOverflowStatus.utilizedOverflow = true;\n }\n break;\n }\n case getType(actions.loadActivityCodebookUtilizedDetails.request): {\n draft.activityCodebookUtilizedDetails = [];\n draft.activityCodebookUtilizedDetailsLoaded = false;\n break;\n }\n case getType(actions.loadActivityCodebookUtilizedDetails.success): {\n action.payload.forEach(activity => {\n activity.modification = ModificationTypes[activity.modification];\n draft.activityCodebookUtilizedDetails.push(activity);\n });\n draft.activityCodebookUtilizedDetailsLoaded = true;\n break;\n }\n case getType(actions.loadActivityCodebookUtilizedDetails.failure): {\n draft.activityCodebookUtilizedDetailsLoaded = true;\n break;\n }\n case getType(actions.loadedAllEstimates): {\n draft.allLoaded = true;\n break;\n }\n case getType(actions.loadQuoteFolders.success): {\n action.payload.forEach(qf => {\n draft.quoteFolders[qf.id] = qf;\n });\n draft.quoteFoldersLoaded = true;\n break;\n }\n case getType(actions.saveEstimate.request): {\n const id = action.payload.id;\n if (id) {\n setNested(action.payload, draft.workingCopy[id]);\n }\n break;\n }\n case getType(actions.saveEstimate.success): {\n draft.workingCopy[action.payload.id] = action.payload;\n draft.original[action.payload.id] = action.payload;\n const currentIndex = draft.allIds.indexOf(action.payload.id);\n if (currentIndex === -1) {\n draft.allIds.push(action.payload.id);\n }\n break;\n }\n case getType(actions.saveEstimate.failure): {\n if (action.payload.id) {\n draft.workingCopy[action.payload.id] =\n draft.original[action.payload.id];\n }\n break;\n }\n case getType(actions.loadActivityTotals.request): {\n draft.activityTotalsLoaded = false;\n break;\n }\n case getType(actions.loadActivityTotals.success): {\n const [activityTotals, formulas] = action.payload;\n const dict = mapActivityTotalsBackToFormulas(activityTotals, formulas);\n Object.values(draft.workingCopy).forEach(est => {\n est.values.customTotals = dict?.[est.id];\n });\n Object.values(draft.original).forEach(est => {\n est.values.customTotals = dict?.[est.id];\n });\n draft.activityTotalsLoaded = true;\n break;\n }\n case getType(actions.updateEstimates.success): {\n const estimates = action.payload;\n estimates.forEach(estimate => {\n const currentIndex = draft.allIds.indexOf(estimate.id);\n\n if (estimate.values.isDeleted) {\n if (currentIndex > -1) {\n draft.allIds.splice(currentIndex, 1);\n }\n if (estimate.id in draft.workingCopy) {\n delete draft.workingCopy[estimate.id];\n }\n if (estimate.id in draft.original) {\n delete draft.original[estimate.id];\n }\n } else {\n estimate = normalizeEstimateDates(estimate);\n draft.workingCopy[estimate.id] = estimate;\n draft.original[estimate.id] = estimate;\n if (currentIndex === -1) {\n draft.allIds.push(estimate.id);\n }\n }\n });\n draft.allIds = map(draft.workingCopy, p => p.id);\n break;\n }\n\n case getType(actions.loadHiddenUnlinkedEstimateIds.success): {\n const ids = action.payload;\n draft.hiddenUnlinkedEstimateIds = ids;\n draft.hiddenUnlinkedEstimateIdsLoaded = true;\n break;\n }\n\n case getType(actions.loadHiddenUnlinkedEstimateIds.failure): {\n draft.loading = false;\n draft.loaded = false;\n draft.hiddenUnlinkedEstimateIdsLoaded = false;\n break;\n }\n\n case getType(actions.patchHiddenUnlinkedEstimateIds.success): {\n const ids = action.payload;\n draft.hiddenUnlinkedEstimateIds = ids;\n break;\n }\n\n case getType(actions.patchHiddenUnlinkedEstimateIds.failure): {\n draft.loading = false;\n draft.loaded = false;\n break;\n }\n\n case getType(actions.updateHiddenEstimateIds): {\n draft.hiddenUnlinkedEstimateIds = action.payload.ids;\n break;\n }\n\n case getType(actions.setLoading): {\n const newLoadingState = action.payload.loadingState;\n if (newLoadingState.loaded !== undefined) {\n draft.loaded = newLoadingState.loaded;\n }\n if (newLoadingState.loading !== undefined) {\n draft.loading = newLoadingState.loading;\n }\n }\n }\n });\n};\n\nexport type SelectorState = StateSlice & ViewStateSlice & SchemaStateSlice;\n\nconst getLoaded = ({ estimates }: SelectorState) => estimates.loaded;\nconst getLoading = ({ estimates }: SelectorState) => estimates.loading;\nconst getAllLoaded = ({ estimates }: SelectorState) => estimates.allLoaded;\nconst getQuoteFoldersLoaded = ({ estimates }: SelectorState) =>\n estimates.quoteFoldersLoaded;\nconst getIds = ({ estimates }: SelectorState) => estimates.allIds;\nconst getWorkingCopy = ({ estimates }: SelectorState) => estimates.workingCopy;\nconst getQuoteFolders = ({ estimates }: SelectorState) =>\n estimates.quoteFolders;\nconst getLoadEstimateErrorStatus = ({ estimates }: SelectorState) =>\n estimates.loadEstimateErrorStatus;\nconst getHiddenUnlinkedEstimateIds = ({ estimates }: SelectorState) =>\n estimates.hiddenUnlinkedEstimateIds;\nconst getHiddenUnlinkedEstimateIdsLoaded = ({ estimates }: SelectorState) =>\n estimates.hiddenUnlinkedEstimateIdsLoaded;\nconst getHeavybidDivisionsLoaded = ({ estimates }: SelectorState) =>\n estimates.heavybidDivisionsLoaded;\nconst getHeavybidDivisions = ({ estimates }: SelectorState) =>\n estimates.heavybidDivisions;\nconst getLastProcessedActivityCodebooks = ({ estimates }: SelectorState) =>\n estimates.lastProcessedActivityCodebooks;\nconst getAllEstimates = createSelector(\n [getIds, getWorkingCopy],\n (ids, estimates) => {\n return ids.map(id => estimates[id]);\n }\n);\nconst getActivityCodebooksOverflowStatus = ({ estimates }: SelectorState) =>\n estimates.activityCodebooksOverflowStatus;\nconst getActivityCodebookUnusedLoaded = ({ estimates }: SelectorState) =>\n estimates.activityCodebookUnusedLoaded;\nconst getActivityCodebookUnused = ({ estimates }: SelectorState) =>\n estimates.activityCodebookUnused;\nconst getActivityCodebookMissingLoaded = ({ estimates }: SelectorState) =>\n estimates.activityCodebookMissingLoaded;\nconst getActivityCodebookMissing = ({ estimates }: SelectorState) =>\n estimates.activityCodebookMissing;\n\nconst getActivityCodebookUtilizedLoaded = ({ estimates }: SelectorState) =>\n estimates.activityCodebookUtilizedLoaded;\n\nconst getActivityCodebookUtilized = ({ estimates }: SelectorState) =>\n estimates.activityCodebookUtilized;\n\nconst getActivityCodebookUtilizedDetailsLoaded = ({\n estimates\n}: SelectorState) => estimates.activityCodebookUtilizedDetailsLoaded;\n\nconst getActivityCodebookUtilizedDetails = ({ estimates }: SelectorState) =>\n estimates.activityCodebookUtilizedDetails;\n\nconst getUnlinkedEstimates = createSelector(\n [getAllEstimates, projectSelectors.getLinkedEstimates],\n (estimates, linkedEstimates) => {\n return estimates.filter(e => !linkedEstimates.has(e.id));\n }\n);\n\nconst getUnlinkedAndUnhiddenEstimatesCount = createSelector(\n [\n getUnlinkedEstimates,\n getHiddenUnlinkedEstimateIds,\n getHiddenUnlinkedEstimateIdsLoaded\n ],\n (estimates, hiddenIds, hiddenIdsLoaded) => {\n if (!hiddenIdsLoaded) {\n return 0;\n }\n\n return estimates.filter(e => !hiddenIds.includes(e.id)).length;\n }\n);\n\nconst getActiveEstimates = createSelector([getAllEstimates], estimates => {\n return estimates.filter(estimate => estimate.values.isActiveEstimate);\n});\n\nconst getActiveEstimatesTrim = createSelector(\n [getActiveEstimates],\n estimates => {\n return estimates.map(estimate => estimate.values);\n }\n);\n\nconst getActiveEstimatesWithoutExcluded = createSelector(\n [getActiveEstimates],\n estimates => {\n return estimates.filter(estimate => !estimate.values.isExcludedEstimate);\n }\n);\n\nconst getArchivedEstimates = createSelector([getAllEstimates], estimates => {\n return estimates.filter(estimate => !estimate.values.isActiveEstimate);\n});\n\nconst getArchivedEstimatesWithoutExcluded = createSelector(\n [getArchivedEstimates],\n estimates => {\n return estimates.filter(estimate => !estimate.values.isExcludedEstimate);\n }\n);\n\nconst getActiveEstimateLocations = createSelector(\n [getActiveEstimatesWithoutExcluded],\n estimates => {\n const estimatesWithLocations = estimates\n .filter(\n estimate =>\n estimate.values.filters?.latitude &&\n estimate.values.filters?.longitude\n )\n .slice(0, 50);\n return estimatesWithLocations;\n }\n);\n\nconst getEstimateFieldsLookup = createSelector(\n [schemaSelectors.getCompleteEstimatesExtendedSchema],\n schema => {\n if (schema) {\n return schema.fields;\n }\n return {};\n }\n);\n\nconst getCurrentEstimateViewFiltersLookup = createSelector(\n [viewSelectors.getCurrentEstimateView],\n view => {\n return view?.filters ?? [];\n }\n);\n\nconst getCurrentEditArchivedEstimateFiltersLookup = createSelector(\n [viewSelectors.getCurrentEditArchivedEstimateView],\n view => {\n return view?.filters ?? [];\n }\n);\n\nconst getCurrentEstimateViewFiltersList = createSelector(\n [getCurrentEstimateViewFiltersLookup, getEstimateFieldsLookup],\n (filters, fields) => {\n return values(filters)\n .filter(filter => filter.columnName in fields && filter.value !== null)\n .map(filter => ({\n ...filter,\n fieldType: fields[filter.columnName].type\n }));\n }\n);\n\nconst getCurrentEditArchivedEstimateViewFiltersList = createSelector(\n [getCurrentEditArchivedEstimateFiltersLookup, getEstimateFieldsLookup],\n (filters, fields) => {\n return values(filters)\n .filter(filter => filter.columnName in fields && filter.value !== null)\n .map(filter => ({\n ...filter,\n fieldType: fields[filter.columnName].type\n }));\n }\n);\n\nconst getFilteredEstimates = createSelector(\n [getAllEstimates, getCurrentEstimateViewFiltersList, getEstimateFieldsLookup],\n (estimates, filters, fields) => {\n if (estimates && filters) {\n return estimates.filter(estimate => {\n // tslint:disable-next-line: prefer-for-of\n for (let i = 0; i < filters.length; i++) {\n const filter = filters[i];\n const field = fields[filter.columnName];\n const value = get(estimate, filter.columnName);\n\n if (!filterField(field.type, filter, value)) {\n return false;\n }\n }\n return true;\n });\n }\n\n return [];\n }\n);\n\nconst getFilteredEditArchivedEstimates = createSelector(\n [\n getAllEstimates,\n getCurrentEditArchivedEstimateViewFiltersList,\n getEstimateFieldsLookup\n ],\n (estimates, filters, fields) => {\n if (estimates && filters) {\n return estimates.filter(estimate => {\n if (estimate.values.isActiveEstimate) return false;\n // tslint:disable-next-line: prefer-for-of\n for (let i = 0; i < filters.length; i++) {\n const filter = filters[i];\n const field = fields[filter.columnName];\n const value = get(estimate, filter.columnName);\n\n if (!filterField(field.type, filter, value)) {\n return false;\n }\n }\n return true;\n });\n }\n\n return [];\n }\n);\n\nexport const selectors = {\n getLoaded,\n getLoading,\n getAllLoaded,\n getQuoteFoldersLoaded,\n getHiddenUnlinkedEstimateIds,\n getAllEstimates,\n getActiveEstimates,\n getActiveEstimatesTrim,\n getActiveEstimatesWithoutExcluded,\n getArchivedEstimates,\n getFilteredEditArchivedEstimates,\n getArchivedEstimatesWithoutExcluded,\n getWorkingCopy,\n getActiveEstimateLocations,\n getQuoteFolders,\n getLoadEstimateErrorStatus,\n getIds,\n getFilteredEstimates,\n getUnlinkedEstimates,\n getUnlinkedAndUnhiddenEstimatesCount,\n getHeavybidDivisionsLoaded,\n getHeavybidDivisions,\n getActivityCodebooksOverflowStatus,\n getActivityCodebookUnused,\n getActivityCodebookUnusedLoaded,\n getActivityCodebookMissing,\n getActivityCodebookMissingLoaded,\n getActivityCodebookUtilized,\n getActivityCodebookUtilizedLoaded,\n getActivityCodebookUtilizedDetails,\n getActivityCodebookUtilizedDetailsLoaded,\n getLastProcessedActivityCodebooks\n};\n","import React, { FC, ReactChild } from \"react\";\nimport styled from \"styled-components\";\nimport { Button, ConcreteColors, Icon } from \"hcss-components\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport {\n SizeProp,\n IconName,\n IconProp\n} from \"@fortawesome/fontawesome-svg-core\";\n\nexport interface NoDataPlaceholderProps {\n onClick?: () => void;\n isAddEditDisplay?: boolean;\n mainIconName?: IconName;\n mainIconSize?: SizeProp;\n iconName?: string;\n helpText?: { title?: ReactChild; body?: ReactChild };\n buttonText: string;\n isReadOnly?: boolean;\n showButton?: boolean;\n buttonDataTestId?: string;\n}\n\nexport const NoDataPlaceholder: FC = ({\n onClick,\n isAddEditDisplay,\n mainIconName,\n mainIconSize,\n iconName,\n helpText,\n buttonText,\n isReadOnly,\n showButton = true,\n buttonDataTestId = \"Button\"\n}: NoDataPlaceholderProps) => {\n return (\n \n
\n {mainIconName && (\n \n )}\n
\n {!isReadOnly && helpText && (\n <>\n
{helpText.title}
\n
{helpText.body}
\n {showButton &&
}\n \n )}\n\n {showButton && (\n
\n \n {!isReadOnly && }\n {buttonText}\n \n
\n )}\n \n );\n};\n\nconst defaultIconStyle = {\n \"--fa-primary-color\": ConcreteColors.green200,\n \"--fa-secondary-color\": \"#7070708c\"\n} as React.CSSProperties;\n\nconst Container = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding-bottom: 10px;\n\n .icon {\n color: ${ConcreteColors.blue400};\n }\n\n div.title {\n display: flex;\n flex-direction: row;\n justify-content: center;\n font-size: 18px;\n font-weight: 700;\n color: ${ConcreteColors.gray700};\n margin-top: 25px;\n margin-bottom: 10px;\n }\n\n div.body {\n display: flex;\n flex-direction: row;\n justify-content: center;\n text-align: center;\n max-width: 550px;\n margin-top: 20px;\n color: ${ConcreteColors.gray600};\n }\n\n div.divider {\n width: 80%;\n border-top-width: 1px;\n border-top-color: ${ConcreteColors.gray300};\n border-top-style: solid;\n margin-top: 25px;\n }\n\n div.action {\n flex-direction: row;\n justify-content: center;\n text-align: center;\n width: 550px;\n margin-top: 25px;\n }\n`;\n","// tslint:disable:max-classes-per-file\n\nimport React from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\n\ninterface LoadingSpinnerProps {\n size: \"large\" | \"medium\" | \"small\";\n}\nexport class LoadingSpinner extends React.PureComponent<\n LoadingSpinnerProps,\n any\n> {\n renderSpinnerClass = (): string => {\n switch (this.props.size) {\n case \"large\":\n return \"spinner-large-above\";\n case \"medium\":\n return \"spinner-medium-inline\";\n case \"small\":\n return \"spinner-small-inline\";\n default:\n return \"spinner-medium-inline\";\n }\n };\n\n render() {\n return (\n \n );\n }\n}\n\nexport interface LoadingOverlayProps {\n message?: string;\n}\n\nexport class PageLoadingOverlay extends React.PureComponent<\n LoadingOverlayProps,\n any\n> {\n render() {\n return (\n \n
\n \n
\n {this.props.message || strings.core.loaders.loading}\n
\n
\n
\n );\n }\n}\n\nexport class ContentLoadingOverlay extends React.PureComponent<\n LoadingOverlayProps & { hideMessage?: boolean },\n any\n> {\n render() {\n return (\n \n
\n \n {!this.props.hideMessage && (\n
\n {this.props.message || strings.core.loaders.loading}\n
\n )}\n
\n
\n );\n }\n}\nexport class SectionLoadingOverlay extends React.PureComponent<\n LoadingOverlayProps & { hideMessage?: boolean; height: number },\n any\n> {\n render() {\n return (\n \n
\n \n {!this.props.hideMessage && (\n
\n {this.props.message || strings.core.loaders.loading}\n
\n )}\n
\n \n );\n }\n}\n\nexport class PanelLoadingOverlay extends React.PureComponent<\n LoadingOverlayProps,\n any\n> {\n render() {\n return (\n \n
\n \n
\n {this.props.message || strings.core.loaders.loading}\n
\n
\n
\n );\n }\n}\n\nexport class DialogLoadingOverlay extends React.PureComponent<\n LoadingOverlayProps,\n any\n> {\n render() {\n return (\n \n
\n \n
\n {this.props.message || strings.core.loaders.updating}\n
\n
\n
\n );\n }\n}\n\nexport class ListLoadingOverlay extends React.PureComponent<\n LoadingOverlayProps,\n any\n> {\n render() {\n return (\n \n
\n \n
\n {this.props.message || strings.core.loaders.loading}\n
\n
\n
\n );\n }\n}\n\nexport class TableLoadingOverlay extends React.PureComponent<\n LoadingOverlayProps,\n any\n> {\n render() {\n return (\n \n
\n \n
\n {this.props.message || strings.core.loaders.loading}\n
\n
\n
\n );\n }\n}\n\nexport interface TableInnerLoadingOverlayProps extends LoadingOverlayProps {\n noFooterPanel?: boolean;\n}\nexport class TableInnerLoadingOverlay extends React.PureComponent<\n TableInnerLoadingOverlayProps,\n any\n> {\n render() {\n return (\n \n
\n \n
\n {this.props.message || strings.core.loaders.loading}\n
\n
\n \n );\n }\n}\n\nexport const BaseLoadingOverlayContainer = styled.div`\n display: flex;\n top: 0px;\n left: 0px;\n width: 100%;\n height: 100%;\n background: #ffffff;\n text-align: center;\n\n & > .loading-message {\n margin: auto;\n color: #404040;\n }\n`;\n\nconst ContentLoadingOverlayContainer = styled(BaseLoadingOverlayContainer)`\n position: absolute;\n opacity: 0.98;\n z-index: 10;\n\n & > .loading-message > .loading-message-text {\n display: inline-block;\n margin: 0 0 0 16px;\n font-size: 16px;\n vertical-align: middle;\n }\n`;\n\nconst SectionLoadingOverlayContainer = styled(BaseLoadingOverlayContainer)`\n position: relative;\n opacity: 0.98;\n z-index: 10;\n\n & > .loading-message > .loading-message-text {\n display: inline-block;\n margin: 0 0 0 16px;\n font-size: 16px;\n vertical-align: middle;\n }\n`;\n\nconst PageLoadingOverlayContainer = styled(BaseLoadingOverlayContainer)`\n position: absolute;\n background: #f6f6f6;\n opacity: 1;\n z-index: 15;\n\n & > .loading-message > .loading-message-text {\n margin: -40px 0 0 6px;\n font-size: 18px;\n }\n`;\n\nconst PanelLoadingOverlayContainer = styled(ContentLoadingOverlayContainer)`\n & > .loading-message {\n margin: 80px auto;\n }\n`;\n\nconst DialogLoadingOverlayContainer = styled(ContentLoadingOverlayContainer)`\n border-radius: 6px;\n\n & > .loading-message > .loading-message-text {\n font-size: 16px;\n }\n`;\n\nconst ListLoadingOverlayContainer = styled(ContentLoadingOverlayContainer)`\n position: relative;\n height: auto;\n text-align: left;\n opacity: 1;\n\n & > .loading-message {\n margin: 0 0 4px 12px;\n\n & > .loading-message-text {\n font-size: 13px;\n margin: 5px 0 0 24px;\n vertical-align: text-top;\n }\n }\n`;\n\nconst TableLoadingOverlayContainer = styled(ContentLoadingOverlayContainer)`\n /* This loader covers the entire table, including the header and footer panels */\n opacity: 1;\n border-radius: 4px;\n box-shadow: 0 0 0 1px #ffffff;\n`;\n\nconst TableInnerLoadingOverlayContainer = styled(\n ContentLoadingOverlayContainer\n)`\n /* This loader covers only the data rows, leaving the header and footer panels visible */\n opacity: 1;\n top: 87.5px;\n left: auto;\n border: 1px solid #dddddd;\n width: 100%;\n\n &[data-no-footer-panel=\"false\"] {\n height: calc(100% - 88px);\n border-radius: 0;\n }\n\n &[data-no-footer-panel=\"true\"] {\n height: calc(100% - 93.5px);\n border-radius: 0 0 3px 3px;\n }\n\n & > .loading-message > .loading-message-text {\n margin: 3px 0 0 24px;\n font-size: 15px;\n vertical-align: text-top;\n }\n`;\n\nconst StyledLoadingSpinner = styled.div`\n &.spinner-large-above {\n position: relative;\n border-radius: 50%;\n width: 200px;\n height: 200px;\n margin: 60px auto;\n margin-top: -40px;\n font-size: 10px;\n text-indent: -9999em;\n border-top: 3px solid #cccccc;\n border-right: 3px solid #cccccc;\n border-bottom: 3px solid #cccccc;\n border-left: 3px solid #1e1e1e;\n transform: translateZ(0);\n animation: rollSpinner 1.1s infinite linear;\n\n &:after {\n border-radius: 50%;\n }\n }\n\n &.spinner-medium-inline {\n display: inline-block;\n position: relative;\n border-radius: 50%;\n width: 32px;\n height: 32px;\n font-size: 10px;\n vertical-align: middle;\n text-indent: -9999em;\n border-top: 3px solid #cccccc;\n border-right: 3px solid #cccccc;\n border-bottom: 3px solid #cccccc;\n border-left: 3px solid #1e1e1e;\n transform: translateZ(0);\n animation: rollSpinner 1.1s infinite linear;\n\n &:after {\n border-radius: 50%;\n }\n }\n\n &.spinner-small-inline {\n display: inline-block;\n position: relative;\n width: 3em;\n height: 3em;\n color: #1e1e1e;\n font-size: 3px;\n text-indent: -9999em;\n animation: threeDotSpinner 1.1s infinite ease-in-out;\n animation-delay: -0.16s;\n animation-fill-mode: both;\n vertical-align: top;\n transform: translateZ(0);\n\n &:before,\n &:after {\n content: \"\";\n position: absolute;\n top: 0;\n width: 3em;\n height: 3em;\n animation: threeDotSpinner 1.4s infinite ease-in-out;\n animation-fill-mode: both;\n }\n &:before {\n left: -12px;\n animation-delay: -0.32s;\n }\n &:after {\n left: 12px;\n }\n }\n\n @keyframes rollSpinner {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n }\n\n @keyframes threeDotSpinner {\n 0%,\n 20%,\n 80%,\n 100% {\n box-shadow: 0 4em 0 -0.95em #ececec;\n }\n 50% {\n box-shadow: 0 4em 0 -0.2em #aaaaaa;\n }\n }\n`;\n","import { notify } from \"hcss-components\";\n\nexport const copyToClipboard = (text: string) => {\n void navigator.clipboard.writeText(text);\n notify(\"success\", \"Copied to clipboard\");\n};\n\nexport const copyTableToClipBoard = (tableId: string) => {\n const range = document.createRange();\n const selection = window.getSelection();\n const tableNode = document.getElementById(tableId);\n\n if (tableNode) {\n range.selectNodeContents(tableNode);\n }\n\n if (selection) {\n selection.removeAllRanges();\n selection.addRange(range);\n document.execCommand(\"copy\");\n selection.removeAllRanges();\n notify(\"success\", \"Copied to clipboard\");\n }\n};\n","import produce from \"immer\";\nimport { ActionType, createAsyncAction, getType } from \"typesafe-actions\";\nimport {\n IProfileDto,\n IMinorityTypeDto,\n IUpdateProfileDto\n} from \"api/GeneratedClients/ContactsClient\";\n\nexport const STATE_KEY = \"profile\";\n\n// Models\nexport interface State {\n profile?: IProfileDto;\n minorityTypes?: IMinorityTypeDto[];\n loading: {\n profile: boolean;\n types: boolean;\n logo: boolean;\n };\n errors: string[];\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n loadProfile: createAsyncAction(\n \"PROFILE/LOAD_REQUEST\",\n \"PROFILE/LOAD_SUCCESS\",\n \"PROFILE/LOAD_FAILURE\"\n )(),\n updateProfile: createAsyncAction(\n \"PROFILE/UPDATE_REQUEST\",\n \"PROFILE/UPDATE_SUCCESS\",\n \"PROFILE/UPDATE_FAILURE\"\n )(),\n addLogo: createAsyncAction(\n \"PROFILE/ADD_LOGO_REQUEST\",\n \"PROFILE/ADD_LOGO_SUCCESS\",\n \"PROFILE/ADD_LOGO_FAILURE\"\n )()\n};\n\nexport type ProfileActions = ActionType;\n\nconst initialState: State = {\n loading: {\n profile: false,\n types: false,\n logo: false\n },\n errors: []\n};\n\n// Reducer\nexport const reducer = (state = initialState, action: ProfileActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.loadProfile.request): {\n draft.loading.profile = true;\n break;\n }\n case getType(actions.loadProfile.success): {\n draft.loading.profile = false;\n draft.profile = action.payload;\n break;\n }\n case getType(actions.loadProfile.failure): {\n draft.loading.profile = false;\n draft.errors.push(`Error loading profile: ${action.payload.message}`);\n break;\n }\n case getType(actions.updateProfile.request): {\n draft.loading.profile = true;\n break;\n }\n case getType(actions.updateProfile.success): {\n draft.loading.profile = false;\n draft.profile = { ...draft.profile, ...action.payload };\n break;\n }\n case getType(actions.updateProfile.failure): {\n draft.loading.profile = false;\n break;\n }\n case getType(actions.addLogo.request): {\n draft.loading.logo = true;\n break;\n }\n case getType(actions.addLogo.success): {\n if (draft.profile) {\n draft.profile.profileLogoUrl = action.payload;\n }\n draft.loading.logo = false;\n break;\n }\n case getType(actions.addLogo.failure): {\n draft.loading.logo = false;\n break;\n }\n }\n });\n};\n\nexport type SelectorState = StateSlice;\n\n// Selectors\nconst getProfile = ({ profile }: SelectorState) => profile.profile;\nconst getLoading = ({ profile }: SelectorState) => profile.loading;\nconst getErrors = ({ profile }: SelectorState) => profile.errors;\n\nexport const selectors = {\n getProfile,\n getLoading,\n getErrors\n};\n","import { CurrentUser } from \"core\";\nimport {\n ICreateProfileDto,\n CreateProfileDto,\n IAddress,\n Address,\n CommunicationMethod\n} from \"api/GeneratedClients/ContactsClient\";\n\nexport class ProfileService {\n initializeAddress = () => {\n const address: IAddress = {\n addressLine1: \"\",\n addressLine2: \"\",\n building: \"\",\n city: \"\",\n stateProvince: \"\",\n countryRegion: \"\",\n postalCode: \"\"\n };\n return new Address(address);\n };\n\n createProfileFromCompanyInfo = (currentUser: CurrentUser) => {\n const tempProfile: ICreateProfileDto = {\n name: currentUser.companyName,\n primaryAddress: this.initializeAddress(),\n alternateAddress: this.initializeAddress(),\n phoneNumber: \"\",\n faxNumber: \"\",\n webAddress: \"\",\n communicationMethod: CommunicationMethod.None,\n profileAccentColor: \"\"\n };\n\n const profile = new CreateProfileDto({ ...tempProfile });\n\n return profile;\n };\n}\n","import { call, put, takeLatest, select } from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport { actions } from \"./state\";\nimport { StateSlice as AccountStateSlice } from \"modules/account\";\nimport ContactsApi from \"api/ContactsApi\";\nimport { CurrentUser, UserType } from \"core\";\nimport axios, { AxiosError } from \"axios\";\nimport { Address, UpdateProfileDto } from \"api/GeneratedClients/ContactsClient\";\nimport { ProfileService } from \"./services/profile-service\";\nimport config from \"config\";\nimport { notify } from \"hcss-components\";\nimport { strings } from \"localization\";\n\nfunction* createProfile() {\n const user: CurrentUser = yield select(\n (state: AccountStateSlice) => state.account.user\n );\n const accessToken = yield select(\n (state: AccountStateSlice) => state.account.user?.idsrvAccessToken\n );\n let resp;\n if (user && user.idsrvAccessToken) {\n const svc = new ProfileService();\n const newProfile = svc.createProfileFromCompanyInfo(user);\n try {\n const url = `${config.endpoints.CONTACTS}/api/v1/profiles`;\n const opts = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"X-Requested-Business-Unit-Id\": user.selectedBusinessUnitId\n }\n };\n resp = yield call(axios.post, url, newProfile, opts);\n\n //CreateProfileDto does not contain subtypes (minority statuses), so we must manually initialize these\n yield put(\n actions.loadProfile.success({\n ...newProfile,\n resp,\n minorityStatuses: [],\n products: [],\n contacts: []\n })\n );\n } catch (error) {\n console.error(error);\n yield put(\n actions.loadProfile.success({\n ...newProfile,\n resp,\n minorityStatuses: [],\n products: [],\n contacts: []\n })\n );\n }\n }\n}\n\nfunction* loadProfile(action: ActionType) {\n try {\n const user: CurrentUser = yield select(\n (state: AccountStateSlice) => state.account.user\n );\n if (user?.idsrvAccessToken && user?.type !== UserType.Guest) {\n const api = new ContactsApi(\n user.idsrvAccessToken,\n user.selectedBusinessUnitId\n );\n const res = yield call([api, api.getMyProfile]);\n yield put(actions.loadProfile.success({ ...res }));\n }\n } catch (error) {\n if (\"response\" in error && \"status\" in error.response) {\n const exception = error as AxiosError;\n // if this profile doesn't exist, then create a new one\n // based on company name only\n if (exception.response?.status === 404) yield call(createProfile);\n else {\n console.error(error);\n yield put(actions.loadProfile.failure(error));\n }\n }\n }\n}\n\nfunction* updateProfile(\n action: ActionType\n) {\n try {\n const user: CurrentUser = yield select(\n (state: AccountStateSlice) => state.account.user\n );\n const accessToken = yield select(\n (state: AccountStateSlice) => state.account.user?.idsrvAccessToken\n );\n\n const primaryAddress = new Address({ ...action.payload.primaryAddress });\n const alternateAddress = new Address({\n ...action.payload.alternateAddress\n });\n const update = new UpdateProfileDto({\n ...action.payload,\n primaryAddress,\n alternateAddress\n });\n const url = `${config.endpoints.CONTACTS}/api/v1/profiles`;\n const opts = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"X-Requested-Business-Unit-Id\": user.selectedBusinessUnitId\n }\n };\n yield call(axios.put, url, update, opts);\n yield put(actions.updateProfile.success({ ...update }));\n notify(\"success\", strings.profile.mainDetails.updated);\n } catch (error) {\n yield put(actions.updateProfile.failure(error));\n notify(\"danger\", strings.profile.mainDetails.errorUpdated);\n console.error(error);\n }\n}\n\nfunction* addLogo(action: ActionType) {\n try {\n const user: CurrentUser = yield select(\n (state: AccountStateSlice) => state.account.user\n );\n const accessToken = yield select(\n (state: AccountStateSlice) => state.account.user?.idsrvAccessToken\n );\n const url = `${config.endpoints.CONTACTS}/api/v1/profiles/logo`;\n const opts = {\n headers: {\n Authorization: `Bearer ${accessToken}`,\n \"X-Requested-Business-Unit-Id\": user.selectedBusinessUnitId\n }\n };\n const response = yield call(axios.post, url, action.payload, opts);\n\n if (response.status === 200) {\n const profileLogoUrl = response.data;\n yield put(actions.addLogo.success(profileLogoUrl));\n notify(\"success\", strings.profile.logo.updated);\n }\n } catch (error) {\n yield put(actions.addLogo.failure(error));\n if (\"response\" in error && \"status\" in error.response) {\n const exception = error as AxiosError;\n if (exception.response?.status === 413) {\n notify(\n \"danger\",\n strings.profile.logo.errorUpdated,\n strings.profile.logo.exceedSizeError\n );\n } else if (exception.response?.status === 415) {\n notify(\n \"danger\",\n strings.profile.logo.errorUpdated,\n strings.profile.logo.imageTypeError\n );\n } else {\n notify(\"danger\", strings.profile.logo.errorUpdated);\n }\n }\n }\n}\n\nexport const sagas = [\n takeLatest(getType(actions.loadProfile.request), loadProfile),\n takeLatest(getType(actions.updateProfile.request), updateProfile),\n takeLatest(getType(actions.addLogo.request), addLogo)\n];\n","export const TRANSITION_DURATION = \"0.22s\";\nexport const TRANSITION_DURATION_MS = 220;\nexport const TRANSITION_TIMING_FUNCTION = \"cubic-bezier(0.2, 0, 0, 1)\";\n\nexport const RESIZE_TRANSITION_DURATION = 300;\nexport const FLYOUT_DELAY = 300;\nexport const DYNAMIC_NAV_WIDTH = 244;\nexport const DYNAMIC_NAV_WIDTH_FLYOUT = 232;\nexport const DYNAMIC_NAV_WIDTH_COLLAPSED = 18;\nexport const GLOBAL_TOP_NAV_HEIGHT = 45;\nexport const GLOBAL_SIDE_NAV_WIDTH = 64;\nexport const GLOBAL_NAV_COLLAPSE_THRESHOLD = 200;\nexport const NAVIGATION_LAYER_ZINDEX = 900;\n\nconst CACHE_KEY = \"hcss.navigation.ui.state\";\nexport const MODULE_NAV_WIDTH_CACHE_KEY = CACHE_KEY + \".module.nav.width\";\nexport const NAV_COLLAPSED_STORE_CACHE_KEY = CACHE_KEY + \".collapsed.store\";\nexport const NAV_COLLAPSED_CACHE_KEY = CACHE_KEY + \".collapsed\";\n\nexport const RESIZE_CONTROL_HANDLE_OFFSET = 4;\nexport const RESIZE_CONTROL_HANDLE_WIDTH = 2;\nexport const RESIZE_CONTROL_INNER_WIDTH = 20;\nexport const RESIZE_CONTROL_OUTER_WIDTH =\n RESIZE_CONTROL_INNER_WIDTH + RESIZE_CONTROL_HANDLE_OFFSET;\n\nexport const SCROLL_HINT_HEIGHT = 2;\nexport const SCROLL_HINT_SPACING = 16;\nexport const SCROLL_BAR_SIZE =\n (typeof window !== \"undefined\" &&\n window.navigator.userAgent.includes(\"Gecko\")) ||\n (typeof window !== \"undefined\" &&\n window.navigator.userAgent.includes(\"AppleWebKit\"))\n ? 0\n : 30;\n","import { isLocal } from \"config\";\n\nfunction track(\n eventName: string,\n properties?: any | undefined,\n callback?: (() => void) | undefined\n) {\n if (!isLocal) {\n //TODO: need to add to gainsight\n // return mixpanel.track(eventName, properties, callback);\n }\n\n return callback?.();\n}\n\nexport { track };\n","import { takeEvery, call, put } from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport { DetailedPayItemLibrary, PayItemLibrary, actions } from \"./state\";\nimport * as notify from \"core/components/notify\";\nimport { strings } from \"localization\";\nimport { WithId } from \"core\";\nimport RestApi from \"api/RestApi\";\nimport {\n QuickPriceSheetCreateDto,\n QuickPriceSheetReadDto\n} from \"modules/projects/components/quick-pricing/models/quick-price-sheet.model\";\nimport axios, { AxiosInstance, AxiosResponse } from \"axios\";\nimport {\n apiSagaFactory,\n getSelectedBusinessUnitIdSaga,\n getTokenSaga\n} from \"../../api/api-saga-factory\";\n\nexport class QuickPriceApi {\n instance: AxiosInstance;\n businessUnitId: string;\n\n constructor(accessToken: string, businessUnitId: string) {\n this.instance = axios.create();\n this.instance.interceptors.request.use(config => {\n config.headers.Authorization = `Bearer ${accessToken}`;\n return config;\n });\n this.businessUnitId = businessUnitId;\n }\n createQuickPriceSheet = (quickPriceSheet: QuickPriceSheetCreateDto) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/quickPriceSheets`;\n return this.instance.post(url, quickPriceSheet);\n };\n loadQuickPriceSheet = (id: string) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/quickPriceSheets/${id}`;\n return this.instance.get(url);\n };\n deleteQuickPriceSheet = (id: string) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/quickPriceSheets/${id}`;\n return this.instance.delete(url);\n };\n}\n\nconst genericSagas = apiSagaFactory>({\n isBusinessUnitApi: true,\n apiPath: \"/payItemLibraries\"\n});\n\nfunction* loadPayItemLibraries() {\n try {\n const api: RestApi> = yield call(\n genericSagas.getApi\n );\n const response: AxiosResponse[]> = yield call([\n api,\n api.get\n ]);\n yield put(actions.loadPayItemLibraries.success(response.data || []));\n } catch (error) {\n yield put(actions.loadPayItemLibraries.failure(error as Error));\n }\n}\n\nfunction* loadPayItemLibrary(\n action: ReturnType\n) {\n try {\n const api: RestApi> = yield call(\n genericSagas.getApi\n );\n const response: AxiosResponse> = yield call(\n [api, api.get],\n `/${action.payload}`\n );\n yield put(actions.loadSelectedPayItemLibrary.success(response.data));\n } catch (error) {\n yield put(actions.loadSelectedPayItemLibrary.failure(error as Error));\n }\n}\nfunction* loadWizardPayItemLibrary(\n action: ReturnType\n) {\n try {\n const api: RestApi> = yield call(\n genericSagas.getApi\n );\n const response: AxiosResponse> = yield call(\n [api, api.get],\n `/${action.payload}`\n );\n yield put(actions.loadWizardPayItemLibrary.success(response.data));\n } catch (error) {\n yield put(actions.loadWizardPayItemLibrary.failure(error as Error));\n }\n}\n\nfunction* createPayItemLibrary(\n action: ActionType\n) {\n const newLibrary = action.payload;\n try {\n const api: RestApi> = yield call(\n genericSagas.getApi\n );\n const response: AxiosResponse> = yield call(\n [api, api.create],\n newLibrary\n );\n yield put(actions.createPayItemLibrary.success(response.data));\n notify.save(response.data.versionName);\n } catch (error) {\n notify.error(strings.quickPricing.notification.saveFailed);\n yield put(actions.createPayItemLibrary.failure(error as Error));\n yield put(actions.loadPayItemLibraries.failure(error as Error));\n }\n}\n\nfunction* deletePayItemLibrary(\n action: ReturnType\n) {\n try {\n const api: RestApi> = yield call(\n genericSagas.getApi\n );\n yield call([api, api.delete], `/${action.payload}`);\n yield put(actions.deletePayItemLibrary.success(action.payload));\n } catch (error) {\n yield put(actions.deletePayItemLibrary.failure(error as Error));\n }\n}\nfunction* loadQuickPriceSheet(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new QuickPriceApi(token, businessUnitId);\n const response = yield call(api.loadQuickPriceSheet, action.payload);\n yield put(actions.loadQuickPriceSheet.success(response.data));\n } catch (error) {\n yield put(actions.loadQuickPriceSheet.failure(error as Error));\n }\n}\nfunction* deleteQuickPriceSheet(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new QuickPriceApi(token, businessUnitId);\n const response = yield call(api.deleteQuickPriceSheet, action.payload);\n yield put(actions.deleteQuickPriceSheet.success(response.data));\n } catch (error) {\n yield put(actions.deleteQuickPriceSheet.failure(error as Error));\n }\n}\nexport const sagas = [\n takeEvery(\n getType(actions.loadPayItemLibraries.request),\n loadPayItemLibraries\n ),\n takeEvery(\n getType(actions.createPayItemLibrary.request),\n createPayItemLibrary\n ),\n takeEvery(\n getType(actions.loadSelectedPayItemLibrary.request),\n loadPayItemLibrary\n ),\n takeEvery(\n getType(actions.loadWizardPayItemLibrary.request),\n loadWizardPayItemLibrary\n ),\n takeEvery(\n getType(actions.deletePayItemLibrary.request),\n deletePayItemLibrary\n ),\n takeEvery(getType(actions.loadQuickPriceSheet.request), loadQuickPriceSheet),\n takeEvery(\n getType(actions.deleteQuickPriceSheet.request),\n deleteQuickPriceSheet\n )\n];\n","import { IVendorLocationDto } from \"api/contacts-api-dto-interfaces\";\nimport {\n AxiosInstance,\n AxiosPromise,\n AxiosRequestConfig,\n CancelToken\n} from \"axios\";\nimport appconfig from \"../config\";\nimport getDefaultInstance from \"./AxiosInstance\";\nimport {\n CompanyTypeDto,\n CreateCompanyTypeDto,\n CreateProductTypeDto,\n CreateVendorContactDto,\n CreateVendorDto,\n CreateVendorMinorityStatusDto,\n CreateVendorProductDto,\n MinorityTypeDto,\n ProductTypeDto,\n UpdateVendorContactDto,\n UpdateVendorDto,\n UpdateVendorMinorityStatusDto,\n VendorDto\n} from \"./GeneratedClients/contacts\";\nimport {\n IMinorityTypeDto,\n IProductTypeDto\n} from \"./GeneratedClients/ContactsClient\";\n\nconst baseUrl: string = appconfig.endpoints.CONTACTS;\n\nexport default class ContactsApi {\n private instance: AxiosInstance;\n private baseUrl: string;\n protected jsonParseReviver:\n | ((key: string, value: any) => any)\n | undefined = undefined;\n\n constructor(token: string, selectedBusinessUnitId: string) {\n this.instance = getDefaultInstance(token);\n this.instance.interceptors.request.use(config => {\n config.headers[\"X-Requested-Business-Unit-Id\"] = selectedBusinessUnitId;\n return config;\n });\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n getDetailedVendors = (\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/detailed\";\n url = url.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url,\n headers: {\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n response.data.forEach((vendor: any) => {\n const { products } = vendor;\n const filteredProducts = products.filter(\n (p: any) => p.product?.code.trim() !== \"*\"\n );\n vendor.products = filteredProducts;\n });\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n getMinorityTypes = (\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/minorityTypes\";\n url = url.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url,\n headers: {\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n getProductTypes = (\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url_ = this.baseUrl + \"/api/v1/productTypes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url_,\n headers: {\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data.filter((p: any) => p.code?.trim() !== \"*\");\n })\n .catch(error => {\n throw error;\n });\n };\n\n getVendor = (\n id: string,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url = url.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url = url.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url,\n headers: {\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n getVendorsCsvReport = (\n cancelToken?: CancelToken | undefined\n ): Promise => {\n const url = this.baseUrl + \"/api/v2/vendors/report/csv\";\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url,\n headers: {\n Accept: \"text/csv\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n getVendorsExcelReport = (\n cancelToken?: CancelToken | undefined\n ): Promise => {\n const url = this.baseUrl + \"/api/v2/vendors/report/excel\";\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url,\n headers: {\n Accept:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n },\n responseType: \"blob\",\n cancelToken\n };\n\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n createVendor = (\n body?: CreateVendorDto | undefined,\n cancelToken?: CancelToken | undefined\n ): AxiosPromise => {\n const url = this.baseUrl + \"/api/v2/vendors\";\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"POST\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n updateVendor = (\n id: string,\n body?: UpdateVendorDto | undefined,\n cancelToken?: CancelToken | undefined\n ): AxiosPromise => {\n let url = this.baseUrl + \"/api/v2/vendors/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url = url.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url = url.replace(/[?&]$/, \"\");\n\n const content = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content,\n method: \"PUT\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options)\n .then(reponse => {\n return reponse.data;\n })\n .catch(error => {\n throw error;\n });\n };\n deleteVendor = (\n id: string,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url = url.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url = url.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"DELETE\",\n url: url,\n headers: {},\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n createVendorContact = (\n vendorId: string,\n body?: CreateVendorContactDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/{vendorId}/contacts\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"POST\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n updateVendorContact = (\n vendorId: string,\n contactId: string,\n body?: UpdateVendorContactDto | undefined,\n moveVendorContact?: boolean,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/{vendorId}/contacts/{contactId}\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(\"{contactId}\", encodeURIComponent(\"\" + contactId));\n url = url.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"PUT\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\"\n },\n params: {\n moveVendorContact: moveVendorContact\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n deleteVendorContact = (\n vendorId: string,\n contactId: string,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/{vendorId}/contacts/{contactId}\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(\"{contactId}\", encodeURIComponent(\"\" + contactId));\n url = url.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"DELETE\",\n url: url,\n headers: {},\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n searchVendorContacts = (\n searchTerm: string,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n const url =\n this.baseUrl +\n `/api/v1/contacts/search?filter=${encodeURIComponent(searchTerm)}`;\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url,\n headers: {},\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n createVendorMinorityStatus = (\n vendorId: string,\n body?: CreateVendorMinorityStatusDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/{vendorId}/statuses\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"POST\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n updateVendorMinorityStatus = (\n vendorId: string,\n statusId: string,\n body?: UpdateVendorMinorityStatusDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/{vendorId}/statuses/{statusId}\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(\"{statusId}\", encodeURIComponent(\"\" + statusId));\n url = url.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"PUT\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n deleteVendorMinorityStatus = (\n vendorId: string,\n statusId: string,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/vendors/{vendorId}/statuses/{statusId}\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(\"{statusId}\", encodeURIComponent(\"\" + statusId));\n url = url.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"DELETE\",\n url: url,\n headers: {},\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n getCompanyTypes = (\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/companyTypes\";\n url = url.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url,\n headers: {\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n getLocationsByVendorId = (\n vendorId: string,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v2/vendors/{vendorId}/locations\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(/[?&]$/, \"\");\n\n const options: AxiosRequestConfig = {\n method: \"GET\",\n url: url,\n headers: {},\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n createVendorLocation = (\n vendorId: string,\n body?: IVendorLocationDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v2/vendors/{vendorId}/location\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(/[?&]$/, \"\");\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"POST\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n createVendorLocations = (\n vendorId: string,\n body?: IVendorLocationDto[] | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise<{ message: string }> => {\n let url = this.baseUrl + \"/api/v2/vendors/{vendorId}/locations\";\n url = url.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url = url.replace(/[?&]$/, \"\");\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"POST\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n createMinorityType = (\n body?: IMinorityTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/minorityTypes\";\n url = url.replace(/[?&]$/, \"\");\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"POST\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n updateMinorityType = (\n id: string,\n body?: IMinorityTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/minorityTypes/{id}\";\n url = url.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url = url.replace(/[?&]$/, \"\");\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"PUT\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n createProductType = (\n body?: IProductTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/productTypes\";\n url = url.replace(/[?&]$/, \"\");\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"POST\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n\n updateProductType = (\n id: string,\n body?: IProductTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise => {\n let url = this.baseUrl + \"/api/v1/productTypes/{id}\";\n url = url.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url = url.replace(/[?&]$/, \"\");\n const content_ = JSON.stringify(body);\n\n const options: AxiosRequestConfig = {\n data: content_,\n method: \"PUT\",\n url: url,\n headers: {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options)\n .then(response => {\n return response.data;\n })\n .catch(error => {\n throw error;\n });\n };\n}\n","import {\n ProductDto,\n IContactProduct\n} from \"api/GeneratedClients/ContactsClient\";\n\nexport const contactProductsListFactory = (\n createdProductsList: ProductDto[],\n updatedVendorProducts: ProductDto[]\n) => {\n const newContactsProductsList: IContactProduct[] = [];\n for (const createdProduct of createdProductsList) {\n const foundMatchingVendorProduct = updatedVendorProducts.find(\n (vendorProduct: ProductDto) =>\n vendorProduct.product?.code === createdProduct.product?.code\n );\n if (foundMatchingVendorProduct) {\n const createdContactProduct: IContactProduct = {\n productTypeId: foundMatchingVendorProduct.product?.id as string,\n code: foundMatchingVendorProduct.product?.code as string,\n vendorProductId: foundMatchingVendorProduct.id as string\n };\n newContactsProductsList.push(createdContactProduct);\n }\n }\n return newContactsProductsList;\n};\n","import {\n IContactProduct,\n IContactDto\n} from \"api/GeneratedClients/ContactsClient\";\n\nconst EMPTY_GUID = \"00000000-0000-0000-0000-000000000000\";\n\nexport const separateNewAndExistingProducts = (contactParams: IContactDto) => {\n const newProducts: IContactProduct[] = contactParams.products?.filter(\n product => product.productTypeId === EMPTY_GUID\n ) as IContactProduct[];\n const existingContactProducts = contactParams.products?.filter(\n product => product.productTypeId !== EMPTY_GUID\n ) as IContactProduct[];\n contactParams.products = existingContactProducts;\n return { originalContactParams: contactParams, newProducts: newProducts };\n};\n","import {\n Address,\n CreateVendorContactDto,\n IContactDto,\n ICreateVendorDto,\n ICreateVendorMinorityStatusDto,\n IUpdateVendorContactDto,\n IUpdateVendorMinorityStatusDto,\n MinorityStatusDto,\n IVendorDtoV1Response,\n IMinorityTypeDto,\n ICreateMinorityTypeDto,\n IUpdateMinorityTypeDto,\n IContactProduct,\n IProductTypeDto,\n IUpdateProductTypeDto,\n ICreateProductTypeDto,\n ProductTypeDto,\n CompanyTypeDto,\n MinorityTypeDto\n} from \"./../../api/GeneratedClients/ContactsClient\";\nimport {\n getSelectedBusinessUnitIdSaga,\n getTokenSaga\n} from \"api/api-saga-factory\";\nimport ContactsApi from \"api/ContactApi\";\nimport { actions } from \"modules/contacts\";\nimport { all, call, put, takeEvery, takeLatest } from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport axios, { AxiosInstance } from \"axios\";\nimport { notify } from \"hcss-components\";\nimport { strings } from \"localization\";\nimport { ExportFileType, isNullOrWhitespace } from \"core\";\nimport { CreateCompanyMode } from \"./components/vendor-list-modal\";\nimport { MoveContactSuccessNotification } from \"./components/move-contact-modal\";\nimport { contactProductsListFactory } from \"./helpers/contactProductsListFactory\";\nimport { newProductDtoFactory } from \"./helpers/newProductDtoFactory\";\nimport { separateNewAndExistingProducts } from \"./helpers/separateNewAndExistingProducts\";\n\nclass PreconContactsApi {\n instance: AxiosInstance;\n businessUnitId: string;\n\n constructor(accessToken: string, businessUnitId: string) {\n this.instance = axios.create();\n this.instance.interceptors.request.use(config => {\n config.headers.Authorization = `Bearer ${accessToken}`;\n return config;\n });\n this.businessUnitId = businessUnitId;\n }\n\n updateVendor = (\n vendorDto: IVendorDtoV1Response\n ): Promise => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/contacts/updateVendor`;\n return this.instance\n .post(url, vendorDto)\n .then(response => response.data)\n .catch(error => {\n throw error;\n });\n };\n updateContactProducts = (contact: IContactDto) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/contacts/updateContactProducts`;\n return this.instance\n .post(url, contact)\n .then(response => response.data)\n .catch(error => {\n throw error;\n });\n };\n moveContactProducts = (\n contact: IContactDto,\n newVendorId: string,\n oldContactProducts: IContactProduct[],\n newContactProducts: IContactProduct[]\n ) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/contacts/moveContactProducts`;\n const newProducts = newContactProducts;\n const oldProducts = oldContactProducts;\n return this.instance\n .post(\n url,\n { contact: contact, newProducts, oldProducts },\n {\n params: { newVendorId: newVendorId }\n }\n )\n .then(response => response.data)\n .catch(error => {\n throw error;\n });\n };\n syncContactToProjects = (contact: IContactDto) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/contacts/syncContactToProjects`;\n return this.instance\n .post(url, null, {\n params: {\n contactId: contact.id\n }\n })\n .then(response => response.data)\n .catch(error => {\n throw error;\n });\n };\n}\n\nfunction* loadContacts() {\n yield all([\n call(loadVendors),\n call(loadMinorityTypes),\n call(loadProductTypes),\n call(loadCompanyTypes)\n ]);\n yield put(actions.loadContactsState.success());\n}\n\nfunction* loadVendors() {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const vendorList = yield call(api.getDetailedVendors);\n yield put(actions.loadVendorsState.success(vendorList));\n } catch (error) {\n console.error(error);\n yield put(actions.loadVendorsState.failure(error));\n }\n}\n\nfunction* loadMinorityTypes() {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const minorityTypes = yield call(api.getMinorityTypes);\n yield put(actions.loadMinorityTypes.success(minorityTypes));\n } catch (error) {\n console.error(error);\n yield put(actions.loadMinorityTypes.failure(error));\n }\n}\n\nfunction* loadProductTypes() {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const productTypes = yield call(api.getProductTypes);\n yield put(actions.loadProductTypes.success(productTypes));\n } catch (error) {\n console.error(error);\n yield put(actions.loadProductTypes.failure(error));\n }\n}\n\nfunction* loadCompanyTypes() {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const companyTypes = yield call(api.getCompanyTypes);\n yield put(actions.loadCompanyTypes.success(companyTypes));\n } catch (error) {\n console.error(error);\n yield put(actions.loadCompanyTypes.failure(error));\n }\n}\n\nfunction* loadVendorsReport(\n action: ActionType\n) {\n try {\n const fileSaver = action.payload.fileSaver;\n const reportType = action.payload.reportType;\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n\n if (reportType === ExportFileType.Csv) {\n const csvData = yield call(api.getVendorsCsvReport);\n const blob = new Blob([csvData], {\n type: \"text/csv;charset=utf-8\"\n });\n fileSaver.saveAs(\n blob,\n strings.formatString(\n strings.tables.export.csv.filename,\n \"VendorContacts\",\n new Date().toISOString()\n ) as string\n );\n } else {\n const excelData = yield call(api.getVendorsExcelReport);\n fileSaver.saveAs(\n excelData,\n strings.formatString(\n strings.tables.export.excel.filename,\n \"VendorContacts\",\n new Date().toISOString()\n ) as string\n );\n }\n yield put(actions.loadVendorsReport.success());\n } catch (error) {\n console.error(error);\n yield put(actions.loadVendorsReport.failure(error));\n }\n}\n\nfunction* createVendor(\n action: ActionType\n) {\n const { vendor: v, history, mode } = action.payload;\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n // we need to cast these as Address instances\n // because the API needs a .toJSON function for its nested\n // children classes. Not sure if this is the best place to do\n const primaryAddress = new Address({ ...v.primaryAddress });\n const alternateAddress = new Address({ ...v.alternateAddress });\n const cv: ICreateVendorDto = {\n ...v,\n primaryAddress,\n alternateAddress,\n companyType: v.type\n };\n\n const id = yield call(api.createVendor, cv);\n if (id) {\n const newVendor = yield call(api.getVendor, id);\n yield put(actions.createVendor.success(newVendor));\n yield put(actions.setShowModal(false));\n notify(\"success\", `'${v.code}' Added!`);\n if (mode === CreateCompanyMode.Redirect)\n history.push(`/contacts/${id}/edit`);\n }\n } catch (error) {\n console.error(error);\n if (error.response.status === 409) {\n notify(\n \"danger\",\n `Company with Code '${action.payload.vendor.code}' already exists.`\n );\n } else {\n notify(\"danger\", `Error updating vendor.`);\n }\n yield put(actions.setShowModal(true));\n yield put(actions.createVendor.failure(error));\n }\n}\n\nfunction* updateVendor(\n action: ActionType\n) {\n const { vendor: v, history } = action.payload;\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const preconContactsApi = new PreconContactsApi(token, businessUnitId);\n if (v.id) {\n const updatedVendor = yield call(preconContactsApi.updateVendor, v);\n const productTypes = yield call(api.getProductTypes);\n const companyTypes = yield call(api.getCompanyTypes);\n const minorityTypes = yield call(api.getMinorityTypes);\n\n yield put(actions.updateVendor.success(updatedVendor));\n yield put(actions.loadMinorityTypes.success(minorityTypes));\n yield put(actions.updateProductTypes.success(productTypes));\n yield put(actions.updateCompanyTypes.success(companyTypes));\n notify(\"success\", `'${updatedVendor.code}' Saved!`);\n history.push(`/contacts/${updatedVendor.id}`);\n }\n } catch (error) {\n console.error(error);\n yield put(actions.updateVendor.failure(error));\n if (error.response.status === 409) {\n notify(\n \"danger\",\n `Company with Code '${v?.code.toUpperCase()}' already exists.`\n );\n } else {\n notify(\"danger\", `Error updating vendor.`);\n }\n }\n}\n\nfunction* deleteVendor(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n\n const vendorId = action.payload;\n yield call(api.deleteVendor, vendorId);\n yield put(actions.deleteVendor.success(vendorId));\n notify(\"warning\", \"Company Removed!\");\n } catch (error) {\n console.error(error);\n notify(\"danger\", \"Error deleting company.\");\n yield put(actions.deleteVendor.failure(error));\n }\n}\n\nfunction* handleNewProductsFromContact(\n contact: IContactDto,\n vendor: IVendorDtoV1Response,\n api: ContactsApi,\n preconApi: PreconContactsApi\n) {\n const { originalContactParams, newProducts } = separateNewAndExistingProducts(\n contact\n );\n if (newProducts.length > 0) {\n contact = originalContactParams;\n const existingProducts = yield call(api.getProductTypes);\n\n const createdProductsList = newProducts.map(newProduct => {\n const createdVendorProduct = newProductDtoFactory(\n vendor,\n existingProducts,\n newProduct\n );\n return createdVendorProduct;\n });\n vendor.products.push(...createdProductsList);\n\n const updatedVendor = yield call(preconApi.updateVendor, vendor);\n const [updatedProductTypes, companyTypes, minorityTypes]: [\n ProductTypeDto[],\n CompanyTypeDto[],\n MinorityTypeDto[]\n ] = yield all([\n call(api.getProductTypes),\n call(api.getCompanyTypes),\n call(api.getMinorityTypes)\n ]);\n\n yield put(actions.updateVendor.success(updatedVendor));\n yield put(actions.loadMinorityTypes.success(minorityTypes));\n yield put(actions.updateProductTypes.success(updatedProductTypes));\n yield put(actions.updateCompanyTypes.success(companyTypes));\n\n const updatedVendorProducts = updatedVendor.products;\n const newContactsProductsList: IContactProduct[] = contactProductsListFactory(\n createdProductsList,\n updatedVendorProducts\n );\n contact.products?.push(...newContactsProductsList);\n }\n return contact;\n}\n\nfunction* addContact(action: ActionType) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const preconApi = new PreconContactsApi(token, businessUnitId);\n\n const { contact: c, vendor } = action.payload;\n\n if (vendor) {\n const vendorId = vendor.id;\n const completedContact: IContactDto = yield handleNewProductsFromContact(\n c,\n vendor,\n api,\n preconApi\n );\n\n const cvcd = new CreateVendorContactDto({\n ...completedContact,\n vendorId\n });\n const id = yield call(api.createVendorContact, vendorId, cvcd);\n if (id) {\n const contact: IContactDto = { ...completedContact, id };\n yield put(actions.setShowModal(false));\n yield put(actions.addContact.success({ vendor, contact }));\n notify(\"success\", strings.contactManagement.contactList.saved);\n }\n }\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.contactManagement.contactList.errorSaved);\n yield put(actions.addContact.failure(error));\n }\n}\n\nfunction* addContactFromProject(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const preconApi = new PreconContactsApi(token, businessUnitId);\n const {\n contact: c,\n vendor,\n updateInput,\n setShowCreateContactModal,\n setSelectedCompany\n } = action.payload;\n\n if (vendor) {\n const vendorId = vendor.id;\n const completedContact = yield handleNewProductsFromContact(\n c,\n vendor,\n api,\n preconApi\n );\n const cvcd = new CreateVendorContactDto({\n vendorId,\n ...completedContact\n });\n const id = yield call(api.createVendorContact, vendorId, cvcd);\n if (id) {\n const contact: IContactDto = { ...completedContact, id };\n yield put(actions.addContactFromProject.success({ vendor, contact }));\n setShowCreateContactModal(false);\n setSelectedCompany(null);\n updateInput(contact, vendor);\n notify(\"success\", strings.contactManagement.contactList.saved);\n }\n }\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.contactManagement.contactList.errorSaved);\n yield put(actions.addContactFromProject.failure(error));\n }\n}\n\nfunction* updateContact(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const preconApi = new PreconContactsApi(token, businessUnitId);\n const { contact: c, vendor } = action.payload;\n\n if (vendor && c) {\n const vendorId = vendor.id;\n const contactId = c.id;\n\n const completedContact: IContactDto = yield handleNewProductsFromContact(\n c,\n vendor,\n api,\n preconApi\n );\n\n const updateDto: IUpdateVendorContactDto = {\n ...completedContact,\n vendorId,\n contactId\n };\n yield call(api.updateVendorContact, vendorId, contactId, updateDto);\n yield call(preconApi.updateContactProducts, completedContact);\n const contact: IContactDto = { ...completedContact };\n\n yield put(actions.updateContact.success({ contact, vendor }));\n notify(\"success\", strings.contactManagement.contactList.updated);\n yield put(actions.setShowModal(false));\n }\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.contactManagement.contactList.errorSaved);\n yield put(actions.updateContact.failure(error));\n }\n}\n\nfunction* deleteContact(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const { contact: c, vendorId } = action.payload;\n if (vendorId && c.id) {\n yield call(api.deleteVendorContact, vendorId, c.id);\n yield put(actions.deleteContact.success({ vendorId, contact: c }));\n notify(\"warning\", strings.contactManagement.contactList.deleted);\n }\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.contactManagement.contactList.errorDeleted);\n yield put(actions.deleteContact.failure(error));\n }\n}\n\nfunction* moveContact(action: ActionType) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const preconApi = new PreconContactsApi(token, businessUnitId);\n\n const {\n contact,\n oldVendorId,\n oldProducts,\n newProducts,\n newVendorId,\n history\n } = action.payload;\n\n if (!!!(contact.id && contact.companyId && oldVendorId && newVendorId))\n return;\n const updatedContact: IUpdateVendorContactDto = {\n ...contact,\n isMainContact: false,\n vendorId: contact.companyId,\n contactId: contact.id\n };\n updatedContact.companyId = newVendorId;\n yield call(\n api.updateVendorContact,\n oldVendorId,\n contact.id,\n updatedContact,\n true\n );\n\n yield call(\n preconApi.moveContactProducts,\n contact,\n newVendorId,\n oldProducts,\n newProducts\n );\n yield put(\n actions.moveContact.success({\n oldVendorId: oldVendorId,\n newVendorId: newVendorId,\n contact: updatedContact\n })\n );\n notify(\n \"success\",\n strings.contactManagement.contactList.moveContact,\n MoveContactSuccessNotification(newVendorId, history)\n );\n yield put(actions.setShowMoveContactModal(false));\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.contactManagement.contactList.errorMoved);\n yield put(actions.moveContact.failure(error));\n }\n}\n\nfunction* addMinorityStatus(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n\n const { vendorId, minorityStatus: ms } = action.payload;\n const vms: ICreateVendorMinorityStatusDto = {\n vendorId: ms.companyId ?? \"\",\n minorityTypeId: ms.type?.id ?? \"\",\n certificationNumber: ms.certificationNumber,\n percent: ms.percent\n };\n\n const id = yield call(api.createVendorMinorityStatus, vendorId, vms);\n notify(\"success\", strings.contactManagement.minorityStatusList.saved);\n const newMs = new MinorityStatusDto({\n ...ms,\n id\n });\n yield put(\n actions.addMinorityStatus.success({\n vendorId: vendorId,\n minorityStatus: newMs\n })\n );\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.contactManagement.minorityStatusList.errorSaved);\n yield put(actions.addMinorityStatus.failure(error));\n }\n}\n\nfunction* updateMinorityStatus(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const { vendorId, minorityStatus: ms, statusId } = action.payload;\n\n if (vendorId && statusId) {\n const updateModel: IUpdateVendorMinorityStatusDto = {\n vendorId: ms.companyId ?? \"\",\n statusId: ms.id ?? \"\",\n minorityTypeId: ms.type?.id ?? \"\",\n certificationNumber: ms.certificationNumber,\n percent: ms.percent\n };\n yield call(\n api.updateVendorMinorityStatus,\n vendorId,\n statusId,\n updateModel\n );\n yield put(\n actions.updateMinorityStatus.success({\n vendorId: vendorId,\n statusId: statusId,\n minorityStatus: ms\n })\n );\n notify(\"success\", strings.contactManagement.minorityStatusList.updated);\n }\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.contactManagement.minorityStatusList.errorUpdated);\n yield put(actions.updateMinorityStatus.failure(error));\n }\n}\n\nfunction* deleteMinorityStatus(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const { vendorId, minorityStatus: ms } = action.payload;\n\n if (vendorId && ms.id) {\n yield call(api.deleteVendorMinorityStatus, vendorId, ms.id);\n yield put(\n actions.deleteMinorityStatus.success({\n vendorId: vendorId,\n statusId: ms.id\n })\n );\n notify(\"success\", strings.contactManagement.minorityStatusList.deleted);\n }\n } catch (error) {\n console.error(error);\n notify(\"danger\", strings.contactManagement.minorityStatusList.errorDeleted);\n yield put(actions.updateMinorityStatus.failure(error));\n }\n}\n\nfunction* searchContacts(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const searchTerm = action.payload;\n\n if (!isNullOrWhitespace(searchTerm)) {\n const contacts = yield call(api.searchVendorContacts, searchTerm);\n yield put(actions.searchContacts.success(contacts));\n } else yield put(actions.searchContacts.success([]));\n } catch (error) {\n console.error(error);\n yield put(actions.searchContacts.failure(error));\n }\n}\n\nfunction* addMinorityType(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const minorityType = action.payload;\n\n const createModel: ICreateMinorityTypeDto = {\n code: minorityType.code ?? \"\",\n description: minorityType.description ?? \"\"\n };\n\n const id = yield call(api.createMinorityType, createModel);\n const newMinorityType: IMinorityTypeDto = { ...minorityType, id };\n yield put(actions.addMinorityType.success(newMinorityType));\n notify(\n \"success\",\n strings.contactManagement.companySetup.minorityType.success.added\n );\n } catch (error) {\n console.error(error);\n if (error.response.status === 409) {\n notify(\n \"danger\",\n // `Minority type with code '${action.payload.code}' already exists.`\n strings.formatString(\n strings.contactManagement.companySetup.minorityType.errors.duplicated,\n action.payload.code as string\n ) as string\n );\n } else {\n notify(\n \"danger\",\n strings.contactManagement.minorityTypeModal.errorCreated\n );\n }\n yield put(actions.addMinorityType.failure(error));\n }\n}\n\nfunction* updateMinorityType(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const { minorityType, minorityTypeId } = action.payload;\n\n const updateModel: IUpdateMinorityTypeDto = {\n id: minorityTypeId,\n code: minorityType.code ?? \"\",\n description: minorityType.description ?? \"\"\n };\n\n yield call(api.updateMinorityType, minorityTypeId, updateModel);\n yield put(\n actions.updateMinorityType.success({ minorityType, minorityTypeId })\n );\n notify(\n \"success\",\n strings.contactManagement.companySetup.minorityType.success.updated\n );\n yield put(actions.loadVendorsState.request());\n } catch (error) {\n console.error(error);\n if (error.response.status === 409) {\n notify(\n \"danger\",\n // `Minority type with code '${action.payload.minorityType.code}' already exists.`\n strings.formatString(\n strings.contactManagement.companySetup.minorityType.errors.duplicated,\n action.payload.minorityType.code as string\n ) as string\n );\n } else {\n notify(\n \"danger\",\n strings.contactManagement.minorityTypeModal.errorUpdated\n );\n }\n yield put(actions.updateMinorityType.failure(error));\n }\n}\n\nfunction* addProductType(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const productType = action.payload;\n\n const createModel: ICreateProductTypeDto = {\n code: productType.code ?? \"\",\n description: productType.description ?? \"\"\n };\n\n const id = yield call(api.createProductType, createModel);\n const newProductType: IProductTypeDto = { ...productType, id };\n yield put(actions.addProductType.success(newProductType));\n notify(\n \"success\",\n strings.contactManagement.companySetup.productType.success.added\n );\n } catch (error) {\n console.error(error);\n if (error.response.status === 409) {\n notify(\n \"danger\",\n strings.formatString(\n strings.contactManagement.companySetup.productType.errors.duplicated,\n action.payload.code as string\n ) as string\n );\n } else {\n notify(\n \"danger\",\n strings.contactManagement.companySetup.productType.errors.created\n );\n }\n yield put(actions.addProductType.failure(error));\n }\n}\n\nfunction* updateProductType(\n action: ActionType\n) {\n try {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const api = new ContactsApi(token, businessUnitId);\n const { productType, productTypeId } = action.payload;\n\n const updateModel: IUpdateProductTypeDto = {\n id: productTypeId,\n code: productType.code ?? \"\",\n description: productType.description ?? \"\"\n };\n\n yield call(api.updateProductType, productTypeId, updateModel);\n yield put(\n actions.updateProductType.success({ productType, productTypeId })\n );\n notify(\n \"success\",\n strings.contactManagement.companySetup.productType.success.updated\n );\n yield put(actions.loadVendorsState.request());\n } catch (error) {\n console.error(error);\n if (error.response.status === 409) {\n notify(\n \"danger\",\n // `Scope of work with code '${action.payload.productType.code}' already exists.`\n strings.formatString(\n strings.contactManagement.companySetup.productType.errors.duplicated,\n action.payload.productType.code as string\n ) as string\n );\n } else {\n notify(\n \"danger\",\n strings.contactManagement.companySetup.productType.errors.updated\n );\n }\n yield put(actions.addProductType.failure(error));\n }\n}\n\nfunction* syncContactToProjects(\n action: ActionType\n) {\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const preconApi = new PreconContactsApi(token, businessUnitId);\n const contactToSync = action.payload;\n try {\n yield call(preconApi.syncContactToProjects, contactToSync);\n yield put(actions.syncContactToProjects.success());\n notify(\"success\", \"Synced contact successfully\");\n } catch (error) {\n yield put(actions.syncContactToProjects.failure(error as Error));\n\n notify(\"danger\", \"Error syncing contact\");\n }\n}\n\nexport const sagas = [\n takeLatest(getType(actions.loadContactsState.request), loadContacts),\n takeLatest(getType(actions.loadVendorsState.request), loadVendors),\n takeLatest(getType(actions.loadMinorityTypes.request), loadMinorityTypes),\n takeLatest(getType(actions.loadProductTypes.request), loadProductTypes),\n takeLatest(getType(actions.loadCompanyTypes.request), loadCompanyTypes),\n takeLatest(getType(actions.loadVendorsReport.request), loadVendorsReport),\n takeLatest(getType(actions.searchContacts.request), searchContacts),\n takeEvery(getType(actions.createVendor.request), createVendor),\n takeEvery(getType(actions.updateVendor.request), updateVendor),\n takeEvery(getType(actions.deleteVendor.request), deleteVendor),\n takeEvery(getType(actions.addContact.request), addContact),\n takeEvery(\n getType(actions.addContactFromProject.request),\n addContactFromProject\n ),\n takeEvery(getType(actions.updateContact.request), updateContact),\n takeEvery(getType(actions.deleteContact.request), deleteContact),\n takeEvery(getType(actions.moveContact.request), moveContact),\n takeEvery(getType(actions.addMinorityStatus.request), addMinorityStatus),\n takeEvery(\n getType(actions.updateMinorityStatus.request),\n updateMinorityStatus\n ),\n takeEvery(\n getType(actions.deleteMinorityStatus.request),\n deleteMinorityStatus\n ),\n takeEvery(getType(actions.addMinorityType.request), addMinorityType),\n takeEvery(getType(actions.updateMinorityType.request), updateMinorityType),\n takeEvery(getType(actions.addProductType.request), addProductType),\n takeEvery(getType(actions.updateProductType.request), updateProductType),\n takeEvery(\n getType(actions.syncContactToProjects.request),\n syncContactToProjects\n )\n];\n","import {\n ProductDto,\n IVendorDtoV1Response,\n ProductTypeDto,\n IProductTypeDto,\n IContactProduct\n} from \"api/GeneratedClients/ContactsClient\";\n\nexport const newProductDtoFactory = (\n vendor: IVendorDtoV1Response,\n existingProducts: any,\n newProduct: IContactProduct\n) => {\n const vendorId = vendor.id;\n const foundProduct = existingProducts.find(\n (existingProduct: IProductTypeDto) =>\n existingProduct.code === newProduct.code\n );\n const newProductType: ProductTypeDto = new ProductTypeDto({\n id: foundProduct ? foundProduct.id : newProduct.productTypeId,\n code: foundProduct ? foundProduct.code : newProduct.code,\n description: foundProduct\n ? foundProduct.description\n : newProduct.code.toLowerCase()\n });\n const newVendorProduct: ProductDto = new ProductDto({\n id: undefined,\n companyId: vendorId,\n product: newProductType,\n region: undefined,\n date: undefined\n });\n\n return newVendorProduct;\n};\n","import * as account from \"../modules/account\";\nimport axios from \"axios\";\nimport redux from \"../modules/store\";\nimport { isNullOrWhitespace } from \"core\";\n\nconst getDefaultInstance = (accessToken?: string) => {\n // Create instance\n const instance = axios.create();\n\n // Set the AUTH token for any request\n instance.interceptors.request.use(config => {\n if (isNullOrWhitespace(config.headers.common.Authorization)) {\n const auth = accessToken ? `Bearer ${accessToken}` : \"\";\n config.headers.common.Authorization = auth;\n }\n\n return config;\n });\n\n // Handle 401 errors\n instance.interceptors.response.use(\n response => response,\n async error => {\n const request = error.config;\n\n if (error.response.status === 401 && !request.__retry) {\n request.__retry = true;\n\n try {\n const state = redux.store.getState();\n const currentUser = account.selectors.getAccount(state)!;\n const token = currentUser.user?.idsrvAccessToken;\n axios.defaults.headers.common.Authorization = `Bearer ${token}`;\n return axios(request);\n } catch (reason) {\n console.error(reason);\n // TODO: dispatch invalid session action\n // and show reload modal.\n window.location.reload();\n }\n }\n\n return Promise.reject(error);\n }\n );\n\n return instance;\n};\n\nexport default getDefaultInstance;\n","import { EstimateEntity } from \"api\";\nimport constate from \"constate\";\nimport { WithId } from \"core\";\nimport { useLocalStorage } from \"hcss-hooks\";\nimport { useSelectedBusinessUnitId } from \"modules/account\";\nimport { selectors } from \"modules/estimates\";\nimport { useCallback, useMemo } from \"react\";\nimport { useSelector } from \"react-redux\";\n\nexport function useRecentEstimates() {\n const businessUnitId = useSelectedBusinessUnitId();\n const maxEstimates = 10;\n const [recentEstimateIds, setRecentEstimateIds] = useLocalStorage(\n `${businessUnitId}-recent-estimates`,\n []\n );\n const workingCopy = useSelector(selectors.getWorkingCopy);\n\n const recentEstimates = useMemo(() => {\n return recentEstimateIds.reduce(\n (list: WithId[], currId: string) => {\n if (workingCopy[currId]) list.push(workingCopy[currId]);\n return list;\n },\n []\n );\n }, [recentEstimateIds, workingCopy]);\n\n const addEstimate = useCallback(\n (estimateId: string) => {\n // @ts-ignore\n setRecentEstimateIds((prevEstimates: string[]) => {\n const newRecentList = [...prevEstimates];\n const currentIndex = newRecentList.findIndex(e => e === estimateId);\n if (currentIndex > -1) {\n newRecentList.splice(currentIndex, 1);\n }\n\n newRecentList.unshift(estimateId);\n return newRecentList.slice(0, maxEstimates);\n });\n },\n [setRecentEstimateIds]\n );\n\n return { recentEstimateIds, recentEstimates, addEstimate };\n}\n\nconst [provider, context] = constate(useRecentEstimates);\nexport const RecentEstimateProvider = provider;\nexport const useRecentEstimatesContext = context;\n","import styled from \"styled-components\";\n\nexport const DownloadButton = styled.button`\n background-color: white;\n border: none;\n padding: none;\n color: #005eb8;\n\n & :disabled {\n color: #707070;\n }\n`;\n\n// export interface DownloadButtonProps {\n// onClick?: () => void;\n// disabled?: boolean;\n// showText?: boolean;\n// }\n\n// export default function DownloadButton({\n// onClick,\n// disabled,\n// showText\n// }: DownloadButtonProps) {\n// if (disabled) {\n// onClick = undefined;\n// }\n// return (\n// \n// \n// {showText && \"Download\"}\n// \n// );\n// }\n","import styled from \"styled-components\";\nimport { Box } from \"hcss-core\";\n\nexport const PrintHeader = styled(Box)``;\nPrintHeader.defaultProps = {\n mb: 3,\n fontSize: \"16pt\",\n fontWeight: 700\n};\n","import { Button, Icon, Modal } from \"hcss-components\";\nimport React from \"react\";\nimport { useSmartDriveContext } from \"hcss-smartdrive\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\n\nexport const SmartDriveDeleteConfirmation = () => {\n const {\n api: { deleteFile },\n fileOperations: { fileToDelete, setFileToDelete },\n allSelectedRowsOperations: { selectedRowIds, setSelectedRowIds }\n } = useSmartDriveContext();\n\n const showModal = fileToDelete !== undefined;\n\n return (\n setFileToDelete(undefined)}>\n \n {strings.smartdrive.deleteFile}\n \n \n <>\n {showModal &&\n `${strings.smartdrive.deleteMessage} ${fileToDelete!.fileName}?`}\n {strings.smartdrive.warning}\n \n \n \n {\n if (fileToDelete) {\n deleteFile(fileToDelete.id)\n .then(() => {\n const newSelectedRowIds = selectedRowIds.filter(\n rowId => rowId !== fileToDelete.id\n );\n setSelectedRowIds(newSelectedRowIds);\n })\n .catch(err => {\n console.error(err);\n });\n setFileToDelete(undefined);\n }\n }}\n hcssStyle=\"Delete\"\n >\n \n  {strings.smartdrive.confirm}\n \n setFileToDelete(undefined)}\n >\n \n  {strings.smartdrive.cancel}\n \n \n \n );\n};\n\nconst Warning = styled.div`\n display: block;\n font-size: 12px;\n font-style: italic;\n margin-top: 4px;\n font-weight: 600;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\nimport { Table } from \"@devexpress/dx-react-grid-bootstrap3\";\nimport { Icon } from \"hcss-components\";\nimport { Document } from \"core\";\n\nexport const TableActionsCell = ({ value, row }: Table.DataCellProps) => {\n const documentRow: Document = row as Document;\n const handleCopyLink = () => {\n const textField = document.createElement(\"textarea\");\n textField.innerText = documentRow.url;\n document.body.appendChild(textField);\n textField.select();\n document.execCommand(\"copy\");\n textField.remove();\n };\n\n const handleDownloadLink = () => {\n window.open(documentRow.url);\n };\n\n return (\n
\n );\n};\n\nconst TableActionButton = styled.button<{ color?: string }>`\n background-color: white;\n border: none;\n padding: none;\n color: ${props => (props.disabled ? \"707070\" : props.color || \"#005eb8\")};\n`;\n\nconst ActionsArea = styled.div`\n justify-content: flex-end;\n align-items: center;\n display: flex;\n align-items: center;\n flex-wrap: wrap;\n`;\n\nconst FileCell = styled.div`\n padding: 4px;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\nimport { Table } from \"@devexpress/dx-react-grid-bootstrap3\";\nimport { Icon } from \"hcss-components\";\nimport { formatFileSize, getIconForFile, formatDate, Document } from \"core\";\n\nexport const TableFileCell = ({ value, row }: Table.DataCellProps) => {\n const documentRow: Document = row as Document;\n return (\n \n );\n};\n\nconst FileCell = styled.div`\n display: grid;\n grid-template-rows: auto;\n grid-template-columns: 30px auto;\n grid-template-areas: \"icon fileInfo\";\n grid-gap: 12px;\n padding: 4px;\n\n .details {\n width: 100%;\n }\n\n .size,\n .date {\n margin-right: 5px;\n display: inline-block;\n font-size: 0.9em;\n color: #404040;\n }\n\n .size {\n width: 8em;\n }\n\n .date {\n width: 10em;\n }\n`;\n\nconst FileIcon = styled(Icon)`\n font-size: 2em;\n`;\n\nconst TableFlex = styled.div`\n display: flex;\n grid-area: area;\n justify-content: center;\n align-items: center;\n flex-wrap: wrap;\n`;\n","import { Button, Col, Icon, LoadingContainer } from \"hcss-components\";\nimport React, { useCallback } from \"react\";\nimport { useSmartDriveContext, SmartDriveGrid } from \"hcss-smartdrive\";\nimport { NoDataPlaceholder } from \"../containers/no-data-placeholder\";\nimport { strings } from \"localization\";\nimport styled from \"styled-components\";\nimport { Flex } from \"hcss-core\";\nimport { DisableInSandbox } from \"core/util/sandbox\";\n\nexport const SmartDriveTable: React.FunctionComponent = () => {\n const {\n api: { files, loading, downloadFile },\n allSelectedRowsOperations: { selectedRowIds, setSelectedRowIds },\n delModalOperations: { setModalShowUp },\n uppy: {\n ui: { toggleFileModal }\n },\n isReadOnlyUser\n } = useSmartDriveContext();\n\n const handleUploadFilesClick = useCallback(() => {\n toggleFileModal(true);\n }, [toggleFileModal]);\n\n return (\n \n {files.length === 0 ? (\n \n \n \n \n \n ) : (\n \n \n \n \n \n {strings.smartdrive.table.uploadFiles}\n \n
\n \n {strings.smartdrive.table.download}{\" \"}\n {selectedRowIds && selectedRowIds.length > 0\n ? strings.smartdrive.table.selected\n : strings.smartdrive.table.all}\n \n \n {strings.smartdrive.table.delete}{\" \"}\n {selectedRowIds && selectedRowIds.length > 0\n ? strings.smartdrive.table.selected\n : strings.smartdrive.table.all}\n \n
\n \n \n \n \n )}\n \n );\n\n function handleDownloadAllFilesClick() {\n if (selectedRowIds && selectedRowIds.length > 0) {\n selectedRowIds.forEach(id => {\n downloadFile(files.filter(file => file.id === id)[0]);\n });\n } else {\n files.forEach(file => {\n downloadFile(file);\n });\n }\n }\n\n function handleDeleteAllFilesClick() {\n setModalShowUp(true);\n }\n};\n\nconst SmallerButton = styled(Button)`\n padding: 5px 10px 5px 10px;\n font-size: 1rem;\n`;\n\nconst Wrapper = styled.span`\n div.table-responsive {\n /* \n WORKAROUND: This fixes an issue with Windows/Chrome where\n the the height is overwritten during window resizes, \n causing the table continuously shrink.\n */\n height: 400px !important;\n }\n`;\n","import React, { useState } from \"react\";\nimport moment from \"moment\";\nimport { DateTimePicker as RWDateTimePicker } from \"react-widgets\";\nimport { parseDate } from \"core\";\nimport { isYearIn100Range } from \"modules/schemas/components/filters/dateTimeUtils\";\n\nexport const DateTimePicker = ({\n time: useTime,\n value,\n onChange,\n ...props\n}: RWDateTimePicker.DateTimePickerProps) => {\n const [_currentDate, setCurrentDate] = useState();\n\n const handleChange = (date?: Date, dateStr?: string) => {\n if (!date || isYearIn100Range(date)) {\n setCurrentDate(undefined);\n }\n if (onChange) onChange(date, dateStr);\n };\n\n const currentDate =\n useTime && !_currentDate\n ? moment().set(\"hour\", 12).set(\"minute\", 0).toDate()\n : moment(_currentDate).set(\"hour\", 12).set(\"minute\", 0).toDate();\n\n const format = useTime ? \"L LT\" : \"L\";\n return (\n setCurrentDate(d)}\n onChange={handleChange}\n format={format}\n parse={parseDate as any}\n {...props}\n />\n );\n};\n","import styled from \"styled-components\";\nimport { ControlLabel } from \"hcss-components\";\n\nexport const ToolGrid = styled.div`\n max-width: 100vw;\n\n @supports (display: grid) {\n display: grid;\n grid-column-gap: 32px;\n grid-row-gap: 24px;\n align-items: center;\n grid-template-areas:\n \"buttonsLeft buttonsRight\"\n \"template template\";\n grid-template-columns: 1/2fr 1/2fr;\n grid-template-rows: auto auto;\n\n @media (min-width: 800px) {\n justify-items: center;\n grid-template-columns: 20rem 1fr auto;\n grid-template-rows: 36px;\n grid-template-areas: \"buttonsLeft template buttonsRight\";\n }\n }\n`;\n\nexport const GridContainer = styled.div<{ area: string }>`\n float: left;\n width: 100%;\n @supports (display: grid) {\n float: none;\n grid-area: ${props => props.area};\n }\n`;\n\nexport const TemplateContainer = styled(GridContainer)`\n grid-area: template;\n display: grid;\n grid-gap: 10px;\n\n align-items: center;\n width: 100%;\n max-width: 900px;\n\n grid-template-columns: auto auto 1fr auto;\n grid-template-rows: auto;\n grid-template-areas: \"label access input options\";\n`;\n\nexport const TemplateLabel = styled(ControlLabel)`\n text-align: right;\n`;\n","import React from \"react\";\nimport { isValidEmail, TextOverflow } from \"core\";\nimport { copyToClipboard } from \"core/util/clipboard\";\n\ninterface EmailFieldProps {\n emailAddress: string;\n}\n\nexport const EmailField = ({ emailAddress }: EmailFieldProps) => {\n return (\n
\n {isValidEmail(emailAddress) ? (\n copyToClipboard(emailAddress)}\n >\n \n {emailAddress}\n \n \n ) : (\n \n {emailAddress}\n \n )}\n
\n );\n};\n","import React from \"react\";\nimport { copyToClipboard } from \"core/util/clipboard\";\nimport { formatPhoneNumber, TextOverflow } from \"core\";\n\ninterface PhoneFieldProps {\n phoneNumber: string;\n}\n\nexport const PhoneField = ({ phoneNumber }: PhoneFieldProps) => {\n return (\n
\n copyToClipboard(phoneNumber)}\n >\n \n {formatPhoneNumber(phoneNumber)}\n \n \n
\n );\n};\n","import { sortBy } from \"lodash-es\";\n\ninterface ListOption {\n display: string;\n value?: string;\n}\n\n/**\n * This will return the values in the multi-select list sorted by alphabetical or custom depending on the column config\n * @param selectedValues\n * @param options\n * @param isCustomSort\n * @returns\n */\nexport const sortValues = (\n selectedValues: string[],\n options: ListOption[],\n isCustomSort: boolean\n): string[] => {\n let result: string[];\n if (!isCustomSort) {\n result = sortBy(selectedValues, val => val.toLocaleLowerCase());\n } else {\n result = options\n .map(val => val.display)\n .filter(val => selectedValues.includes(val));\n\n result = [...new Set([...result, ...selectedValues])];\n }\n return result;\n};\n\n/**\n * Some operations expect a field value to come in as an array\n * but depending on when/how a field was created/modified that\n * field can be null, string, or an array of strings.\n * This funciton will return an empty array or a string of arrays\n * @param values field.value\n * @returns an empty array or array of strings\n */\nexport function getFieldValueAsArray(\n values: null | string | string[]\n): string[] {\n if (values === null || values === undefined) return [];\n if (typeof values === \"string\") return [values];\n return values;\n}\n","import { sortVendorLocations } from \"./../components/vendor-edit-details\";\nimport { IVendorLocationDto } from \"api/contacts-api-dto-interfaces\";\nimport { IVendorDtoV1Response } from \"api/GeneratedClients/ContactsClient\";\nimport { isNullOrWhitespace } from \"core\";\nimport { strings } from \"localization\";\nimport { sortBy } from \"lodash-es\";\nimport { useEffect, useState } from \"react\";\n\nexport interface VendorLocationOption {\n display: string;\n value: IVendorLocationDto;\n id: string;\n}\nexport function useVendorLocationDropDown(\n vendorParam: IVendorDtoV1Response | undefined\n) {\n const [localVendor, setLocalVendor] = useState<\n IVendorDtoV1Response | undefined\n >(vendorParam);\n const [vendorLocation, setVendorLocation] = useState();\n const [editingLocationId, setEditingLocationId] = useState();\n const [isVendorLocationFormValid, setIsVendorLocationFormValid] = useState<\n boolean\n >(true);\n const [locationOptions, setLocationOptions] = useState<\n VendorLocationOption[]\n >();\n\n useEffect(() => {\n setLocalVendor(vendorParam);\n }, [vendorParam]);\n\n useEffect(() => {\n if (!localVendor?.locations) return;\n const options = createVendorLocationDropdownOptions(localVendor.locations);\n setLocationOptions(options);\n }, [localVendor, vendorLocation]);\n\n useEffect(() => {\n if (!localVendor?.locations) return;\n const vendorLocation = localVendor.locations.find(\n location => location.id === editingLocationId\n );\n setVendorLocation(vendorLocation);\n }, [localVendor, editingLocationId]);\n\n useEffect(() => {\n if (!localVendor) return;\n if (!localVendor.locations) return;\n if (\n vendorLocation === undefined &&\n localVendor.locations.length > 0 &&\n editingLocationId === undefined\n ) {\n const location = getFirstLocation(localVendor.locations);\n setEditingLocationId(location?.id);\n setVendorLocation(location);\n }\n }, [vendorLocation, localVendor, editingLocationId]);\n\n return {\n localVendor,\n vendorLocation,\n editingLocationId,\n isVendorLocationFormValid,\n locationOptions,\n setLocalVendor,\n setVendorLocation,\n setEditingLocationId,\n setIsVendorLocationFormValid,\n setLocationOptions\n };\n}\n\nconst createVendorLocationDropdownOptions = (\n vendorLocations: IVendorLocationDto[] | undefined\n): VendorLocationOption[] | undefined => {\n if (!vendorLocations) return;\n const filteredNullNickname = vendorLocations.filter(\n loc => !isNullOrWhitespace(loc.nickname)\n );\n let options: VendorLocationOption[] | undefined = filteredNullNickname?.map(\n location => {\n if (location.isPrimary) {\n return {\n display:\n location.nickname +\n \" \" +\n strings.contactManagement.vendorDetails.HBPrimaryOffice,\n value: location,\n id: location.id\n };\n }\n if (location.isAlternate) {\n return {\n display:\n location.nickname +\n \" \" +\n strings.contactManagement.vendorDetails.HBAlternateOffice,\n value: location,\n id: location.id\n };\n }\n return {\n display: location.nickname,\n value: location,\n id: location.id\n };\n }\n );\n options = sortBy(options, [\n function (option) {\n return option.display.toLowerCase();\n }\n ]);\n return options;\n};\n\nconst getFirstLocation = (\n locations: IVendorLocationDto[]\n): IVendorLocationDto | undefined => {\n const sortedLocations = sortVendorLocations(locations);\n if (!sortedLocations) return;\n const notNullLocation = sortedLocations.find(\n loc => !isNullOrWhitespace(loc.nickname)\n );\n return notNullLocation ? notNullLocation : locations[0];\n};\n","export const noop = () => {\n return;\n};\n","import constate from \"constate\";\nimport { noop } from \"../common/noop\";\n\ninterface Emitters {\n emitItemDragStart: () => void;\n emitItemDragEnd: () => void;\n}\n\ninterface LayoutEventListenerProps {\n onItemDragStart?: () => void;\n onItemDragEnd?: () => void;\n}\n\nconst useLayoutEventListener = ({\n onItemDragStart,\n onItemDragEnd\n}: LayoutEventListenerProps) => {\n const emitters: Emitters = {\n emitItemDragStart: onItemDragStart || noop,\n emitItemDragEnd: onItemDragEnd || noop\n };\n\n return { emitters };\n};\n\nconst [provider, context] = constate(useLayoutEventListener);\n\nexport const LayoutEventProvider = provider;\nexport const useLayoutEventContext = context;\n","import { Component, ReactChild } from \"react\";\n\ninterface Props {\n children: ReactChild;\n blockOnChange: boolean;\n\n [x: string]: any;\n}\n\n/**\n * This component blocks render unless any non-children\n * props change via shallow comparison.\n *\n * Alternatively if `blockOnChange` is set, render will only\n * be blocked when another non-children prop changes.\n * For example, if you know you do not want to re-render\n * when a certain prop changes (use with care).\n */\nexport class RenderBlocker extends Component {\n shouldComponentUpdate(prevProps: Props) {\n const { blockOnChange, children, ...props } = this.props;\n\n const propsChanged = Object.keys(props).some(\n propName => props[propName] !== prevProps[propName]\n );\n\n return this.props.blockOnChange ? !propsChanged : propsChanged;\n }\n\n render() {\n return this.props.children;\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { TRANSITION_TIMING_FUNCTION, TRANSITION_DURATION } from \"./constants\";\n\ninterface ShadowProps extends React.HTMLAttributes {\n direction: \"to left\" | \"to right\";\n isBold?: boolean;\n isOverDarkBackground?: boolean;\n}\n\nexport const Shadow = ({\n direction,\n isBold,\n isOverDarkBackground,\n ...props\n}: ShadowProps) => {\n let width = isOverDarkBackground ? 6 : 3;\n if (isBold) width = isOverDarkBackground ? 12 : 6;\n\n const left = direction === \"to left\" ? -width : -1;\n const background = `linear-gradient(${direction}, ${colorStops})`;\n\n return (\n \n );\n};\n\nconst colorStops = `\n rgba(0, 0, 0, 0.2) 0px, \n rgba(0, 0, 0, 0.2) 1px, \n rgba(0, 0, 0, 0.1) 1px, \n rgba(0, 0, 0, 0) 100%\n `;\n\ninterface ContainerProps {\n left: number;\n width: number;\n background: string;\n opacity: number;\n}\nconst Container = styled.div`\n background: ${p => p.background};\n top: 0;\n bottom: 0;\n left: ${p => p.left}px;\n opacity: ${p => p.opacity};\n pointer-events: none;\n position: absolute;\n transition-duration: ${TRANSITION_DURATION};\n transition-property: left, opacity, width;\n transition-timing-function: ${TRANSITION_TIMING_FUNCTION};\n width: ${p => p.width}px;\n`;\n","import React, { ComponentType, Fragment } from \"react\";\nimport { GLOBAL_SIDE_NAV_WIDTH } from \"../../common/constants\";\nimport { Shadow } from \"../../common/shadow\";\n\ninterface ComposedGlobalSideNavigationProps {\n topOffset?: number;\n showGlobalSideNavShadow?: boolean;\n contextNavigation?: ComponentType<{}>;\n globalSideNavigation: ComponentType<{}>;\n}\n\nexport const ComposedGlobalSideNavigation = ({\n showGlobalSideNavShadow = true,\n contextNavigation,\n globalSideNavigation\n}: ComposedGlobalSideNavigationProps) => {\n const GlobalNavigation = globalSideNavigation;\n\n return (\n
\n \n {showGlobalSideNavShadow && (\n \n )}\n \n \n
\n );\n};\n","import { TransitionStatus } from \"react-transition-group/Transition\";\nimport { RESIZE_TRANSITION_DURATION } from \"../../common/constants\";\n\nexport const camelToKebab = (str: string): string => {\n return str.replace(/([a-z])([A-Z])/g, \"$1-$2\").toLowerCase();\n};\n\nexport const getTransition = (keys: string[]) => {\n return {\n transition: keys\n .map(\n k =>\n `${camelToKebab(\n k\n )} ${RESIZE_TRANSITION_DURATION}ms cubic-bezier(0.2, 0, 0, 1)`\n )\n .join(\",\")\n };\n};\n\nexport const getStyle = ({ keys, values }: any) => {\n const style: any = {};\n\n keys.forEach((k: any, i: any) => {\n style[k] = values[i];\n });\n\n return style;\n};\n\nexport const getChanges = (keys: string[]) => {\n const props = keys.map(k => camelToKebab(k));\n return { willChange: props.join(\",\") };\n};\n\nexport const isTransitioning = (state: TransitionStatus) => {\n return [\"entering\", \"exiting\"].includes(state);\n};\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { DYNAMIC_NAV_WIDTH } from \"../../common/constants\";\n\ninterface ModuleNavigationWrapperProps {\n isVisible: boolean;\n children: ReactNode;\n}\n\nexport const ModuleNavigationWrapper = ({\n isVisible,\n children\n}: ModuleNavigationWrapperProps) => (\n \n \n {children}\n \n \n);\n\nconst Outer = styled.div`\n box-sizing: border-box;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n position: absolute;\n min-width: ${DYNAMIC_NAV_WIDTH}px;\n overflow-x: hidden;\n background-color: white; \n /* \\${ConcreteColors.gray200}; */\n /*${ConcreteColors.gray200}; color: #ffffff; */\n\n &:not(:only-child) {\n z-index: -1;\n }\n`;\n\ninterface InnerProps {\n isVisible: boolean;\n}\n\nconst Inner = styled.div`\n box-sizing: border-box;\n display: ${p => (p.isVisible ? \"flex\" : \"none\")};\n flex-direction: column;\n height: 100%;\n width: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n`;\n","import React, { ReactNode } from \"react\";\nimport styled, { keyframes } from \"styled-components\";\n\nimport {\n TRANSITION_DURATION,\n TRANSITION_TIMING_FUNCTION\n} from \"../../common/constants\";\n\ninterface ContextNavigationWrapperProps {\n isEntering: boolean;\n isExiting: boolean;\n isVisible: boolean;\n children: ReactNode;\n}\n\nexport const ContextNavigationWrapper = ({\n isEntering,\n isExiting,\n isVisible,\n children\n}: ContextNavigationWrapperProps) => {\n return (\n \n \n {children}\n \n \n );\n};\n\ninterface OuterProps {\n isEntering: boolean;\n isExiting: boolean;\n}\n\nconst Outer = styled.div`\n height: 100%;\n background-color: white;\n animation-duration: ${TRANSITION_DURATION};\n animation-fill-mode: forwards;\n animation-timing-function: ${TRANSITION_TIMING_FUNCTION};\n transition-property: box-shadow, transform;\n transition-duration: ${TRANSITION_DURATION};\n transition-timing-function: ${TRANSITION_TIMING_FUNCTION};\n transform: ${p => (p.isExiting ? \"translateX(100%)\" : undefined)};\n animation-name: ${p => (p.isEntering ? slideIn : undefined)};\n`;\n\ninterface InnerProps {\n isVisible: boolean;\n}\n\nconst Inner = styled.div`\n box-sizing: border-box;\n display: ${p => (p.isVisible ? \"flex\" : \"none\")};\n flex-direction: column;\n height: 100%;\n width: 100%;\n overflow-x: hidden;\n overflow-y: auto;\n`;\n\nconst slideIn = keyframes`\n from { transform: translateX(100%); }\n to { transform: translateX(0); }\n`;\n","import { useRef, useEffect } from \"react\";\n\nexport const useIsMounted = () => {\n const isMounted = useRef(false);\n\n useEffect(() => {\n isMounted.current = true;\n return () => {\n isMounted.current = false;\n };\n }, []);\n\n return isMounted;\n};\n","import React from \"react\";\nimport { Transition } from \"react-transition-group\";\nimport { ComponentType, Fragment, ReactNode } from \"react\";\nimport { ModuleNavigationWrapper } from \"./module-navigation-wrapper\";\nimport { ContextNavigationWrapper } from \"./context-navigation-wrapper\";\nimport { TRANSITION_DURATION_MS } from \"../../common/constants\";\nimport { useIsMounted } from \"../../common/use-is-mounted\";\n\ninterface DynamicNavigationProps {\n isVisible: boolean;\n hideNavVisuallyOnCollapse: boolean;\n contextNavigation?: ComponentType<{}>;\n moduleNavigation: ComponentType<{}>;\n}\nexport const DynamicNavigation = ({\n isVisible,\n contextNavigation,\n moduleNavigation,\n hideNavVisuallyOnCollapse\n}: DynamicNavigationProps) => {\n const isMounted = useIsMounted();\n\n const shouldRenderContext = contextNavigation ? true : false;\n const ContextNavigation = contextNavigation || Fragment;\n const ModuleNavigation = moduleNavigation;\n\n return (\n \n \n \n \n \n \n \n {state => (\n \n \n \n \n \n )}\n \n \n );\n};\n\ninterface ToggleContentProps {\n isVisible: boolean;\n hideNavVisuallyOnCollapse: boolean;\n children: ReactNode;\n}\nconst ToggleContent = ({\n isVisible,\n hideNavVisuallyOnCollapse,\n children\n}: ToggleContentProps) => {\n if (!hideNavVisuallyOnCollapse && !isVisible) return null;\n return {children};\n};\n","import React, { ComponentType, MutableRefObject } from \"react\";\nimport styled from \"styled-components\";\nimport { TransitionStatus } from \"react-transition-group/Transition\";\nimport { isTransitioning } from \"../resize-transition/helpers\";\nimport { DynamicNavigation } from \"../dynamic-navigation\";\nimport { DYNAMIC_NAV_WIDTH_COLLAPSED } from \"../../common/constants\";\n\ninterface ComposedDynamicNavigationProps {\n flyoutOnHover: boolean;\n isCollapsed: boolean;\n isResizing: boolean;\n hideNavVisuallyOnCollapse: boolean;\n contextNavigation?: ComponentType<{}>;\n moduleNavigation: ComponentType<{}>;\n transitionState: TransitionStatus;\n transitionStyle: Record;\n moduleNavigationRef: MutableRefObject;\n expand: () => void;\n}\n\nexport const ComposedDynamicNavigation = ({\n contextNavigation,\n flyoutOnHover,\n moduleNavigation,\n transitionState,\n transitionStyle,\n isCollapsed,\n isResizing,\n hideNavVisuallyOnCollapse,\n moduleNavigationRef,\n expand\n}: ComposedDynamicNavigationProps) => {\n const isVisible = transitionState !== \"exited\";\n const disableInteraction = isResizing || isTransitioning(transitionState);\n\n return (\n (moduleNavigationRef.current = ref || undefined)}\n disableInteraction={disableInteraction}\n style={transitionStyle}\n >\n \n {isCollapsed && !flyoutOnHover && (\n \n )}\n \n );\n};\n\ninterface DynamicNavigationWrapperProps {\n disableInteraction: boolean;\n}\n\nconst DynamicNavigationWrapper = styled.div`\n --interaction: ${p => (p.disableInteraction ? \"none\" : \"auto\")};\n\n height: 100%;\n position: relative;\n pointer-events: var(--interaction);\n user-select: var(--interaction);\n`;\n\nconst ContentCollapsed = styled.div<{ hasContext: boolean }>`\n cursor: pointer;\n outline: 0;\n position: absolute;\n height: 100%;\n width: ${DYNAMIC_NAV_WIDTH_COLLAPSED}px;\n transition: background-color 100ms;\n\n &:hover {\n background-color: rgba(255, 255, 255, 0.08);\n }\n\n &:active {\n background-color: rgba(9, 30, 66, 0.13);\n }\n`;\n","import React, { ReactNode } from \"react\";\nimport Transition from \"react-transition-group/Transition\";\nimport { TransitionStatus } from \"react-transition-group/Transition\";\nimport { RESIZE_TRANSITION_DURATION } from \"../../common/constants\";\nimport { getTransition, getStyle, getChanges } from \"./helpers\";\nimport { useIsMounted } from \"../../common/use-is-mounted\";\n\nimport {\n CollapseListener,\n ExpandListener\n} from \"../../models/collapse-listener\";\n\ninterface TransitionProps {\n transitionStyle: Record;\n transitionState: TransitionStatus;\n}\n\ninterface ResizeTransitionProps {\n in: boolean;\n from: Array;\n to: Array;\n userIsDragging: boolean;\n properties: Array;\n onExpandStart?: ExpandListener;\n onExpandEnd?: ExpandListener;\n onCollapseStart?: CollapseListener;\n onCollapseEnd?: CollapseListener;\n children: (props: TransitionProps) => ReactNode;\n}\n\nexport const ResizeTransition = ({\n in: inProp,\n from,\n to,\n userIsDragging,\n properties,\n onExpandStart,\n onExpandEnd,\n onCollapseStart,\n onCollapseEnd,\n children\n}: ResizeTransitionProps) => {\n const isMounted = useIsMounted();\n\n return (\n \n {transitionState => {\n const transition =\n !userIsDragging && isMounted ? getTransition(properties) : {};\n\n const dynamicProperties = {\n unmounted: {},\n exiting: getStyle({ keys: properties, values: from }),\n exited: getStyle({ keys: properties, values: from }),\n entering: getStyle({ keys: properties, values: to }),\n entered: getStyle({ keys: properties, values: to })\n };\n\n const willChange = getChanges(properties);\n\n const transitionStyle = {\n ...willChange,\n ...transition,\n ...dynamicProperties[transitionState]\n };\n\n return children({\n transitionStyle, // consumers must apply `transitionStyle`\n transitionState // lets consumers react to the current state\n });\n }}\n \n );\n};\n","import React, { MutableRefObject } from \"react\";\nimport styled from \"styled-components\";\n\ninterface ToggleButtonProps\n extends React.ButtonHTMLAttributes {\n buttonRef: MutableRefObject;\n hasHighlight: boolean;\n isVisible: boolean;\n}\nexport const ToggleButton = ({\n buttonRef,\n hasHighlight,\n isVisible,\n children,\n ...props\n}: ToggleButtonProps) => {\n return (\n (buttonRef.current = r || undefined)}\n hasHighlight={hasHighlight}\n isVisible={isVisible}\n {...props}\n >\n \n {children}\n \n );\n};\n\ninterface ButtonProps {\n hasHighlight: boolean;\n isVisible: boolean;\n}\nconst Button = styled.button`\n position: absolute;\n top: 32px;\n height: 24px;\n width: 24px;\n cursor: pointer;\n padding: 0;\n outline: 0;\n border: 0;\n border-radius: 50%;\n background: 0;\n background-color: white;\n box-shadow: 0 0 0 1px rgba(9, 30, 66, 0.08),\n 0 2px 4px 1px rgba(9, 30, 66, 0.08);\n color: ${p => (p.hasHighlight ? \"#4C9AFF\" : \"#6B778C\")};\n opacity: ${p => (p.isVisible ? 1 : 0)};\n\n transition: background-color 100ms linear, color 100ms linear,\n opacity 300ms cubic-bezier(0.2, 0, 0, 1),\n transform 300ms cubic-bezier(0.2, 0, 0, 1);\n transform: translate(-50%);\n\n &:hover {\n background-color: #4c9aff;\n color: white;\n }\n\n &:active {\n background-color: #2684ff;\n color: white;\n }\n\n &:focus {\n opacity: 1;\n background-color: #2684ff;\n color: white;\n }\n`;\n\nconst HitArea = styled.div`\n position: absolute;\n\n &.small {\n top: -4px;\n right: -4px;\n bottom: -4px;\n left: -4px;\n }\n\n &.large {\n top: -8px;\n right: -12px;\n bottom: -8px;\n left: -8px;\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport {\n RESIZE_CONTROL_HANDLE_OFFSET,\n RESIZE_CONTROL_OUTER_WIDTH,\n RESIZE_CONTROL_HANDLE_WIDTH\n} from \"../../common/constants\";\n\ntype GrabAreaProps = React.HTMLAttributes\n\nexport const GrabArea = ({\n isBold,\n showHandle,\n ...props\n}: GrabAreaProps & InnerGrabAreaProps) => {\n return (\n \n \n \n );\n};\n\nconst OuterGrabArea = styled.div`\n cursor: ew-resize;\n position: relative;\n left: -${RESIZE_CONTROL_HANDLE_OFFSET}px;\n height: 100%;\n width: ${RESIZE_CONTROL_OUTER_WIDTH}px;\n`;\n\ninterface InnerGrabAreaProps {\n isBold: boolean;\n showHandle: boolean;\n}\n\nconst InnerGrabArea = styled.div`\n position: absolute;\n left: ${RESIZE_CONTROL_HANDLE_OFFSET - RESIZE_CONTROL_HANDLE_WIDTH / 2}px;\n height: 100%;\n width: ${RESIZE_CONTROL_HANDLE_WIDTH}px;\n background-color: ${p => (p.isBold ? \"#0747A6\" : \"#4C9AFF\")};\n opacity: ${p => (p.showHandle ? 1 : 0)};\n\n transition: opacity 200ms;\n`;\n","import React from \"react\";\nimport styled, { createGlobalStyle } from \"styled-components\";\nimport { Fragment, MutableRefObject } from \"react\";\nimport { Shadow } from \"../../common/shadow\";\nimport { ToggleButton } from \"./toggle-button\";\nimport { GrabArea } from \"./grab-area\";\nimport { UIController } from \"../../controllers/ui-controller\";\n\nimport {\n RESIZE_CONTROL_OUTER_WIDTH,\n DYNAMIC_NAV_WIDTH_COLLAPSED,\n GLOBAL_SIDE_NAV_WIDTH,\n DYNAMIC_NAV_WIDTH,\n GLOBAL_NAV_COLLAPSE_THRESHOLD\n} from \"../../common/constants\";\n\ntype ReactMouseEvent = React.MouseEvent;\n\ninterface MutationRef {\n ref: MutableRefObject;\n property: \"padding-left\" | \"width\";\n}\n\ninterface ResizeControlProps {\n flyoutOnHover: boolean;\n flyoutIsOpen: boolean;\n isGrabAreaDisabled: boolean;\n mutationRefs: MutationRef[];\n toggleButtonRef: MutableRefObject;\n controller: UIController;\n}\n\ninterface ResizeControlState {\n didDragOpen: boolean;\n isDragging: boolean;\n mouseIsDown: boolean;\n mouseIsOverGrabArea: boolean;\n showGrabArea: boolean;\n delta: number;\n initialWidth: number;\n initialX: number;\n width: number;\n}\nexport class ResizeControl extends React.Component<\n ResizeControlProps,\n ResizeControlState\n> {\n invalidDragAttempted = false;\n\n constructor(props: ResizeControlProps) {\n super(props);\n\n const { controller } = props;\n const { moduleNavWidth } = controller.uiState;\n\n this.state = {\n didDragOpen: false,\n isDragging: false,\n mouseIsDown: false,\n mouseIsOverGrabArea: false,\n showGrabArea: true,\n delta: 0,\n initialWidth: 0,\n initialX: 0,\n width: moduleNavWidth\n };\n }\n\n static getDerivedStateFromProps(\n props: ResizeControlProps,\n state: ResizeControlState\n ) {\n const { controller, flyoutOnHover, flyoutIsOpen } = props;\n const { isCollapsed } = controller.uiState;\n const { mouseIsOverGrabArea: current } = state;\n\n // resolve \"hover locking\" issue with resize grab area\n if (flyoutOnHover) {\n const showGrabArea = !isCollapsed && !flyoutIsOpen;\n const mouseIsOverGrabArea = showGrabArea ? current : false;\n\n return {\n mouseIsOverGrabArea,\n showGrabArea\n };\n }\n\n return null;\n }\n\n toggleCollapse = () => this.props.controller.toggleCollapse();\n mouseEnterGrabArea = () => this.setState({ mouseIsOverGrabArea: true });\n mouseLeaveGrabArea = () => this.setState({ mouseIsOverGrabArea: false });\n\n handleResizeStart = (e: ReactMouseEvent) => {\n this.setState({\n initialX: e.pageX,\n mouseIsDown: true\n });\n\n window.addEventListener(\"mousemove\", this.handleResize);\n window.addEventListener(\"mouseup\", this.handleResizeEnd);\n };\n\n initializeDrag = (e: MouseEvent) => {\n const { controller } = this.props;\n const { isCollapsed, moduleNavWidth } = controller.uiState;\n const { initialX } = this.state;\n const delta = e.pageX - initialX;\n\n if (isCollapsed && delta <= 0) {\n this.invalidDragAttempted = true;\n return;\n }\n\n let initialWidth = moduleNavWidth;\n let didDragOpen = false;\n\n // If the product nav is collapsed and the user starts\n // dragging it open, we must expand it and drag should\n // start from 0.\n if (isCollapsed) {\n initialWidth = DYNAMIC_NAV_WIDTH_COLLAPSED;\n didDragOpen = true;\n\n controller.manualResizeStart({\n moduleNavWidth: DYNAMIC_NAV_WIDTH_COLLAPSED,\n isCollapsed: false\n });\n } else {\n controller.manualResizeStart({\n moduleNavWidth,\n isCollapsed\n });\n }\n\n this.setState({\n didDragOpen,\n initialWidth,\n isDragging: true\n });\n };\n\n handleResize = (e: MouseEvent) => {\n const { mutationRefs } = this.props;\n const {\n mouseIsDown,\n isDragging,\n initialX,\n initialWidth,\n width\n } = this.state;\n\n if (!mouseIsDown) return;\n\n if (!isDragging) {\n this.initializeDrag(e);\n return;\n }\n\n const r = calculatePositionChange(e.pageX, initialX, initialWidth);\n updateResizeAreaPosition(mutationRefs, width);\n if (e.clientX < 0) {\n this.setState({ width: DYNAMIC_NAV_WIDTH_COLLAPSED });\n this.handleResizeEnd();\n } else {\n this.setState({\n delta: r.delta,\n width: r.width\n });\n }\n };\n\n handleResizeEnd = () => {\n const { controller, mutationRefs } = this.props;\n const { isCollapsed } = controller.uiState;\n const { isDragging, width, didDragOpen, delta } = this.state;\n\n const expandThreshold = 24;\n const resizerClicked = !isDragging && !this.invalidDragAttempted;\n const currentWidth = width;\n\n let publishWidth = currentWidth;\n let shouldCollapse = false;\n\n if (resizerClicked) {\n publishWidth = Math.max(DYNAMIC_NAV_WIDTH, currentWidth);\n this.toggleCollapse();\n }\n\n if (publishWidth < DYNAMIC_NAV_WIDTH) {\n publishWidth = DYNAMIC_NAV_WIDTH;\n\n if (didDragOpen && delta > expandThreshold) {\n shouldCollapse = false;\n } else if (currentWidth < GLOBAL_NAV_COLLAPSE_THRESHOLD) {\n shouldCollapse = true;\n }\n } else {\n shouldCollapse = isCollapsed;\n }\n\n this.invalidDragAttempted = true;\n this.setState({\n didDragOpen: false,\n isDragging: false,\n mouseIsDown: false,\n width: publishWidth\n });\n\n controller.manualResizeEnd({\n moduleNavWidth: publishWidth,\n isCollapsed: shouldCollapse\n });\n\n if (\n currentWidth >= GLOBAL_NAV_COLLAPSE_THRESHOLD &&\n currentWidth < DYNAMIC_NAV_WIDTH\n ) {\n updateResizeAreaPosition(mutationRefs, DYNAMIC_NAV_WIDTH);\n }\n\n window.removeEventListener(\"mousemove\", this.handleResize);\n window.removeEventListener(\"mouseup\", this.handleResizeEnd);\n };\n\n render() {\n const {\n flyoutIsOpen,\n isGrabAreaDisabled,\n controller,\n toggleButtonRef\n } = this.props;\n\n const {\n isDragging,\n mouseIsDown,\n showGrabArea,\n mouseIsOverGrabArea\n } = this.state;\n\n const { isResizeDisabled, isCollapsed } = controller.uiState;\n const shadowDirection = flyoutIsOpen ? \"to right\" : \"to left\";\n const Icon = isCollapsed ? ChevronRight : ChevronLeft;\n\n return (\n \n {isDragging && }\n \n {!isResizeDisabled && (\n \n {!isGrabAreaDisabled && showGrabArea && (\n \n )}\n
\n e.preventDefault()}\n >\n \n \n
\n
\n )}\n
\n );\n }\n}\n\nconst ChevronLeft = () => {\n return (\n \n \n \n \n \n );\n};\n\nconst ChevronRight = () => {\n return (\n \n \n \n \n \n );\n};\n\nconst calculatePositionChange = (\n pageX: number,\n initialX: number,\n initialWidth: number\n) => {\n const maxWidth = Math.round((window.innerWidth / 4) * 3);\n const minWidth = DYNAMIC_NAV_WIDTH_COLLAPSED;\n const adjustedMax = maxWidth - initialWidth - GLOBAL_SIDE_NAV_WIDTH;\n const adjustedMin = minWidth - initialWidth;\n const delta = Math.max(Math.min(pageX - initialX, adjustedMax), adjustedMin);\n const width = initialWidth + delta;\n\n return { delta, width };\n};\n\nconst updateResizeAreaPosition = (refs: MutationRef[], width: number) => {\n refs.forEach(({ property, ref }) => {\n if (ref.current) {\n const newValue = `${width}px`;\n const oldValue = ref.current.style.getPropertyValue(property);\n if (oldValue === newValue) return;\n\n ref.current.style.setProperty(property, newValue);\n }\n });\n};\n\nconst OuterControl = styled.div`\n position: absolute;\n top: 0px;\n bottom: 0px;\n left: 100%;\n transform: translateZ(0);\n width: ${RESIZE_CONTROL_OUTER_WIDTH}px;\n z-index: 3;\n`;\n\nconst DragCursor = createGlobalStyle`\n body {\n cursor: ew-resize;\n }\n`;\n","import React, { MutableRefObject } from \"react\";\nimport styled from \"styled-components\";\nimport { useState, useRef, Fragment, ComponentType } from \"react\";\nimport { LayoutEventProvider } from \"../../contexts/layout-event-context\";\nimport { useNavigationControllerContext } from \"../../contexts/navigation-controller-context\";\nimport { RenderBlocker } from \"../../common/render-blocker\";\nimport { ComposedGlobalSideNavigation } from \"./composed-global-side-navigation\";\nimport { ComposedDynamicNavigation } from \"./composed-dynamic-navigation\";\nimport { ResizeTransition } from \"../resize-transition\";\nimport { ResizeControl } from \"../resize-control\";\n\nimport {\n DYNAMIC_NAV_WIDTH_COLLAPSED,\n DYNAMIC_NAV_WIDTH_FLYOUT,\n NAVIGATION_LAYER_ZINDEX,\n FLYOUT_DELAY,\n GLOBAL_TOP_NAV_HEIGHT\n} from \"../../common/constants\";\n\ntype ReactMouseEvent = React.MouseEvent;\n\ninterface NavigationProps {\n topOffset?: number;\n flyoutOnHover: boolean;\n fullWidthFlyout: boolean;\n hideNavVisuallyOnCollapse: boolean;\n showGlobalSideNavShadow: boolean;\n useDynamicNavigation: boolean;\n pageRef: MutableRefObject;\n toggleButtonRef: MutableRefObject;\n globalTopNavigation?: ComponentType<{}>;\n globalSideNavigation?: ComponentType<{}>;\n moduleNavigation: ComponentType<{}>;\n contextNavigation?: ComponentType<{}>;\n}\nexport const Navigation = ({\n topOffset,\n flyoutOnHover,\n fullWidthFlyout,\n hideNavVisuallyOnCollapse,\n showGlobalSideNavShadow,\n useDynamicNavigation,\n pageRef,\n toggleButtonRef,\n globalTopNavigation,\n globalSideNavigation,\n moduleNavigation,\n contextNavigation\n}: NavigationProps) => {\n const navigationRef = useRef();\n const moduleNavigationRef = useRef();\n const flyoutTimeout = useRef>();\n const controller = useNavigationControllerContext();\n const { uiState, expand, setFlyoutIsOpen } = controller;\n const { isCollapsed, isResizing, moduleNavWidth, flyoutIsOpen } = uiState;\n const [itemIsDragging, setItemIsDragging] = useState(false);\n\n const GlobalTopNavigation = globalTopNavigation;\n\n const navContainerTopOffset = GlobalTopNavigation\n ? GLOBAL_TOP_NAV_HEIGHT + (topOffset || 0)\n : topOffset;\n\n const flyoutWidth = fullWidthFlyout\n ? moduleNavWidth\n : DYNAMIC_NAV_WIDTH_FLYOUT;\n\n const onMouseOut = ({ currentTarget, relatedTarget }: ReactMouseEvent) => {\n if (!isCollapsed || !flyoutOnHover || !flyoutIsOpen) return;\n if (currentTarget.contains(relatedTarget as Node)) return;\n if (flyoutTimeout.current) clearTimeout(flyoutTimeout.current);\n setFlyoutIsOpen(false);\n };\n\n const onMouseOver = ({ currentTarget, relatedTarget }: ReactMouseEvent) => {\n if (!isCollapsed || !flyoutOnHover || flyoutIsOpen) return;\n if (currentTarget.contains(relatedTarget as Node)) return;\n if (flyoutTimeout.current) clearTimeout(flyoutTimeout.current);\n\n flyoutTimeout.current = setTimeout(\n () => setFlyoutIsOpen(true),\n FLYOUT_DELAY\n );\n };\n\n const onMouseLeave = (e: ReactMouseEvent) => {\n if (flyoutTimeout.current) clearTimeout(flyoutTimeout.current);\n };\n\n return (\n setItemIsDragging(true)}\n onItemDragEnd={() => setItemIsDragging(false)}\n >\n {GlobalTopNavigation && (\n \n \n \n )}\n (navigationRef.current = ref || undefined)}\n topOffset={navContainerTopOffset}\n onMouseOut={onMouseOut}\n onMouseLeave={onMouseLeave}\n >\n \n \n \n {globalSideNavigation && (\n \n \n \n )}\n\n \n {({ transitionStyle, transitionState }) => (\n \n )}\n \n \n \n \n {useDynamicNavigation && (\n \n )}\n \n \n );\n};\n\ninterface NavigationContainerProps {\n topOffset?: number;\n}\n\nconst NavigationContainer = styled.div`\n --top-offset: ${props => (props.topOffset ? props.topOffset : 0)}px;\n\n position: fixed;\n top: var(--top-offset);\n bottom: 0px;\n left: 0px;\n z-index: ${NAVIGATION_LAYER_ZINDEX};\n\n &:hover .toggle-button {\n opacity: 1;\n }\n`;\n\nconst TopNavigationContainer = styled.nav`\n --top-offset: ${props => (props.topOffset ? props.topOffset : 0)}px;\n\n position: fixed;\n top: var(--top-offset);\n width: 100%;\n z-index: calc(${NAVIGATION_LAYER_ZINDEX} + 1);\n`;\n\ninterface NavigationContainerMaskProps {\n disableInteraction?: boolean;\n}\n\nconst NavigationContainerMask = styled.div`\n --interaction: ${p => (p.disableInteraction ? \"none\" : \"auto\")};\n\n display: flex;\n flex-direction: row;\n overflow: hidden;\n height: 100%;\n pointer-events: var(--interaction);\n user-select: var(--interaction);\n`;\n","import React, { MutableRefObject, ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { useNavigationControllerContext } from \"../../contexts/navigation-controller-context\";\nimport { ResizeTransition } from \"../resize-transition\";\nimport { isTransitioning } from \"../resize-transition/helpers\";\nimport { CollapseListeners } from \"../../models/collapse-listener\";\n\nimport {\n DYNAMIC_NAV_WIDTH_COLLAPSED,\n DYNAMIC_NAV_WIDTH_FLYOUT,\n GLOBAL_SIDE_NAV_WIDTH,\n GLOBAL_TOP_NAV_HEIGHT\n} from \"../../common/constants\";\n\ninterface PageContentProps {\n pageRef: MutableRefObject;\n useDynamicNavigation: boolean;\n useGlobalTopNavigation: boolean;\n useGlobalSideNavigation: boolean;\n children: ReactNode;\n}\nexport const PageContent = ({\n pageRef,\n useDynamicNavigation,\n useGlobalTopNavigation,\n useGlobalSideNavigation,\n onExpandStart,\n onExpandEnd,\n onCollapseEnd,\n onCollapseStart,\n children\n}: PageContentProps & CollapseListeners) => {\n const controller = useNavigationControllerContext();\n const {\n isCollapsed,\n moduleNavWidth,\n isResizing,\n flyoutIsOpen\n } = controller.uiState;\n\n const topOffset = useGlobalTopNavigation ? GLOBAL_TOP_NAV_HEIGHT : 0;\n const leftOffset = useGlobalSideNavigation ? GLOBAL_SIDE_NAV_WIDTH : 0;\n const expandedSize = flyoutIsOpen ? DYNAMIC_NAV_WIDTH_FLYOUT : moduleNavWidth;\n const from = useDynamicNavigation ? DYNAMIC_NAV_WIDTH_COLLAPSED : 0;\n const to = useDynamicNavigation ? expandedSize : 0;\n\n return (\n \n {({ transitionStyle, transitionState }) => (\n (pageRef.current = r || undefined)}\n disableInteraction={isResizing || isTransitioning(transitionState)}\n topOffset={topOffset}\n leftOffset={leftOffset}\n style={transitionStyle}\n >\n {children}\n \n )}\n \n );\n};\n\ninterface PageWrapperProps {\n disableInteraction: boolean;\n topOffset: number;\n leftOffset: number;\n}\nconst PageWrapper = styled.div`\n flex: 1 1 auto;\n margin-top: ${p => p.topOffset}px;\n margin-left: ${p => p.leftOffset}px;\n width: 0;\n\n --interaction: ${p => (p.disableInteraction ? \"none\" : \"auto\")};\n pointer-events: var(--interaction);\n user-select: var(--interaction);\n`;\n","import React, { useRef } from \"react\";\nimport styled from \"styled-components\";\nimport { ReactNode, ComponentType } from \"react\";\nimport { Navigation } from \"./navigation\";\nimport { CollapseListeners } from \"../../models/collapse-listener\";\nimport { PageContent } from \"./page-content\";\n\nexport interface LayoutManagerProps extends CollapseListeners {\n topOffset?: number;\n flyoutOnHover: boolean;\n fullWidthFlyout: boolean;\n hideNavVisuallyOnCollapse: boolean;\n showGlobalSideNavShadow: boolean;\n useDynamicNavigation: boolean;\n globalTopNavigation?: ComponentType<{}>;\n globalSideNavigation?: ComponentType<{}>;\n moduleNavigation: ComponentType<{}>;\n contextNavigation?: ComponentType<{}>;\n children: ReactNode;\n}\nexport const LayoutManager = ({\n topOffset,\n flyoutOnHover,\n fullWidthFlyout,\n hideNavVisuallyOnCollapse,\n showGlobalSideNavShadow,\n useDynamicNavigation,\n globalTopNavigation,\n globalSideNavigation,\n moduleNavigation,\n contextNavigation,\n onExpandStart,\n onExpandEnd,\n onCollapseEnd,\n onCollapseStart,\n children\n}: LayoutManagerProps) => {\n const pageRef = useRef();\n const toggleButtonRef = useRef();\n\n return (\n \n \n \n {children}\n \n \n );\n};\n\ninterface LayoutContainerProps {\n topOffset?: number;\n}\n\nconst LayoutContainer = styled.div`\n display: flex;\n flex-direction: row;\n --top-offset: ${props => (props.topOffset ? props.topOffset : 0)}px;\n height: calc(100vh - var(--top-offset));\n margin-top: var(--top-offset);\n`;\n","import React from \"react\";\nimport { NavigationControllerProvider } from \"../contexts/navigation-controller-context\";\nimport {\n LayoutManager,\n LayoutManagerProps\n} from \"../components/layout-manager\";\n\ntype HcssNavigationProps = LayoutManagerProps;\n\nexport const HcssNavigation = (props: HcssNavigationProps) => {\n return (\n \n \n \n );\n};\n","import React from \"react\";\nimport rafSchedule from \"raf-schd\";\n\nconst containerDivStyle: React.CSSProperties = {\n width: \"100%\",\n position: \"relative\"\n};\n\n// Not using styled-components here for performance\n// and framework-agnostic reasons.\nconst sizerStyle: React.CSSProperties = {\n display: \"block\",\n position: \"absolute\",\n top: 0,\n left: 0,\n height: 0,\n width: \"100%\",\n opacity: 0,\n overflow: \"hidden\",\n pointerEvents: \"none\",\n zIndex: -1\n};\n\ninterface Props {\n children: (width?: number) => React.ReactNode;\n onResize?: (width: number) => void;\n /** Optional styles to be applied to the containing element */\n containerStyle?: React.CSSProperties;\n}\n\ninterface State {\n width?: number;\n}\n\n// add a definition for a data field to the resize object\n// since HTMLElements do not have this.\ninterface ResizeObject extends HTMLObjectElement {\n data: string;\n contentDocument: HTMLDocument;\n}\n\nexport default class WidthDetector extends React.Component {\n state: State = {};\n container?: HTMLDivElement;\n resizeObjectDocument?: Window;\n resizeObject?: ResizeObject;\n\n handleResize = rafSchedule(() => {\n const { container } = this;\n if (!container) return;\n\n const width = container.offsetWidth;\n this.setState({ width });\n\n if (this.props.onResize) {\n this.props.onResize(width);\n }\n });\n\n componentDidMount() {\n if (this.resizeObject) {\n this.resizeObject.data = \"about:blank\";\n }\n // Calculate width first time, after object has loaded.\n // Prevents it from getting in a weird state where width is always 0.\n this.handleResize();\n }\n\n componentWillUnmount() {\n this.handleResize.cancel();\n\n if (this.resizeObjectDocument) {\n this.resizeObjectDocument.removeEventListener(\n \"resize\",\n this.handleResize\n );\n }\n }\n\n handleContainerRef = (ref: HTMLDivElement) => {\n if (!ref) return;\n this.container = ref;\n };\n\n handleObjectRef = (ref: ResizeObject) => {\n if (!ref) return;\n\n this.resizeObject = ref;\n };\n\n handleObjectLoad = () => {\n if (!this.resizeObject) return;\n\n this.resizeObjectDocument = this.resizeObject.contentDocument\n .defaultView as Window;\n this.resizeObjectDocument.addEventListener(\"resize\", this.handleResize);\n this.handleResize();\n };\n\n render() {\n const sizerEl = (\n \n );\n // pluck non-DOM props off the props so we can safely spread remaining items\n const {\n containerStyle: _containerStyle,\n onResize,\n children,\n ...props\n } = this.props;\n const containerStyle = _containerStyle || {};\n\n return (\n \n {children(this.state.width)}\n {sizerEl}\n \n );\n }\n}\n","import React, {\n useState,\n useRef,\n useCallback,\n useEffect,\n ReactNode\n} from \"react\";\nimport { throttle } from \"lodash-es\"\n\nconst THROTTLE_INTERVAL = 100;\nconst ITEM_APPROX_MINWIDTH = 66;\nconst calculateHash = (w: number, n: number) => w + \"#\" + n;\n\ninterface OverFlowController {\n visibleItems: ReactNode[];\n overflowItems: ReactNode[];\n updateWidth: any;\n}\nexport const useOverflowController = (\n nodes: ReactNode | ReactNode[]\n): OverFlowController => {\n const items = React.Children.toArray(nodes);\n const [width, setWidth] = useState(9999);\n const [itemsLimit, setItemsLimit] = useState(items.length);\n const [forceEffectValue, triggerForceEffect] = useState({});\n const itemsWidths = useRef([]).current;\n const hashRef = useRef(\"\");\n\n const throttleSetWidth = useCallback(throttle(setWidth, THROTTLE_INTERVAL), [\n setWidth\n ]);\n\n useEffect(() => {\n const lastItemWidth = itemsWidths[itemsLimit];\n const wasJustLimited = lastItemWidth < 0;\n const currentHash = calculateHash(width, itemsLimit);\n\n if (hashRef.current === currentHash) {\n // after removing an item, if width has not changed yet we shedule a force update\n // to handle case where removing an item does not actually trigger width change\n const t = setTimeout(() => {\n hashRef.current = \"\";\n triggerForceEffect({});\n }, THROTTLE_INTERVAL + 50);\n return () => clearTimeout(t);\n }\n\n if (wasJustLimited) {\n // width was updated either via resize or after changing the limit\n // we cap the width between ITEM_APPROX_MINWIDTH and 2*ITEM_APPROX_MINWIDTH\n // because width is throttled so when expanding/resizing it fast, partialWidth\n // will not be reliable (edge case)\n const partialWidth = Math.max(\n Math.min(width + lastItemWidth, ITEM_APPROX_MINWIDTH * 2),\n ITEM_APPROX_MINWIDTH\n );\n itemsWidths[itemsLimit] = partialWidth;\n }\n\n if (width < ITEM_APPROX_MINWIDTH * 0.9 && itemsLimit) {\n // if current width is less than an item approx width we remove an item\n // marking the width as negative so we will calculate it on width update\n // plus we set the has to stabilise not removing more than one element\n // until we are sure width was updated\n setItemsLimit(itemsLimit - 1);\n itemsWidths[itemsLimit - 1] = -(width || 1);\n hashRef.current = calculateHash(width, itemsLimit - 1);\n return;\n }\n\n if (\n width - itemsWidths[itemsLimit] > ITEM_APPROX_MINWIDTH * 1.1 &&\n itemsLimit < items.length\n ) {\n // if we have enough room to accomodate next item width we increase the limit\n setItemsLimit(itemsLimit + 1);\n hashRef.current = calculateHash(width, itemsLimit + 1);\n return;\n }\n }, [width, hashRef, itemsLimit, itemsWidths, forceEffectValue, items.length]);\n\n return {\n visibleItems: items.slice(0, itemsLimit),\n overflowItems: items.slice(itemsLimit),\n updateWidth: throttleSetWidth\n };\n};\n","import React, { useState, useMemo } from \"react\";\nimport constate from \"constate\";\n\ninterface OverFlowStatusProps {\n isVisible: boolean;\n}\nconst useOverflowStatus = ({ isVisible: v }: OverFlowStatusProps) => {\n const [isVisible] = useState(v);\n return isVisible;\n};\n\nconst [Provider, Context] = constate(useOverflowStatus);\n\ninterface OverflowProviderProps {\n isVisible: boolean;\n children: any;\n}\nexport const OverFlowStatusProvider = ({\n children,\n isVisible\n}: OverflowProviderProps) => {\n const value = useMemo(() => isVisible, [isVisible]);\n return {children};\n};\n\nexport const useOverflowStatusContext = Context;\n","import React from \"react\";\n\nexport const DropdownContext = React.createContext(() => {});\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport { DropdownContext } from \"./dropdown-context\";\n\nexport interface DropdownProps {\n className?: string;\n children: any;\n fullWidth?: boolean;\n}\n\nexport interface DropdownState {\n isOpen: boolean;\n toggleRegionWidth: number;\n}\n\nexport class UnstyledDropdown extends React.Component<\n DropdownProps,\n DropdownState\n> {\n private dropdownToggleRef: React.RefObject = React.createRef();\n private dropdownMenuRef: React.RefObject = React.createRef();\n private dropdownToggleRegionRef: React.RefObject = React.createRef();\n\n constructor(props: DropdownProps) {\n super(props);\n this.state = {\n isOpen: false,\n toggleRegionWidth: 0\n };\n if (props.children.length !== 2) {\n throw new Error(\"Dropdown requires dropdown toggle and dropdown menu\");\n }\n }\n\n componentDidMount() {\n document.addEventListener(\"mousedown\", this.toggleClose);\n setTimeout(() => {\n if (this.dropdownToggleRegionRef.current) {\n this.setState({\n toggleRegionWidth: (this.dropdownToggleRegionRef\n .current as Element).getBoundingClientRect().width\n });\n }\n }, 250);\n }\n\n componentWillUnmount() {\n document.removeEventListener(\"mousedown\", this.toggleClose);\n }\n\n toggleClose = (event: any) => {\n if (this.isMuiSelectClick(event)) {\n return;\n }\n\n if (\n this.dropdownToggleRef.current &&\n !this.dropdownToggleRef.current.contains(event.target) &&\n this.dropdownMenuRef.current &&\n !this.dropdownMenuRef.current.contains(event.target)\n ) {\n this.setState({ isOpen: false });\n }\n };\n\n forceClose = () => this.setState({ isOpen: false });\n\n isMuiSelectClick = (event: MouseEvent) => {\n if (!event.target) {\n return false;\n }\n const targetEl = event.target as HTMLElement;\n\n if (!targetEl.className || !targetEl.className.includes) {\n return false;\n }\n\n const clickMuiBackdrop = targetEl.className.includes(\"MuiBackdrop\");\n const clickMuiMenuItem = targetEl.className.includes(\"MuiMenuItem\");\n const clickMuiList = targetEl.className.includes(\"MuiList\");\n\n return clickMuiBackdrop || clickMuiMenuItem || clickMuiList;\n };\n\n handleToggleFromMenu = (event: any) => {\n /* prevent the dropdown menu from hiding if the user clicks somewhere inside the menu container, but not on a link in the menu */\n const clickInsideMenu = (event.target.className as string).includes(\n \"dropdown-menu\"\n );\n\n if (clickInsideMenu || this.isMuiSelectClick(event)) {\n return;\n }\n\n this.setState((prevState, props) => {\n return { isOpen: !prevState.isOpen };\n });\n };\n\n handleToggle = (event: any) => {\n const toggleDropdown = () => {\n this.setState(prevState => {\n return { isOpen: !prevState.isOpen };\n });\n };\n event.preventDefault();\n /* immediately recalculate width of toggle region, then trigger the open/close animation, with the dropdown toggle button pointer */\n this.setState(\n {\n toggleRegionWidth: (this.dropdownToggleRegionRef\n .current as Element).getBoundingClientRect().width\n },\n toggleDropdown\n );\n };\n\n render() {\n //inner ref is used for styled components and ref should be used if dom element\n //currently only supporting inner ref as there isn't a use case yet for ref\n const dropdownToggle = React.cloneElement(\n this.props.children[0],\n {\n onClick: this.handleToggle,\n ref: this.dropdownToggleRef,\n className: classNames(\"dropdown-toggle\", {\n \"dropdown-active\": this.state.isOpen\n }),\n togglewidth: this.state.toggleRegionWidth\n },\n this.props.children[0].props.children\n );\n\n const dropdownMenu = React.cloneElement(\n this.props.children[1],\n {\n isOpen: this.state.isOpen,\n onClick: this.handleToggleFromMenu,\n ref: this.dropdownMenuRef,\n className: classNames(\"dropdown-menu\", {\n \"dropdown-active\": this.state.isOpen\n })\n },\n this.props.children[1].props.children\n );\n\n return (\n \n \n {dropdownToggle}\n {dropdownMenu}\n \n \n );\n }\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { UnstyledDropdown, DropdownProps } from \"./dropdown-unstyled\";\n\nexport class Dropdown extends React.Component {\n render() {\n const { children, className, ...props } = this.props;\n return {children};\n }\n}\n\nconst StyledDropdown = styled(UnstyledDropdown)`\n display: inline-block;\n height: 100%;\n z-index: 990;\n`;\n","import styled from \"styled-components\";\n\nexport const DropdownToggle = styled(\"a\").attrs((props: any) => ({\n href: \"#\",\n togglewidth: props.togglewidth\n}))`\n display: block;\n position: relative;\n border: none;\n height: 100%;\n text-align: left;\n\n &:hover,\n &:focus,\n &.dropdown-active {\n outline: none;\n }\n`;\n","import styled from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { DropdownToggle } from \"./dropdown-toggle\";\n\nexport const DropdownButton = styled(DropdownToggle)`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n align-items: center;\n background: none;\n padding: 0 16px;\n font-size: 1.25rem;\n font-weight: 600;\n color: ${ConcreteColors.gray700};\n z-index: 3;\n transition: 0.2s;\n\n /* to prevent overriding from the default styling for anchor elements */\n &:focus:not(:hover):not(.dropdown-active) {\n color: ${ConcreteColors.gray700};\n }\n\n &:after {\n transition: 0.2s;\n }\n\n /* triangular pointer, shown only while Dropdown is active and DropdownMenu is visible */\n &:after {\n content: \"\";\n display: block;\n position: absolute;\n width: 0;\n height: 0;\n top: 100%;\n left: 0;\n background: none;\n border-top: 0px solid transparent;\n\n border-left-style: solid;\n border-left-color: transparent;\n border-left-width: calc(${props => props.togglewidth}px / 2);\n\n border-right-style: solid;\n border-right-color: transparent;\n border-right-width: calc(${props => props.togglewidth}px / 2);\n transition: 0.2s, border-right-width, border-left-width 0s; /* prevents glitching when toggle region's width changes for whatever reason */\n }\n\n &:hover {\n color: ${ConcreteColors.blue200};\n background: ${ConcreteColors.blue100};\n\n &:after {\n border-top-color: ${ConcreteColors.blue100};\n }\n }\n\n &.dropdown-active {\n color: white;\n background: ${ConcreteColors.blue200};\n\n &:after {\n border-top-color: ${ConcreteColors.blue200};\n }\n }\n\n &:hover,\n &.dropdown-active {\n text-decoration: none !important;\n }\n\n &.dropdown-active {\n &:after {\n border-top-width: 12px;\n /* if we go with the green background color instead, and hover background is same as active background, use the timing function below */\n /* transition: border-top-width 0.2s cubic-bezier(0.5, 0.0, 0.5, 0.5); */\n }\n }\n`;\n","import React from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\n\nexport interface DropdownMenuProps extends React.HTMLProps {\n className?: string;\n /** @ignore */\n isOpen?: boolean;\n right?: boolean;\n fullWidth?: boolean;\n widthEm?: number;\n columnCount?: number;\n columnWidthEm?: number;\n width?: string;\n}\n\nexport const DropdownMenu = styled.div`\n position: absolute;\n top: 42px;\n margin: 0;\n padding: 0 16px 48px 16px;\n background-color: white;\n border: none;\n border-radius: 0;\n box-shadow: -2px 6px 8px -6px ${ConcreteColors.gray500};\n z-index: 2;\n\n display: ${props => (props.isOpen ? \"block\" : \"none\")};\n ${props =>\n (props.right &&\n css`\n right: 0;\n left: auto;\n `) as any};\n ${props =>\n (props.widthEm &&\n css`\n width: 70vw;\n max-width: ${props.widthEm}em;\n `) as any};\n ${props =>\n (props.columnCount &&\n css`\n columns: ${props.columnWidthEm}em ${props.columnCount};\n `) as any};\n ${props =>\n (props.columnWidthEm &&\n css`\n column-width: ${props.columnWidthEm}em;\n `) as any};\n ${props =>\n props.fullWidth &&\n css`\n width: 100vw;\n left: 0px;\n margin-left: 0px;\n max-width: ${props.width};\n columns: ${props.columnCount} ${props.columnWidthEm}rem;\n `};\n`;\n","import styled from \"styled-components\";\n\nexport const DropdownIcon = styled.i`\n font-size: 1.8rem;\n font-weight: 400;\n margin-top: -4px;\n`;\n","import React, { ReactNode, ComponentType } from \"react\";\nimport styled from \"styled-components\";\nimport WidthDetector from \"../../../components/width-detector\";\nimport { useOverflowController } from \"../../../controllers/overflow-controller\";\nimport { OverFlowStatusProvider } from \"../../../contexts/overflow-status-context\";\nimport { Dropdown } from \"./items/dropdown\";\nimport { DropdownButton } from \"./items/dropdown/dropdown-button\";\nimport { DropdownMenu } from \"./items/dropdown/dropdown-menu\";\nimport { DropdownIcon } from \"./items/dropdown/dropdown-icon\";\n\ninterface PrimaryItemsContainerProps {\n moreLabel?: string;\n items: ReactNode;\n create?: ComponentType;\n}\nexport const PrimaryItemsContainer = ({\n moreLabel,\n items,\n create: Create\n}: PrimaryItemsContainerProps) => {\n const controller = useOverflowController(items);\n\n // const overflowContent = useCallback(\n // () => (\n // \n // {overflowItems}\n // \n // ),\n // [overflowItems]\n // );\n\n return (\n \n \n {controller.visibleItems}\n \n\n {controller.overflowItems.length > 0 && (\n \n \n {moreLabel === undefined ? (\n \"•••\"\n ) : (\n <>\n {moreLabel} \n \n \n )}\n \n \n \n {controller.overflowItems}\n \n \n \n )}\n\n {Create && }\n\n \n {() => null}\n \n \n );\n};\n\nconst Wrapper = styled.div`\n align-items: stretch;\n display: flex;\n flex-grow: 1;\n flex-shrink: 0;\n flex-basis: 0;\n height: 100%;\n position: relative;\n\n & > * {\n flex-shrink: 0;\n margin: 0 4px;\n }\n\n &::after {\n content: \"\";\n position: absolute;\n top: 0;\n right: 0;\n height: 100%;\n width: 24px;\n background: linear-gradient(\n 90deg,\n rgba(255, 255, 255, 0) 0%,\n rgba(255, 255, 255, 0.7) 50%,\n rgb(255, 255, 255) 100%\n );\n }\n`;\n\nconst OverflowDropdownMenu = styled(DropdownMenu)`\n padding: 16px 24px 12px 24px;\n\n & .dropdown-menu-item > a {\n padding: 10px 0;\n }\n`;\n","import React, { ComponentType, ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { PrimaryItemsContainer } from \"./primary-item-container\";\nimport { GLOBAL_TOP_NAV_HEIGHT } from \"../../../common/constants\";\n\ninterface GlobalTopNavigationProps {\n appSwitcherComponent?: ComponentType;\n productHomeComponent?: ComponentType;\n primaryItems: ReactNode[];\n secondaryItems: ReactNode[];\n moreLabel?: string;\n createButtonComponent?: ComponentType;\n testId?: string;\n}\nexport const GlobalTopNavigation = ({\n appSwitcherComponent: AppSwitcher,\n productHomeComponent: ProductHome,\n primaryItems,\n secondaryItems,\n moreLabel,\n createButtonComponent: Create,\n testId\n}: GlobalTopNavigationProps) => {\n return (\n \n \n {AppSwitcher && }\n {ProductHome && }\n\n \n \n\n \n {secondaryItems}\n \n \n );\n};\n\nconst Container = styled.div`\n align-items: center;\n box-sizing: border-box;\n display: flex;\n flex-shrink: 0;\n justify-content: space-between;\n padding-left: 0px;\n padding-right: 0px;\n height: ${GLOBAL_TOP_NAV_HEIGHT}px;\n position: relative;\n font-size: 14px;\n background-color: rgb(255, 255, 255);\n z-index: 801;\n\n &::after {\n content: \"\";\n position: absolute;\n left: 0;\n right: 0;\n top: 100%;\n height: 4px;\n background: linear-gradient(\n rgba(9, 30, 66, 0.13) 0px,\n rgba(9, 30, 66, 0.13) 1px,\n rgba(9, 30, 66, 0.08) 1px,\n rgba(9, 30, 66, 0) 4px\n );\n }\n`;\n\nconst PrimaryContainerWrapper = styled.div`\n display: flex;\n flex-grow: 1;\n align-items: center;\n min-width: 0px;\n height: inherit;\n padding-left: 12px;\n\n & > * {\n flex-shrink: 0;\n }\n`;\n\nconst SecondaryContainerWrapper = styled.div`\n display: flex;\n flex-shrink: 0;\n align-items: center;\n height: inherit;\n\n & > * {\n flex-shrink: 0;\n margin-right: 0px;\n }\n`;\n","import React, { ReactNode } from \"react\";\nimport styled, { css, createGlobalStyle } from \"styled-components\";\nimport { OverlayTrigger, Tooltip, ConcreteColors } from \"hcss-components\";\nimport { NamedColor } from \"../../../../models/css-colors\";\nimport { Badge } from \"@mui/material\";\nimport { SideNavigationOptions } from \"modules/layout/components/navigation/side-navigation\";\nimport { selectors as estimateSelectors } from \"modules/estimates\";\nimport { useSelector } from \"react-redux\";\nimport { useFeatureFlags } from \"modules/configurationSettings/use-feature-flags\";\nimport { FeatureFlag } from \"core/models\";\n\ninterface SideNavigationMenuItemProps {\n hoverTitle: string;\n itemId: SideNavigationOptions;\n icon?: ReactNode;\n itemContainerStyle?: React.CSSProperties;\n buttonStyle?: React.CSSProperties;\n isSelected?: boolean;\n buttonColor?: {\n default: NamedColor;\n selected: NamedColor;\n hover: NamedColor;\n };\n buttonBackgroundColor?: {\n default: NamedColor;\n selected: NamedColor;\n hover: NamedColor;\n };\n onClick?: () => void;\n testId?: string;\n}\nexport const GlobalItem = ({\n icon,\n itemId,\n hoverTitle,\n isSelected = false,\n itemContainerStyle,\n buttonStyle,\n buttonColor,\n buttonBackgroundColor,\n onClick,\n testId\n}: SideNavigationMenuItemProps) => {\n return (\n \n \n \n \n {hoverTitle}\n \n }\n >\n \n {icon}\n \n \n \n \n );\n};\n\ninterface SideNavBadgeProps {\n itemId: SideNavigationOptions;\n children: ReactNode;\n}\n\nconst SideNavBadge = ({ itemId, children }: SideNavBadgeProps) => {\n switch (itemId) {\n case SideNavigationOptions.Projects:\n return {children};\n default:\n return <>{children};\n }\n};\n\ninterface ProjectNavBadgeProps {\n children: ReactNode;\n}\n\nconst ProjectNavBadge = ({ children }: ProjectNavBadgeProps) => {\n const unlinkedEstimateCount = useSelector(\n estimateSelectors.getUnlinkedAndUnhiddenEstimatesCount\n );\n\n return (\n \n {children}\n \n );\n};\n\nconst ItemWrapper = styled.div`\n width: 100%;\n align-items: center;\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding: 4px;\n`;\n\nconst TooltipStyling = createGlobalStyle`\n .tooltip {\n background-color: ${ConcreteColors.gray600};\n margin: 0;\n border-radius: 4px;\n pointer-events:none;\n .tooltip-arrow {\n display: none;\n }\n \n .tooltip-inner {\n background-color: transparent;\n font-weight: 500;\n font-size: 13px;\n }\n }\n`;\n\ninterface ButtonProps {\n isSelected: boolean;\n buttonColor?: {\n default: NamedColor;\n selected: NamedColor;\n hover: NamedColor;\n };\n buttonBackgroundColor?: {\n default: NamedColor;\n selected: NamedColor;\n hover: NamedColor;\n };\n}\nconst Button = styled.button`\n ${p =>\n p.isSelected\n ? css`\n color: ${p.buttonColor?.selected ?? ConcreteColors.blue200};\n background-color: ${p.buttonBackgroundColor?.selected ??\n \"rgba(0,0,0,0.08)\"};\n `\n : css`\n color: ${p.buttonColor?.default ?? ConcreteColors.gray500};\n background-color: ${p.buttonBackgroundColor?.default ??\n \"transparent\"};\n `};\n\n align-items: center;\n display: flex;\n justify-content: center;\n position: relative;\n border-radius: 50%;\n height: 42px;\n width: 42px;\n border-width: 0px;\n outline: none;\n margin-bottom: 12px;\n cursor: pointer;\n\n &:hover {\n color: ${p => p.buttonColor?.hover ?? ConcreteColors.blue200};\n background-color: ${p =>\n p.buttonBackgroundColor?.hover ?? \"rgba(0,0,0,0.08)\"};\n }\n`;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { GLOBAL_SIDE_NAV_WIDTH } from \"../../../common/constants\";\nimport { GlobalItem } from \"./items\";\nimport { Icon, ConcreteColors } from \"hcss-components\";\n\ninterface GlobalSideNavigationProps {\n topOffset?: number;\n style?: React.CSSProperties;\n primaryItems: ReactNode[];\n secondaryItems: ReactNode[];\n showCreateButton?: boolean;\n createHoverTitle?: string;\n onCreate?: () => void;\n testId?: string;\n}\nexport const GlobalSideNavigation = ({\n topOffset = 0,\n style,\n primaryItems,\n secondaryItems,\n showCreateButton = false,\n createHoverTitle = \"\",\n onCreate,\n testId\n}: GlobalSideNavigationProps) => {\n return (\n \n \n {showCreateButton && (\n \n }\n hoverTitle={createHoverTitle}\n buttonStyle={{\n borderRadius: \"50%\",\n width: 40,\n height: 40,\n boxShadow: \"-1px 3px 6px rgba(0,0,0,0.5)\"\n }}\n buttonColor={{\n default: \"white\",\n selected: \"white\",\n hover: \"white\"\n }}\n buttonBackgroundColor={{\n default: ConcreteColors.blue200,\n selected: ConcreteColors.blue200,\n hover: ConcreteColors.blue300\n }}\n onClick={onCreate}\n />\n \n )}\n {primaryItems}\n \n\n \n {secondaryItems}\n \n \n );\n};\n\nconst Container = styled.div<{ topOffset: number }>`\n --top-offset: ${p => p.topOffset}px;\n\n box-sizing: border-box;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 20px;\n padding-top: 24px;\n transition: background-color 0.3s cubic-bezier(0.2, 0, 0, 1),\n color 0.3s cubic-bezier(0.2, 0, 0, 1);\n height: calc(100vh - var(--top-offset));\n width: ${GLOBAL_SIDE_NAV_WIDTH}px;\n`;\n\nconst CreateContainerWrapper = styled.div`\n padding-bottom: 30px;\n`;\n\nconst PrimaryContainerWrapper = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: space-between;\n width: 100%;\n padding-bottom: 16px;\n`;\n\nconst SecondaryContainerWrapper = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: space-between;\n width: 100%;\n padding-top: 8px;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { selectors as accountSelectors, useHcssUser } from \"modules/account\";\nimport { Dropdown } from \"./dropdown\";\nimport { DropdownMenu } from \"./dropdown/dropdown-menu\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { DropdownButton } from \"./dropdown/dropdown-button\";\nimport { DropdownIcon } from \"./dropdown/dropdown-icon\";\nimport { useSelector } from \"react-redux\";\nimport { TextOverflow, UserType } from \"core\";\nimport { strings } from \"localization\";\n\nexport interface ProfileMenuProps {\n className?: string;\n /** MenuItem, Divider, or equivalent. */\n children: any;\n firstName: string;\n lastName?: string;\n /** Depending on product this could be business unit or company. */\n subtext: string;\n guest?: boolean;\n}\n\nexport const ProfileMenu = ({\n firstName,\n lastName,\n subtext,\n children,\n guest\n}: ProfileMenuProps) => {\n const selectedBU = useSelector(accountSelectors.getSelectedBusinessUnit);\n const user = useHcssUser();\n\n const showCurrentBU = !guest && user.type !== UserType.Subcontractor;\n\n const fullName =\n lastName !== undefined ? `${firstName} ${lastName[0]}.` : `${firstName}`;\n return (\n \n \n \n \n \n \n
{fullName}
\n
{subtext}
\n {showCurrentBU && (\n
\n
\n \n {strings.layout.profile.currentBU}: {selectedBU.code}\n \n
\n
\n )}\n
\n {children}\n
\n
\n );\n};\n\nconst ProfileMenuUserInfo = styled(\"div\")`\n background: ${ConcreteColors.gray100};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n padding: 12px 12px;\n margin-bottom: 16px;\n line-height: normal;\n\n & > .profile-menu-maintext {\n width: 100px;\n overflow: hidden;\n font-size: 18px;\n font-weight: 700;\n margin-bottom: 2px;\n }\n\n & > .profile-menu-subtext {\n font-size: 12px;\n color: ${ConcreteColors.gray600};\n overflow: hidden;\n display: flex;\n margin-top: 6px;\n }\n`;\n\nconst ProfileDropdownMenu = styled(DropdownMenu)`\n padding: 20px 16px 12px 16px;\n\n & .dropdown-menu-item > a {\n padding: 10px 0;\n }\n`;\n","import React from \"react\";\nimport { DropdownContext } from \"./dropdown-context\";\n\nexport const DropdownMenuManager = (WrappedComponent: any) => (props: any) => {\n return (\n \n {value => }\n \n );\n};\n","import React from \"react\";\nimport classNames from \"classnames\";\nimport styled, { css } from \"styled-components\";\nimport { Link } from \"react-router-dom\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { DropdownMenuManager } from \"./dropdown-menu-manager\";\n\nexport interface LinkProps extends React.HTMLProps {\n /** Where does it go? */\n to?: any;\n /** The style of link you want to use. Currently only a Delete style can be chosen apart from the default one. Requires an onClick to be passed in order to apply the style. */\n hcssStyle?: \"Delete\";\n /** Force rendering of regular anchor tag, instead of react router link. Using the to prop is preferred over setting this prop. */\n renderHtmlAnchor?: boolean;\n testId?: string;\n}\n\nexport interface DropdownMenuItemProps extends LinkProps {\n /** (Optional) Specify an icon class to use an icon at the beginning of your menu item */\n iconClassName?: string;\n}\n\nfunction UpgradedDropdownMenuItem({\n className,\n iconClassName,\n children,\n to,\n ref,\n onClick,\n ...props\n}: DropdownMenuItemProps) {\n const useReactRouterLink = to !== undefined;\n\n return (\n \n {useReactRouterLink ? (\n \n {iconClassName && }\n {children}\n \n ) : (\n \n {iconClassName && }\n {children}\n \n )}\n \n );\n}\n\nexport const DropdownMenuItem = styled(\n DropdownMenuManager(UpgradedDropdownMenuItem)\n)`\n ${props =>\n props.disabled === true &&\n css`\n text-decoration: none;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n opacity: 0.65;\n pointer-events: none;\n cursor: not-allowed;\n `};\n`;\n\nconst Icon = styled.i`\n width: 19.5px;\n margin-right: 10px;\n`;\n\nconst MenuItemLink = styled.div`\n .dropdown-menu-link {\n display: inline-block;\n font-size: 1.35rem;\n line-height: normal;\n padding: 6px 0;\n max-width: 100%;\n color: ${ConcreteColors.gray700};\n cursor: pointer;\n }\n .dropdown-menu-link:hover {\n color: ${ConcreteColors.blue200};\n }\n\n .dropdown-menu-link:active {\n color: ${ConcreteColors.blue300};\n }\n`;\n","import styled from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\n\nexport const DropdownMenuDivider = styled.div.attrs(_ => ({\n className: \"dropdown-menu-divider\"\n}))`\n height: 1px;\n margin: 8px 0;\n overflow: hidden;\n background-color: ${ConcreteColors.gray300};\n font-size: 0;\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Dropdown } from \"./dropdown\";\nimport { DropdownMenu } from \"./dropdown/dropdown-menu\";\nimport { DropdownMenuItem } from \"./dropdown/dropdown-menu-item\";\nimport { DropdownButton } from \"./dropdown/dropdown-button\";\nimport { DropdownIcon } from \"./dropdown/dropdown-icon\";\nimport { DropdownMenuDivider } from \"./dropdown/dropdown-menu-divider\";\n\nexport interface HelpMenuProps {\n guest?: boolean;\n children?: any;\n}\n\nexport const HelpMenu: React.StatelessComponent = props => {\n const children =\n props.guest !== undefined && props.guest\n ? HelpMenuGuestProps.children\n : props.children;\n\n return (\n \n \n \n \n {children}\n \n );\n};\n\nconst HelpMenuGuestProps = {\n children: (\n
\n \n Help Center\n \n \n Contact Support\n \n \n \n About HCSS\n \n
\n )\n};\n\nHelpMenu.defaultProps = {\n children: (\n <>\n \n Help Center\n \n \n Contact Support\n \n \n Help Line: 1-855-231-7876\n \n \n \n Log a Product Suggestion\n \n \n About HCSS\n \n \n )\n};\n\nconst HelpDropdownMenu = styled(DropdownMenu)`\n padding: 16px 24px 12px 24px;\n\n & .dropdown-menu-item > a {\n padding: 10px 0;\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\n\nexport interface DropdownMenuHeadingProps {\n /** (Optional) Specify an icon class to use an icon at the beginning of your heading */\n iconClassName?: string;\n children: string;\n}\n\nexport const DropdownMenuHeading = ({\n iconClassName,\n children\n}: DropdownMenuHeadingProps) => {\n return (\n \n {iconClassName && }\n {children}\n \n );\n};\n\nconst Icon = styled.i`\n width: 19.5px;\n margin-right: 10px;\n`;\n\nconst MenuHeading = styled.div`\n display: block;\n font-size: 1.22rem;\n font-weight: 600;\n text-transform: uppercase;\n margin: 0 0 12px 0;\n color: ${ConcreteColors.gray600};\n`;\n","import { css, keyframes } from \"styled-components\";\nimport { TransitionStatus } from \"react-transition-group/Transition\";\n\nimport {\n TRANSITION_DURATION,\n TRANSITION_TIMING_FUNCTION\n} from \"../../common/constants\";\n\ninterface AnimationStyles {\n state: TransitionStatus;\n traversalDirection?: \"up\" | \"down\";\n}\n\nexport const getAnimationStyles = ({\n state,\n traversalDirection\n}: AnimationStyles) => {\n if (![\"entering\", \"exiting\"].includes(state)) return {};\n if (!traversalDirection) return {};\n\n if (state === \"entering\") {\n const animationName =\n traversalDirection === \"down\" ? enterAnimationDown : enterAnimationUp;\n\n return css`\n animation-duration: ${TRANSITION_DURATION};\n animation-fill-mode: forwards;\n animation-timing-function: ${TRANSITION_TIMING_FUNCTION};\n position: absolute;\n width: 100%;\n z-index: 1;\n animation-name: ${animationName};\n `;\n }\n\n // Exiting\n const animationName =\n traversalDirection === \"down\" ? exitAnimationDown : exitAnimationUp;\n\n return css`\n animation-duration: ${TRANSITION_DURATION};\n animation-fill-mode: forwards;\n animation-timing-function: ${TRANSITION_TIMING_FUNCTION};\n animation-name: ${animationName};\n `;\n};\n\nconst enterAnimationDown = keyframes`\n from { transform: translateX(100%); }\n to { transform: translateX(0%); }\n`;\n\nconst enterAnimationUp = keyframes`\n from { transform: translateX(-100%); }\n to { transform: translateX(0%); }\n`;\n\nconst exitAnimationDown = keyframes`\n from { transform: translateX(0); }\n to { transform: translateX(-100%); }\n`;\n\nconst exitAnimationUp = keyframes`\n from { transform: translateX(0); }\n to { transform: translateX(100%); }\n`;\n","import React, { useState, Fragment, ReactNode, useCallback } from \"react\";\nimport styled from \"styled-components\";\nimport { TransitionGroup, Transition } from \"react-transition-group\";\nimport { useIsMounted } from \"../../common/use-is-mounted\";\nimport { usePrevious } from \"../../common/use-previous\";\nimport { getAnimationStyles } from \"./get-animation-styles\";\n\nimport {\n TRANSITION_DURATION_MS,\n SCROLL_HINT_HEIGHT,\n SCROLL_BAR_SIZE,\n SCROLL_HINT_SPACING\n} from \"../../common/constants\";\n\nexport interface SectionProps {\n id?: string;\n parentId?: string;\n shouldGrow?: boolean;\n alwaysShowScrollHint?: boolean;\n children: (styles: React.CSSProperties) => ReactNode;\n}\nexport const Section = ({\n id,\n parentId,\n shouldGrow = false,\n alwaysShowScrollHint = false,\n children\n}: SectionProps) => {\n const isMounted = useIsMounted();\n const [traversalDirection, setTraversalDirection] = useState<\"up\" | \"down\">();\n const prevId = usePrevious(id);\n const prevParentId = usePrevious(parentId);\n\n useCallback(() => {\n if (parentId && parentId === prevId) {\n setTraversalDirection(\"down\");\n }\n if (prevParentId && prevParentId === id) {\n setTraversalDirection(\"up\");\n }\n }, [id, parentId, prevId, prevParentId]);\n\n const TransitionGroupComponent = shouldGrow\n ? ScrollableTransitionGroup\n : StaticTransitionGroup;\n\n return (\n \n \n {state => {\n const animationStyles = getAnimationStyles({\n state,\n traversalDirection\n });\n return (\n \n {shouldGrow ? (\n \n \n {children({\n boxSizing: \"border-box\",\n paddingLeft: 16,\n paddingRight: 16\n })}\n \n \n ) : (\n \n {children({\n boxSizing: \"border-box\",\n paddingLeft: 18,\n paddingRight: 18\n })}\n \n )}\n \n );\n }}\n \n \n );\n};\n\nconst ScrollableSectionWrapper = styled.div`\n position: relative;\n overflow: hidden;\n height: 100%;\n width: 100%;\n\n &::before {\n content: \"\";\n display: block;\n flex: 0;\n position: absolute;\n top: 0;\n right: ${SCROLL_HINT_SPACING + SCROLL_BAR_SIZE}px;\n left: ${SCROLL_HINT_HEIGHT}px;\n height: ${SCROLL_HINT_HEIGHT}px;\n z-index: 1;\n border-radius: 1px;\n }\n\n &::after {\n content: \"\";\n display: block;\n flex: 0;\n position: absolute;\n left: ${SCROLL_HINT_HEIGHT}px;\n right: ${SCROLL_HINT_SPACING + SCROLL_BAR_SIZE}px;\n bottom: 0;\n height: ${SCROLL_HINT_HEIGHT}px;\n z-index: 1;\n border-radius: 1px;\n }\n`;\n\nconst ScrollableSectionInner = styled.div<{ alwaysShowScrollHint: boolean }>`\n display: flex;\n flex-direction: column;\n flex-basis: 100%;\n height: 100%;\n justify-content: flex-start;\n overflow-y: auto;\n position: relative;\n\n &::before {\n content: \"\";\n display: ${p => (p.alwaysShowScrollHint ? \"none\" : \"block\")};\n flex-shrink: 0;\n position: relative;\n height: ${SCROLL_HINT_HEIGHT}px;\n margin-left: ${SCROLL_HINT_HEIGHT}px;\n border-radius: 1px;\n z-index: 2;\n }\n\n &::after {\n content: \"\";\n display: block;\n flex-shrink: 0;\n position: relative;\n height: ${SCROLL_HINT_HEIGHT}px;\n margin-left: ${SCROLL_HINT_HEIGHT}px;\n margin-top: auto;\n border-radius: 1px;\n z-index: 2;\n }\n`;\n\nconst StaticSectionWrapper = styled.div``;\n\nconst StaticTransitionGroup = styled.div.attrs(_ => ({\n className: \"static-transition-group\"\n}))`\n position: relative;\n`;\n\nconst ScrollableTransitionGroup = styled.div.attrs(_ => ({\n className: \"scrollable-transition-group\"\n}))`\n position: relative;\n flex: 1 1 100%;\n overflow-y: hidden;\n`;\n","import React, { CSSProperties, Fragment } from \"react\";\nimport { Section, SectionProps } from \"./base\";\n\nexport const HeaderSection = ({ children, ...props }: SectionProps) => {\n return (\n
\n {baseStyles => {\n const headerStyles: CSSProperties = { paddingTop: 20 };\n const mergedStyles = { ...baseStyles, ...headerStyles };\n return {children(mergedStyles)};\n }}\n
\n );\n};\n","import React, { CSSProperties, Fragment } from \"react\";\nimport { Section, SectionProps } from \"./base\";\n\nexport const MenuSection = ({ children, ...props }: SectionProps) => {\n return (\n
\n {baseStyles => {\n const menuStyles: CSSProperties = { paddingBottom: 12 };\n const mergedStyles = { ...baseStyles, ...menuStyles };\n return {children(mergedStyles)};\n }}\n
\n );\n};\n","import styled from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\n\nexport const SectionHeading = styled.div`\n display: flex;\n align-items: center;\n color: inherit;\n flex-shrink: 0;\n font-size: 11px;\n font-weight: 700;\n letter-spacing: 0.025em;\n text-transform: uppercase;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: ${ConcreteColors.gray600};\n height: 44px;\n padding-left: 12px;\n padding-right: 12px;\n margin-top: 8px;\n`;\n","import React, { ReactNode, Fragment, CSSProperties } from \"react\";\nimport styled from \"styled-components\";\nimport { ConcreteColors, OverlayTrigger, Tooltip } from \"hcss-components\";\nimport { Link } from \"react-router-dom\";\nimport { FullProjectTrackingOnlyTooltip } from \"modules/schemas/components/full-project-tracking-only-tooltip\";\n\ninterface ItemProps {\n text: ReactNode;\n subText?: string;\n before?: ReactNode;\n after?: ReactNode;\n isSelected?: boolean;\n to?: string;\n onClick?: () => void;\n onMouseEnter?: (e: React.MouseEvent) => void;\n onMouseLeave?: (e: React.MouseEvent) => void;\n \"data-testid\"?: string;\n isDisabled?: boolean;\n isLimitedCompany?: boolean;\n isTempDisabled?: boolean;\n beforeWrapperStyle?: CSSProperties;\n}\nexport const Item = (props: ItemProps) => {\n const {\n text,\n subText,\n before,\n after,\n isSelected = false,\n to,\n onClick,\n onMouseEnter,\n onMouseLeave,\n isDisabled,\n isLimitedCompany,\n isTempDisabled,\n beforeWrapperStyle\n } = props;\n const renderInternal = () => {\n return (\n \n {before && (\n \n {before}\n \n )}\n\n \n {text}\n {subText && {subText}}\n \n\n {after && {after}}\n \n );\n };\n\n if (isTempDisabled) {\n return (\n \n Temporarily disabled due to maintenance. Please try again later.\n \n }\n >\n {renderInternal()}\n \n );\n }\n\n if (onClick || !to) {\n return (\n \n \n {renderInternal()}\n \n \n );\n }\n if (isLimitedCompany) {\n return (\n \n {renderInternal()}\n \n );\n }\n return (\n {} : onMouseEnter}\n onMouseLeave={isDisabled ? () => {} : onMouseLeave}\n data-testid={props[\"data-testid\"]}\n >\n {!isDisabled ? (\n \n {renderInternal()}\n \n ) : (\n {renderInternal()}\n )}\n \n );\n};\n\nconst InteractiveStateManager = styled.div`\n display: flex;\n align-items: center;\n flex-direction: column;\n justify-content: space-between;\n width: 100%;\n`;\n\nconst ItemBaseButton = styled.button`\n align-items: center;\n border: none;\n border-radius: 3px;\n box-sizing: border-box;\n cursor: pointer;\n display: flex;\n flex-shrink: 0;\n height: 40px;\n outline: none;\n text-align: left;\n text-decoration: none;\n width: 100%;\n padding-right: 12px;\n padding-left: 12px;\n background-color: transparent;\n\n &:hover {\n background-color: ${ConcreteColors.gray100};\n }\n\n &[data-selected=\"true\"] {\n color: ${ConcreteColors.blue200};\n background-color: #e2effa;\n\n &:focus,\n &:hover {\n color: ${ConcreteColors.blue200};\n background-color: #e2effa;\n }\n }\n`;\n\nconst ItemBaseLink = styled(Link)`\n align-items: center;\n border: none;\n border-radius: 3px;\n box-sizing: border-box;\n cursor: pointer;\n display: flex;\n flex-shrink: 0;\n height: 40px;\n outline: none;\n text-align: left;\n text-decoration: none;\n width: 100%;\n padding-right: 12px;\n padding-left: 12px;\n color: inherit;\n background-color: transparent;\n\n &:hover {\n color: inherit;\n background-color: ${ConcreteColors.gray100};\n text-decoration: none;\n }\n\n &[data-selected=\"true\"] {\n color: ${ConcreteColors.blue200};\n background-color: #e2effa;\n\n &:focus,\n &:hover {\n color: ${ConcreteColors.blue200};\n background-color: #e2effa;\n }\n }\n`;\n\nconst ItemDisabledLink = styled.div`\n align-items: center;\n border: none;\n border-radius: 3px;\n box-sizing: border-box;\n cursor: not-allowed;\n display: flex;\n flex-shrink: 0;\n height: 40px;\n outline: none;\n text-align: left;\n text-decoration: none;\n width: 100%;\n padding-right: 12px;\n padding-left: 12px;\n color: ${ConcreteColors.gray500} !important;\n background-color: ${ConcreteColors.gray300} !important;\n`;\n\nconst BeforeWrapper = styled.div`\n display: flex;\n align-items: center;\n flex-shrink: 0;\n margin-right: 16px;\n`;\n\nconst AfterWrapper = styled.div`\n display: flex;\n align-items: center;\n flex-shrink: 0;\n margin-left: 8px;\n`;\n\nconst ContentWrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex-grow: 1;\n overflow-x: hidden;\n`;\n\nconst TextWrapper = styled.div`\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n line-height: calc(16 / 14);\n`;\n\nconst SubTextWrapper = styled.div`\n flex: 1 1 auto;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-size: 12px;\n line-height: calc(14 / 12);\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Section } from \"../sections/base\";\nimport { ConcreteColors } from \"hcss-components\";\n\nexport const PlaceholderDynamicMenu = () => {\n return (\n \n
\n {baseStyles => {\n return (\n \n \n \n );\n }}\n
\n
\n {baseStyles => {\n return (\n
\n \n \n \n \n \n
\n );\n }}\n
\n
\n );\n};\n\ninterface PlaceHolderProps {\n hasBefore?: boolean;\n wrapperStyles?: React.CSSProperties;\n beforeStyles?: React.CSSProperties;\n contentStyles?: React.CSSProperties;\n}\nconst PlaceHolderHeaderContainer = (props: PlaceHolderProps) => {\n return (\n \n );\n};\n\nexport const PlaceHolderItem = ({\n hasBefore = false,\n wrapperStyles,\n beforeStyles,\n contentStyles\n}: PlaceHolderProps) => {\n return (\n \n {hasBefore && }\n \n \n );\n};\n\nconst Container = styled.div.attrs(_ => ({\n className: \"dynamic-menu-placeholder-container\"\n}))``;\n\nconst HeaderContainer = styled.div.attrs(_ => ({\n className: \"dynamic-menu-placeholder-header-container\"\n}))`\n padding: 20px 18px;\n`;\n\nconst ItemWrapper = styled.div.attrs(_ => ({\n className: \"dynamic-menu-placeholder-item-wrapper\"\n}))`\n align-items: center;\n display: flex;\n height: 40px;\n padding: 12px;\n opacity: 0.5;\n`;\n\nconst ItemBefore = styled.div.attrs(_ => ({\n className: \"dynamic-menu-placeholder-item-before\"\n}))`\n background-color: ${ConcreteColors.gray300};\n border-radius: 3px;\n flex-shrink: 0;\n height: 24px;\n margin-right: 16px;\n width: 24px;\n`;\n\nconst ItemContent = styled.div.attrs(_ => ({\n className: \"dynamic-menu-placeholder-item-content\"\n}))`\n border-radius: 4px;\n flex-grow: 1;\n height: 20px;\n background-color: ${ConcreteColors.gray300};\n`;\n","import { createAsyncAction, getType, ActionType } from \"typesafe-actions\";\nimport produce from \"immer\";\n\nexport const STATE_KEY = \"signalR\";\n\nexport const actions = {\n startSignalRConnection: createAsyncAction(\n \"SIGNALR/CONNECT_REQUEST\",\n \"SIGNALR/CONNECT_SUCCESS\",\n \"SIGNALR/CONNECT_FAILURE\"\n )()\n};\n\nexport type SignalRActions = ActionType;\n\nexport interface State {\n connected: boolean;\n connecting: boolean;\n error: boolean;\n reconnectCount: number;\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\nconst initialState: State = {\n connecting: false,\n connected: false,\n error: false,\n reconnectCount: 0\n};\n\nexport const reducer = (state = initialState, action: SignalRActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.startSignalRConnection.request): {\n draft.connecting = true;\n draft.connected = false;\n break;\n }\n case getType(actions.startSignalRConnection.success): {\n draft.connecting = false;\n draft.connected = true;\n draft.error = false;\n draft.reconnectCount = 0;\n break;\n }\n case getType(actions.startSignalRConnection.failure): {\n draft.connecting = false;\n draft.connected = false;\n draft.error = true;\n draft.reconnectCount += 1;\n break;\n }\n }\n });\n};\n","import { HubConnectionBuilder } from \"@microsoft/signalr\";\n\nexport const createConnection = (\n token: string,\n requestedBusinessUnitId: string\n) => {\n return new HubConnectionBuilder()\n .withUrl(`/entityhub?businessUnit=${requestedBusinessUnitId}`, {\n accessTokenFactory: () => {\n return token;\n }\n })\n .build();\n};\n","import { HubConnection } from \"@microsoft/signalr\";\nimport { END, eventChannel } from \"redux-saga\";\nimport { call, delay, put, select, take, takeLatest } from \"redux-saga/effects\";\nimport { getType } from \"typesafe-actions\";\nimport * as estimates from \"../../modules/estimates\";\nimport * as projects from \"../../modules/projects\";\nimport * as schemas from \"../../modules/schemas\";\nimport * as views from \"../views\";\nimport * as calendars from \"../calendars\";\nimport * as subscriptions from \"../email-subscriptions\";\nimport { createConnection } from \"./init\";\nimport { actions, StateSlice } from \"./state\";\nimport {\n getSelectedBusinessUnitIdSaga,\n getTokenSaga\n} from \"api/api-saga-factory\";\n\nfunction createSocketChannel(connection: HubConnection) {\n // `eventChannel` takes a subscriber function\n // the subscriber function takes an `emit` argument to put messages onto the channel\n return eventChannel(emit => {\n const projectHandler = (changes: unknown[]) => {\n // puts event payload into the channel\n // this allows a Saga to take this payload from the returned channel\n emit({ type: \"PROJECTS\", value: changes });\n };\n\n const schemaHandler = (changes: unknown[]) => {\n emit({ type: \"SCHEMAS\", value: changes });\n };\n\n const viewHandler = (changes: unknown[]) => {\n emit({ type: \"VIEWS\", value: changes });\n };\n\n const calendarHandler = (changes: unknown[]) => {\n emit({ type: \"CALENDARS\", value: changes });\n };\n\n const estimateHandler = (changes: string[]) => {\n const payload = changes.map(change => JSON.parse(change));\n emit({ type: \"ESTIMATES\", value: payload });\n };\n\n const subscriptionHandler = (message: any) => {\n emit({ type: \"SUBSCRIPTIONS\", value: message });\n };\n\n // setup the subscription\n connection.on(\"UpdateProjects\", projectHandler);\n connection.on(\"UpdateEstimates\", estimateHandler);\n connection.on(\"UpdateSchemas\", schemaHandler);\n connection.on(\"UpdateViews\", viewHandler);\n connection.on(\"UpdateCalendars\", calendarHandler);\n connection.on(\"UpdateSubscription\", subscriptionHandler);\n connection\n .start()\n .then(() => {\n emit({ type: \"SIGNALR/CONNECT_SUCCESS\" });\n })\n .catch(err => {\n console.error(\"signalrerror\", err);\n emit({ type: \"SIGNALR/CONNECT_FAILURE\" });\n emit(END);\n });\n\n connection.onclose(() => {\n emit({ type: \"SIGNALR/RECONNECT\" });\n });\n\n // the subscriber must return an unsubscribe function\n // this will be invoked when the saga calls `channel.close` method\n const unsubscribe = () => {\n connection.stop();\n };\n\n return unsubscribe;\n });\n}\nfunction* socketSaga() {\n const token = yield call(getTokenSaga);\n const selectedBusinessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n const socket = yield call(createConnection, token, selectedBusinessUnitId);\n const socketChannel = yield call(createSocketChannel, socket);\n\n while (true) {\n const payload = yield take(socketChannel);\n const { type, value } = payload;\n switch (type) {\n case \"PROJECTS\": {\n yield put(projects.actions.updateProjects(value));\n break;\n }\n case \"ESTIMATES\": {\n yield put(estimates.actions.updateEstimates.request(value));\n break;\n }\n case \"SCHEMAS\": {\n yield put(schemas.actions.updateSchemas(value));\n break;\n }\n case \"VIEWS\": {\n yield put(views.actions.updateViews(value));\n break;\n }\n case \"CALENDARS\": {\n yield put(calendars.actions.updateCalendars(value));\n break;\n }\n case \"SUBSCRIPTIONS\": {\n yield put(\n subscriptions.actions.updateStatus(value.subscriptionId, value.status)\n );\n break;\n }\n case \"SIGNALR/RECONNECT\": {\n yield put(actions.startSignalRConnection.failure());\n break;\n }\n case \"SIGNALR/CONNECT_FAILURE\": {\n yield put(actions.startSignalRConnection.failure());\n break;\n }\n case \"SIGNALR/CONNECT_SUCCESS\": {\n yield put(actions.startSignalRConnection.success());\n break;\n }\n }\n }\n}\nfunction* restartSocketSaga() {\n const reconnectCount = yield select(\n ({ signalR }: StateSlice) => signalR.reconnectCount\n );\n yield delay(1000 * (reconnectCount * 2));\n yield call(socketSaga);\n}\n\nexport const sagas = [\n takeLatest(getType(actions.startSignalRConnection.request), socketSaga),\n takeLatest(getType(actions.startSignalRConnection.failure), restartSocketSaga)\n];\n","import produce from \"immer\";\nimport { User } from \"oidc-client\";\nimport { Tutorials } from \"api\";\nimport {\n CurrentUser,\n AuthenticationMethod,\n GuestUserClaims,\n UserType\n} from \"core\";\nimport { BrowserFingerPrint } from \"./components/confirm/confirm-panel\";\n\nimport {\n ActionType,\n createAsyncAction,\n getType,\n createAction\n} from \"typesafe-actions\";\n\nimport {\n PreConPermissions,\n UserConfigDto as UserPreferences,\n CredentialsUserDto,\n IdentityClientsDto\n} from \"api/GeneratedClients/precon\";\n\nexport const STATE_KEY = \"account\";\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\nexport interface State {\n confirming: boolean;\n declining: boolean;\n loading: boolean;\n isAuthenticated: boolean;\n firUser?: firebase.User;\n user?: Readonly;\n company?: Readonly;\n businessUnit?: Readonly;\n companyClients?: CompanyClientsDetails;\n authenticationMethod: AuthenticationMethod;\n authenticationError?: Error;\n authorization: AccountAuthorization;\n authorizedResource?: string;\n permissions?: PreConPermissions;\n preferences?: UserPreferences;\n errors: string[];\n}\n\nexport interface CompanyDetails {\n id: string;\n users: CredentialsUserDto[];\n loading: boolean;\n}\n\nexport interface CompanyClientsDetails {\n companyClients: IdentityClientsDto[];\n loading: boolean;\n}\n\nexport interface BUDetails {\n id: string;\n users: CredentialsUserDto[];\n loading: boolean;\n}\n\nexport interface CompanyPayload {\n id: string;\n users: CredentialsUserDto[];\n}\n\nexport interface CompanyClientsPayload {\n clients: IdentityClientsDto[];\n}\n\nexport interface AccountAuthorization {\n canAccessHeavyBidInsights: boolean;\n canAccessQuoteManagement: boolean;\n canAccessHcssConnect: boolean;\n canAccessFullPrecon: boolean;\n canAccessFullReadonlyPrecon: boolean;\n canAccessLimitedPrecon: boolean;\n}\n\nexport interface DeclinePayload {\n id: string;\n token: string;\n}\n\nexport interface SignInPayload {\n id: string;\n email: string;\n token: string;\n fingerPrint?: BrowserFingerPrint;\n mode?: string;\n}\n\nexport interface GuestUserPayload {\n user: CurrentUser;\n firUser: firebase.User;\n claims: GuestUserClaims;\n authorization: AccountAuthorization;\n type: AuthenticationMethod;\n}\n\nexport interface UserPayload {\n firUser: firebase.User;\n user: CurrentUser;\n type: AuthenticationMethod;\n authorization: AccountAuthorization;\n permissions?: PreConPermissions;\n preferences?: UserPreferences;\n}\n\nexport const actions = {\n signInWithEmailLink: createAsyncAction(\n \"ACCOUNT/AUTH/SIGNIN_EMAIL_LINK_REQUEST\",\n \"ACCOUNT/AUTH/SIGNIN_EMAIL_LINK_SUCCESS\",\n \"ACCOUNT/AUTH/SIGNIN_EMAIL_LINK_FAILURE\"\n )(),\n\n signInWithHcssCredentials: createAsyncAction(\n \"ACCOUNT/AUTH/SIGNIN_HCSS_REQUEST\",\n \"ACCOUNT/AUTH/SIGNIN_HCSS_SUCCESS\",\n \"ACCOUNT/AUTH/SIGNIN_HCSS_FAILURE\"\n )(),\n\n getCompanyUsers: createAsyncAction(\n \"ACCOUNT/AUTH/GET_COMPANY_USERS_REQUEST\",\n \"ACCOUNT/AUTH/GET_COMPANY_USERS_SUCCESS\",\n \"ACCOUNT/AUTH/GET_COMPANY_USERS_FAILURE\"\n )(),\n\n getCompanyClients: createAsyncAction(\n \"ACCOUNT/AUTH/GET_COMPANY_CLIENTS_REQUEST\",\n \"ACCOUNT/AUTH/GET_COMPANY_CLIENTS_SUCCESS\",\n \"ACCOUNT/AUTH/GET_COMPANY_CLIENTS_FAILURE\"\n )(),\n\n getBusinessUnitUsers: createAsyncAction(\n \"ACCOUNT/AUTH/GET_BU_USERS_REQUEST\",\n \"ACCOUNT/AUTH/GET_BU_USERS_SUCCESS\",\n \"ACCOUNT/AUTH/GET_BU_USERS_FAILURE\"\n )(),\n\n getUser: createAsyncAction(\n \"ACCOUNT/AUTH/GET_USER_REQUEST\",\n \"ACCOUNT/AUTH/GET_USER_SUCCESS\",\n \"ACCOUNT/AUTH/GET_USER_FAILURE\"\n )(),\n\n declineInvitation: createAsyncAction(\n \"ACCOUNT/AUTH/DECLINE_INVITE_REQUEST\",\n \"ACCOUNT/AUTH/DECLINE_INVITE_SUCCESS\",\n \"ACCOUNT/AUTH/DECLINE_INVITE_FAILURE\"\n )(),\n\n signIn: createAction(\"ACCOUNT/AUTH/SIGNIN\", action => () => action()),\n signOut: createAction(\"ACCOUNT/AUTH/SIGNOUT\", action => () => action()),\n\n subscribeToAuthState: createAction(\n \"ACCOUNT/AUTH/SUBSCRIBE_TO_AUTH_STATE\",\n action => () => action()\n ),\n\n unsubscribeFromAuthState: createAction(\n \"ACCOUNT/AUTH/UNSUBSCRIBE_FROM_AUTH_STATE\",\n action => () => action()\n ),\n\n updateGuestAuthState: createAction(\n \"ACCOUNT/AUTH/UPDATE_GUEST_AUTH_STATE\",\n action => (payload?: GuestUserPayload) => action(payload)\n ),\n\n updateUserAuthState: createAction(\n \"ACCOUNT/AUTH/UPDATE_USER_AUTH_STATE\",\n action => (payload?: UserPayload) => action(payload)\n ),\n\n updateOidcUser: createAction(\n \"ACCOUNT/AUTH/UPDATE_OIDC_USER\",\n action => (payload: User) => action(payload)\n ),\n\n updatePreferences: createAsyncAction(\n \"ACCOUNT/USER/UPDATE_PREFERENCES_REQUEST\",\n \"ACCOUNT/USER/UPDATE_PREFERENCES_SUCCESS\",\n \"ACCOUNT/USER/UPDATE_PREFERENCES_FAILURE\"\n ), UserPreferences, Error>(),\n\n setTutorialCompleted: createAction(\n \"ACCOUNT/USER/SET_TUTORIAL_COMPLETED\",\n resolve => (tutorialId: keyof Tutorials) => resolve({ tutorialId })\n ),\n\n updateAppAccess: createAction(\n \"ACCOUNT/AUTH/APP_ACCESS\",\n action => (payload?: keyof AccountAuthorization) => action(payload)\n ),\n\n updatePermissions: createAction(\n \"ACCOUNT/AUTH/PERMISSIONS\",\n action => (payload?: keyof PreConPermissions) => action(payload)\n ),\n\n updateAccountType: createAction(\n \"ACCOUNT/AUTH/TYPE\",\n action => (payload: UserType) => action(payload)\n )\n};\n\nexport type UserActions = ActionType;\n\nconst initialState: State = {\n confirming: false,\n declining: false,\n loading: false,\n isAuthenticated: false,\n authorization: {\n canAccessHeavyBidInsights: false,\n canAccessQuoteManagement: false,\n canAccessHcssConnect: false,\n canAccessLimitedPrecon: false,\n canAccessFullPrecon: false,\n canAccessFullReadonlyPrecon: false\n },\n authenticationMethod: AuthenticationMethod.None,\n errors: []\n};\n\nexport const reducer = (state = initialState, action: UserActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.getUser.request): {\n draft.loading = true;\n break;\n }\n\n case getType(actions.getUser.success):\n case getType(actions.getUser.failure): {\n draft.loading = false;\n break;\n }\n\n case getType(actions.signInWithEmailLink.request): {\n draft.confirming = true;\n break;\n }\n\n case getType(actions.signInWithEmailLink.success): {\n draft.confirming = false;\n draft.isAuthenticated = true;\n draft.authorizedResource = action.payload.claims.resourceId;\n draft.user = action.payload.user;\n draft.firUser = action.payload.firUser;\n draft.authenticationMethod = AuthenticationMethod.OneClickLink;\n draft.authorization = action.payload.authorization;\n draft.preferences = {\n tablePreferences: null,\n tutorials: null,\n region: \"en-us\"\n };\n draft.permissions = {\n admin: false,\n write: false,\n heavyBidNumbers: false,\n estimateInsights: false\n };\n break;\n }\n\n case getType(actions.signInWithEmailLink.failure): {\n draft.confirming = false;\n draft.authenticationError = action.payload;\n draft.isAuthenticated = false;\n draft.authenticationMethod = AuthenticationMethod.None;\n break;\n }\n\n case getType(actions.signInWithHcssCredentials.request): {\n draft.loading = true;\n break;\n }\n\n case getType(actions.signInWithHcssCredentials.success): {\n draft.loading = false;\n draft.isAuthenticated = true;\n draft.firUser = action.payload.firUser;\n draft.user = action.payload.user;\n draft.authenticationMethod = AuthenticationMethod.HcssCredentials;\n draft.authorization = action.payload.authorization;\n draft.permissions = action.payload.permissions;\n draft.preferences = action.payload.preferences;\n break;\n }\n\n case getType(actions.getCompanyUsers.success): {\n draft.company = {\n ...action.payload,\n loading: false\n };\n break;\n }\n\n case getType(actions.getCompanyUsers.failure): {\n draft.company = {\n id: \"\",\n users: [],\n loading: false\n };\n break;\n }\n\n case getType(actions.getCompanyClients.request): {\n draft.companyClients = {\n companyClients: [],\n loading: true\n };\n break;\n }\n\n case getType(actions.getCompanyClients.success): {\n draft.companyClients = {\n companyClients: action.payload.clients,\n loading: false\n };\n break;\n }\n\n case getType(actions.getCompanyClients.failure): {\n draft.companyClients = {\n companyClients: [],\n loading: false\n };\n break;\n }\n\n case getType(actions.getBusinessUnitUsers.success): {\n draft.businessUnit = {\n ...action.payload,\n loading: false\n };\n break;\n }\n\n case getType(actions.getBusinessUnitUsers.failure): {\n draft.businessUnit = {\n id: \"\",\n users: [],\n loading: false\n };\n break;\n }\n\n case getType(actions.signInWithHcssCredentials.failure): {\n draft.loading = false;\n draft.isAuthenticated = false;\n draft.firUser = undefined;\n draft.user = undefined;\n draft.authenticationMethod = AuthenticationMethod.None;\n draft.authenticationError = action.payload;\n draft.errors.push(`Error during sign in: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.declineInvitation.request): {\n draft.declining = true;\n break;\n }\n\n case getType(actions.declineInvitation.success): {\n draft.declining = false;\n break;\n }\n\n case getType(actions.declineInvitation.failure): {\n draft.declining = false;\n break;\n }\n\n case getType(actions.updateGuestAuthState): {\n draft.loading = false;\n draft.isAuthenticated = action.payload ? true : false;\n draft.firUser = action.payload ? action.payload.firUser : undefined;\n draft.authenticationMethod = action.payload\n ? action.payload.type\n : AuthenticationMethod.None;\n draft.authorizedResource = action.payload\n ? action.payload.claims.resourceId\n : undefined;\n break;\n }\n\n case getType(actions.updateUserAuthState): {\n draft.loading = false;\n draft.isAuthenticated = action.payload ? true : false;\n draft.firUser = action.payload ? action.payload.firUser : undefined;\n draft.user = action.payload\n ? { ...draft.user, ...action.payload.user }\n : undefined;\n draft.authenticationMethod = action.payload\n ? action.payload.type\n : AuthenticationMethod.None;\n draft.authorizedResource = undefined;\n break;\n }\n\n case getType(actions.signOut): {\n draft.loading = true;\n break;\n }\n\n case getType(actions.updatePreferences.success): {\n draft.preferences = action.payload;\n break;\n }\n\n case getType(actions.setTutorialCompleted): {\n if (draft.preferences?.tutorials) {\n draft.preferences.tutorials[action.payload.tutorialId] = true;\n }\n break;\n }\n\n case getType(actions.updateAppAccess): {\n draft.authorization[action.payload] = !draft.authorization[\n action.payload\n ];\n break;\n }\n case getType(actions.updatePermissions): {\n if (draft.permissions) {\n draft.permissions[action.payload] = !draft.permissions[\n action.payload\n ];\n }\n break;\n }\n case getType(actions.updateAccountType): {\n if (draft.user) {\n draft.user.type = action.payload;\n }\n break;\n }\n }\n });\n};\n\nconst getAccessibleBusinessUnits = ({ account }: StateSlice) =>\n account.user?.accessibleBusinessUnits;\nconst getHomeBusinessUnit = ({ account }: StateSlice) => {\n return {\n code: account.user?.homeBusinessUnitName,\n id: account.user?.homeBusinessUnitId\n };\n};\nconst getSelectedBusinessUnit = ({ account }: StateSlice) => {\n return {\n code: account.user?.selectedBusinessUnitName,\n id: account.user?.selectedBusinessUnitId\n };\n};\nconst getSelectedBusinessUnitId = ({ account }: StateSlice) => {\n return account.user?.selectedBusinessUnitId;\n};\nconst getAccount = ({ account }: StateSlice) => account;\nconst getHcssUser = ({ account }: StateSlice) => account.user;\nconst getHcssToken = ({ account }: StateSlice) =>\n account.user?.idsrvAccessToken;\nconst getPreferences = ({ account }: StateSlice) => account.preferences;\nconst getPermissions = ({ account }: StateSlice) => account.permissions;\nconst getAuthorization = ({ account }: StateSlice) => account.authorization;\nconst getErrors = ({ account }: StateSlice) => account.errors;\nconst getCompanyUsers = ({ account }: StateSlice) =>\n account.company?.users ?? [];\nconst getCompanyClients = ({ account }: StateSlice) =>\n account.companyClients?.companyClients ?? [];\nconst getBusinessUnitUsers = ({ account }: StateSlice) =>\n account.businessUnit?.users ?? [];\n\nexport const createUserDictFromUserList = (users: CredentialsUserDto[]) => {\n const userDict: Record = {};\n users.forEach(user => {\n const firstName = user.firstName;\n const lastName = user.lastName;\n const username = user.username;\n const isDeleted = user.isDeleted;\n const email = user.email;\n\n if (user.id)\n userDict[user.id] = {\n id: user.id,\n firstName,\n lastName,\n username,\n isDeleted,\n email\n };\n });\n return userDict;\n};\n\nexport const selectors = {\n getAccessibleBusinessUnits,\n getAccount,\n getHomeBusinessUnit,\n getHcssUser,\n getHcssToken,\n getPreferences,\n getPermissions,\n getSelectedBusinessUnitId,\n getSelectedBusinessUnit,\n getAuthorization,\n getErrors,\n getCompanyUsers,\n getCompanyClients,\n getBusinessUnitUsers\n};\n","/* Generated by restful-react */\n\nimport React from \"react\";\nimport {\n Get,\n GetProps,\n useGet,\n UseGetProps,\n Mutate,\n MutateProps,\n useMutate,\n UseMutateProps\n} from \"restful-react\";\n\nimport config from \"config\";\nexport const SPEC_VERSION = \"internal\";\nexport interface HistoricalBidPrice {\n bid?: string | null;\n state?: string | null;\n clientNumber?: string | null;\n count?: number;\n lowBid?: number;\n highBid?: number;\n averageBid?: number;\n}\n\nexport interface BidInfo {\n bid?: string | null;\n state?: string | null;\n clientNumber?: string | null;\n lowQuantity?: number;\n highQuantity?: number;\n}\n\nexport interface HistoricalBiditem {\n estimateCode?: string | null;\n estimateName?: string | null;\n biditem?: string | null;\n bidQuantity?: number;\n units?: string | null;\n bidPrice?: number;\n isActiveEstimate?: boolean;\n}\n\nexport interface BusinessUnitDto {\n id?: string;\n credentialsId?: string;\n code?: string | null;\n description?: string | null;\n}\n\nexport interface BiditemViewModel {\n id?: string;\n bid?: string | null;\n description?: string | null;\n activities?: ActivityViewModel[] | null;\n type?: string | null;\n quantity?: number;\n engineeringQuantity?: number;\n units?: string | null;\n engineeringBid?: string | null;\n imageAttached?: string | null;\n subtotalLevel?: string | null;\n otherOptions?: string | null;\n wbsCode?: string | null;\n passThrough?: string | null;\n marineLand?: string | null;\n parent?: string | null;\n subDivided?: string | null;\n alternateUnits?: string | null;\n alternateDescription?: string | null;\n lowBid?: number;\n averageBid?: number;\n highBid?: number;\n stateCode?: string | null;\n unitCostHoldingAccount?: string | null;\n bidHistoryID?: number;\n taxPercent?: number;\n taxable?: string | null;\n bidPrice?: number;\n summaryGroup1?: string | null;\n summaryGroup2?: string | null;\n summaryGroup3?: string | null;\n summaryGroup4?: string | null;\n summaryGroup5?: string | null;\n summaryGroup6?: string | null;\n reviewFlag?: string | null;\n estInitials?: string | null;\n sortCode?: string | null;\n costNotes?: string | null;\n}\n\nexport interface ActivityViewModel {\n id?: string;\n activityCode?: string | null;\n description?: string | null;\n resources?: ResourceViewModel[] | null;\n quantity?: number;\n units?: string | null;\n factorable?: string | null;\n saveSkipCost?: string | null;\n workersCompCode?: string | null;\n marineWorkersComp?: string | null;\n summaryCode?: string | null;\n calendar?: string | null;\n hoursPerDay?: number;\n cpmPriorItem?: string | null;\n sortOption?: string | null;\n skipCost?: string | null;\n crew?: string | null;\n crewHours?: number;\n crewPercent?: number;\n productionType?: string | null;\n productionRate?: number;\n user1?: number;\n user2?: number;\n user3?: number;\n user4?: number;\n accountingJCCode1?: string | null;\n alternateCostCode?: string | null;\n tagged?: string | null;\n imageAttached?: string | null;\n resourceFactorRiskPercent?: number;\n efficientPercent?: number;\n calculatedDuration?: number;\n modifiedCrew?: string | null;\n userFlag1?: string | null;\n userFlag2?: string | null;\n manHours?: number;\n directTotal?: number;\n notes?: string | null;\n}\n\nexport interface ResourceViewModel {\n id?: string;\n resourceCode?: string | null;\n description?: string | null;\n typeCost?: string | null;\n typeOfEquipmentRent?: string | null;\n subType?: string | null;\n quantity?: number;\n units?: string | null;\n percent?: number;\n unitPrice?: number;\n currency?: string | null;\n subTypeCost?: number;\n total?: number;\n factorable?: string | null;\n factor?: number;\n supplementalDescription?: string | null;\n skipCost?: string | null;\n pieces?: number;\n operatingPercent?: number;\n rentPercent?: number;\n productionCode?: string | null;\n production?: number;\n crewCode?: string | null;\n equipmentOperatorCode?: string | null;\n escalationPercent?: number;\n plugIndicator?: string | null;\n calendar?: string | null;\n startDay?: string | null;\n specialSchedule?: string | null;\n manHourAdjustmentPerShift?: number;\n selectedVendor?: string | null;\n manHourUnit?: number;\n escalationOverride?: string | null;\n unusedFlag3?: string | null;\n linkflag?: number;\n class?: string | null;\n alternateQuantity?: number;\n alternateUnits?: string | null;\n resourceText1?: string | null;\n resourceText2?: string | null;\n}\n\nexport interface CopyStructure {\n id?: string;\n activityIds?: string[] | null;\n}\n\nexport interface CopyEstimateViewModel {\n id?: string;\n code?: string | null;\n name?: string | null;\n description?: string | null;\n biditems?: CopyBiditemViewModel[] | null;\n}\n\nexport interface CopyBiditemViewModel {\n id?: string;\n bid?: string | null;\n description?: string | null;\n activities?: CopyActivityViewModel[] | null;\n type?: string | null;\n quantity?: number;\n engineeringQuantity?: number;\n units?: string | null;\n engineeringBid?: string | null;\n subDivided?: string | null;\n parent?: string | null;\n wbsCode?: string | null;\n}\n\nexport interface CopyActivityViewModel {\n id?: string;\n activityCode?: string | null;\n description?: string | null;\n resources?: CopyResourceViewModel[] | null;\n quantity?: number;\n units?: string | null;\n skipCost?: string | null;\n}\n\nexport interface CopyResourceViewModel {\n id?: string;\n resourceCode?: string | null;\n description?: string | null;\n quantity?: number;\n units?: string | null;\n type_Cost?: string | null;\n}\n\nexport type ODataQueryOptionsOfBiditem = ODataQueryOptions & {\n ifMatch?: ETagOfBiditem | null;\n ifNoneMatch?: ETagOfBiditem | null;\n};\n\nexport type ETagOfBiditem = ETag & { [key: string]: any };\n\nexport type ETag = DynamicObject & {\n Item?: {} | null;\n IsWellFormed?: boolean;\n EntityType?: string | null;\n IsAny?: boolean;\n IsIfNoneMatch?: boolean;\n ConcurrencyProperties?: { [key: string]: any } | null;\n};\n\nexport interface DynamicObject {\n [key: string]: any;\n}\n\nexport interface ODataQueryOptions {\n request?: HttpRequest | null;\n context?: ODataQueryContext | null;\n rawValues?: ODataRawQueryOptions | null;\n selectExpand?: SelectExpandQueryOption | null;\n apply?: ApplyQueryOption | null;\n filter?: FilterQueryOption | null;\n orderBy?: OrderByQueryOption | null;\n skip?: SkipQueryOption | null;\n skipToken?: SkipTokenQueryOption | null;\n top?: TopQueryOption | null;\n count?: CountQueryOption | null;\n validator?: ODataQueryValidator | null;\n ifMatch?: ETag | null;\n ifNoneMatch?: ETag | null;\n}\n\nexport interface HttpRequest {\n bodyReader?: PipeReader | null;\n routeValues?: RouteValueDictionary | null;\n}\n\nexport interface PipeReader {\n [key: string]: any;\n}\n\nexport interface RouteValueDictionary {\n _arrayStorage?: KeyValuePairOfStringAndObject[] | null;\n _propertyStorage?: PropertyStorage | null;\n Item?: {} | null;\n Comparer?: IEqualityComparerOfString | null;\n Count?: number;\n Keys?: string[] | null;\n Values?: {}[] | null;\n}\n\nexport interface KeyValuePairOfStringAndObject {\n key?: string;\n value?: {};\n}\n\nexport interface PropertyStorage {\n value?: {} | null;\n properties?: PropertyHelper[] | null;\n}\n\nexport interface PropertyHelper {\n property?: PropertyInfo | null;\n name?: string | null;\n valueGetter?: FuncOfObjectAndObject | null;\n valueSetter?: ActionOfObjectAndObject | null;\n}\n\nexport type PropertyInfo = MemberInfo & {\n memberType?: MemberTypes;\n isSpecialName?: boolean;\n getMethod?: MethodInfo | null;\n setMethod?: MethodInfo | null;\n};\n\nexport type MemberTypes = number;\n\nexport type MethodInfo = MethodBase & {\n memberType?: MemberTypes;\n returnParameter?: ParameterInfo;\n returnType?: string;\n};\n\nexport interface ParameterInfo {\n attributes?: ParameterAttributes;\n member?: MemberInfo;\n name?: string | null;\n parameterType?: string;\n position?: number;\n isIn?: boolean;\n isLcid?: boolean;\n isOptional?: boolean;\n isOut?: boolean;\n isRetval?: boolean;\n defaultValue?: {} | null;\n rawDefaultValue?: {} | null;\n hasDefaultValue?: boolean;\n customAttributes?: CustomAttributeData[];\n metadataToken?: number;\n}\n\nexport type ParameterAttributes = number;\n\nexport interface MemberInfo {\n module?: Module;\n customAttributes?: CustomAttributeData[];\n isCollectible?: boolean;\n metadataToken?: number;\n}\n\nexport interface Module {\n assembly?: Assembly;\n fullyQualifiedName?: string;\n name?: string;\n mdStreamVersion?: number;\n moduleVersionId?: string;\n scopeName?: string;\n moduleHandle?: ModuleHandle;\n customAttributes?: CustomAttributeData[];\n metadataToken?: number;\n}\n\nexport interface Assembly {\n definedTypes?: string[];\n exportedTypes?: string[];\n codeBase?: string | null;\n entryPoint?: MethodInfo | null;\n fullName?: string | null;\n imageRuntimeVersion?: string;\n isDynamic?: boolean;\n location?: string;\n reflectionOnly?: boolean;\n isCollectible?: boolean;\n isFullyTrusted?: boolean;\n customAttributes?: CustomAttributeData[];\n escapedCodeBase?: string;\n manifestModule?: Module;\n modules?: Module[];\n globalAssemblyCache?: boolean;\n hostContext?: number;\n securityRuleSet?: SecurityRuleSet;\n}\n\nexport interface CustomAttributeData {\n attributeType?: string;\n constructor?: ConstructorInfo;\n constructorArguments?: CustomAttributeTypedArgument[];\n namedArguments?: CustomAttributeNamedArgument[];\n}\n\nexport type ConstructorInfo = MethodBase & {\n memberType?: MemberTypes;\n};\n\nexport type MethodBase = MemberInfo & {\n methodImplementationFlags?: MethodImplAttributes;\n callingConvention?: CallingConventions;\n isAbstract?: boolean;\n isConstructor?: boolean;\n isFinal?: boolean;\n isHideBySig?: boolean;\n isSpecialName?: boolean;\n isStatic?: boolean;\n isVirtual?: boolean;\n isAssembly?: boolean;\n isFamily?: boolean;\n isFamilyAndAssembly?: boolean;\n isFamilyOrAssembly?: boolean;\n isPrivate?: boolean;\n isPublic?: boolean;\n isConstructedGenericMethod?: boolean;\n isGenericMethod?: boolean;\n isGenericMethodDefinition?: boolean;\n containsGenericParameters?: boolean;\n isSecurityCritical?: boolean;\n isSecuritySafeCritical?: boolean;\n isSecurityTransparent?: boolean;\n};\n\nexport type MethodImplAttributes = number;\n\nexport type CallingConventions = number;\n\nexport interface CustomAttributeTypedArgument {\n argumentType?: string;\n value?: {} | null;\n}\n\nexport interface CustomAttributeNamedArgument {\n memberInfo?: MemberInfo;\n typedValue?: CustomAttributeTypedArgument;\n memberName?: string;\n isField?: boolean;\n}\n\nexport type SecurityRuleSet = number;\n\nexport interface ModuleHandle {\n mdStreamVersion?: number;\n}\n\nexport type FuncOfObjectAndObject = MulticastDelegate & { [key: string]: any };\n\nexport type MulticastDelegate = Delegate & { [key: string]: any };\n\nexport interface Delegate {\n target?: {} | null;\n method?: MethodInfo;\n}\n\nexport type ActionOfObjectAndObject = MulticastDelegate & {\n [key: string]: any;\n};\n\nexport interface IEqualityComparerOfString {\n [key: string]: any;\n}\n\nexport interface ODataQueryContext {\n defaultQuerySettings?: DefaultQuerySettings | null;\n model?: IEdmModel | null;\n elementType?: IEdmType | null;\n navigationSource?: IEdmNavigationSource | null;\n elementClrType?: string | null;\n path?: ODataPath | null;\n requestContainer?: IServiceProvider | null;\n}\n\nexport interface DefaultQuerySettings {\n enableExpand?: boolean;\n enableSelect?: boolean;\n enableCount?: boolean;\n enableOrderBy?: boolean;\n enableFilter?: boolean;\n maxTop?: number | null;\n enableSkipToken?: boolean;\n}\n\nexport interface IEdmModel {\n schemaElements?: IEdmSchemaElement[] | null;\n vocabularyAnnotations?: IEdmVocabularyAnnotation[] | null;\n referencedModels?: IEdmModel[] | null;\n declaredNamespaces?: string[] | null;\n directValueAnnotationsManager?: IEdmDirectValueAnnotationsManager | null;\n entityContainer?: IEdmEntityContainer | null;\n}\n\nexport interface IEdmSchemaElement {\n schemaElementKind?: EdmSchemaElementKind;\n namespace?: string | null;\n}\n\nexport type EdmSchemaElementKind = number;\n\nexport interface IEdmVocabularyAnnotation {\n qualifier?: string | null;\n term?: IEdmTerm | null;\n target?: IEdmVocabularyAnnotatable | null;\n value?: IEdmExpression | null;\n}\n\nexport interface IEdmTerm {\n type?: IEdmTypeReference | null;\n appliesTo?: string | null;\n defaultValue?: string | null;\n}\n\nexport interface IEdmTypeReference {\n isNullable?: boolean;\n definition?: IEdmType | null;\n}\n\nexport interface IEdmType {\n typeKind?: EdmTypeKind;\n}\n\nexport type EdmTypeKind = number;\n\nexport interface IEdmVocabularyAnnotatable {\n [key: string]: any;\n}\n\nexport interface IEdmExpression {\n expressionKind?: EdmExpressionKind;\n}\n\nexport type EdmExpressionKind = number;\n\nexport interface IEdmDirectValueAnnotationsManager {\n [key: string]: any;\n}\n\nexport interface IEdmEntityContainer {\n elements?: IEdmEntityContainerElement[] | null;\n}\n\nexport interface IEdmEntityContainerElement {\n containerElementKind?: EdmContainerElementKind;\n container?: IEdmEntityContainer | null;\n}\n\nexport type EdmContainerElementKind = number;\n\nexport interface IEdmNavigationSource {\n navigationPropertyBindings?: IEdmNavigationPropertyBinding[] | null;\n path?: IEdmPathExpression | null;\n type?: IEdmType | null;\n}\n\nexport interface IEdmNavigationPropertyBinding {\n navigationProperty?: IEdmNavigationProperty | null;\n target?: IEdmNavigationSource | null;\n path?: IEdmPathExpression | null;\n}\n\nexport interface IEdmNavigationProperty {\n partner?: IEdmNavigationProperty | null;\n onDelete?: EdmOnDeleteAction;\n containsTarget?: boolean;\n referentialConstraint?: IEdmReferentialConstraint | null;\n}\n\nexport type EdmOnDeleteAction = number;\n\nexport interface IEdmReferentialConstraint {\n propertyPairs?: EdmReferentialConstraintPropertyPair[] | null;\n}\n\nexport interface EdmReferentialConstraintPropertyPair {\n dependentProperty?: IEdmStructuralProperty | null;\n principalProperty?: IEdmStructuralProperty | null;\n}\n\nexport interface IEdmStructuralProperty {\n defaultValueString?: string | null;\n}\n\nexport interface IEdmPathExpression {\n pathSegments?: string[] | null;\n path?: string | null;\n}\n\nexport interface ODataPath {\n edmType?: IEdmType | null;\n navigationSource?: IEdmNavigationSource | null;\n segments?: ODataPathSegment[] | null;\n pathTemplate?: string | null;\n path?: ODataPathSegment[] | null;\n}\n\nexport interface ODataPathSegment {\n identifier?: string | null;\n}\n\nexport interface IServiceProvider {\n [key: string]: any;\n}\n\nexport interface ODataRawQueryOptions {\n filter?: string | null;\n apply?: string | null;\n orderBy?: string | null;\n top?: string | null;\n skip?: string | null;\n select?: string | null;\n expand?: string | null;\n count?: string | null;\n format?: string | null;\n skipToken?: string | null;\n deltaToken?: string | null;\n}\n\nexport interface SelectExpandQueryOption {\n context?: ODataQueryContext | null;\n rawSelect?: string | null;\n rawExpand?: string | null;\n validator?: SelectExpandQueryValidator | null;\n selectExpandClause?: SelectExpandClause | null;\n levelsMaxLiteralExpansionDepth?: number;\n}\n\nexport interface SelectExpandQueryValidator {\n [key: string]: any;\n}\n\nexport interface SelectExpandClause {\n selectedItems?: SelectItem[] | null;\n allSelected?: boolean;\n}\n\nexport interface SelectItem {\n [key: string]: any;\n}\n\nexport interface ApplyQueryOption {\n context?: ODataQueryContext | null;\n resultClrType?: string | null;\n applyClause?: ApplyClause | null;\n rawValue?: string | null;\n}\n\nexport interface ApplyClause {\n transformations?: TransformationNode[] | null;\n}\n\nexport interface TransformationNode {\n [key: string]: any;\n}\n\nexport interface FilterQueryOption {\n context?: ODataQueryContext | null;\n validator?: FilterQueryValidator | null;\n filterClause?: FilterClause | null;\n rawValue?: string | null;\n}\n\nexport interface FilterQueryValidator {\n [key: string]: any;\n}\n\nexport interface FilterClause {\n expression?: SingleValueNode | null;\n rangeVariable?: RangeVariable | null;\n itemType?: IEdmTypeReference | null;\n}\n\nexport type SingleValueNode = QueryNode & {\n kind?: QueryNodeKind;\n};\n\nexport type QueryNodeKind = number;\n\nexport interface QueryNode {\n [key: string]: any;\n}\n\nexport interface RangeVariable {\n [key: string]: any;\n}\n\nexport interface OrderByQueryOption {\n context?: ODataQueryContext | null;\n orderByNodes?: OrderByNode[] | null;\n rawValue?: string | null;\n validator?: OrderByQueryValidator | null;\n orderByClause?: OrderByClause | null;\n}\n\nexport interface OrderByNode {\n direction?: OrderByDirection;\n}\n\nexport type OrderByDirection = number;\n\nexport interface OrderByQueryValidator {\n [key: string]: any;\n}\n\nexport interface OrderByClause {\n thenBy?: OrderByClause | null;\n expression?: SingleValueNode | null;\n direction?: OrderByDirection;\n rangeVariable?: RangeVariable | null;\n itemType?: IEdmTypeReference | null;\n}\n\nexport interface SkipQueryOption {\n context?: ODataQueryContext | null;\n rawValue?: string | null;\n value?: number;\n validator?: SkipQueryValidator | null;\n}\n\nexport interface SkipQueryValidator {\n [key: string]: any;\n}\n\nexport interface SkipTokenQueryOption {\n rawValue?: string | null;\n context?: ODataQueryContext | null;\n validator?: SkipTokenQueryValidator | null;\n querySettings?: ODataQuerySettings | null;\n queryOptions?: ODataQueryOptions | null;\n}\n\nexport interface SkipTokenQueryValidator {\n [key: string]: any;\n}\n\nexport interface ODataQuerySettings {\n ensureStableOrdering?: boolean;\n handleNullPropagation?: HandleNullPropagationOption;\n enableConstantParameterization?: boolean;\n enableCorrelatedSubqueryBuffering?: boolean;\n pageSize?: number | null;\n handleReferenceNavigationPropertyExpandFilter?: boolean;\n}\n\nexport type HandleNullPropagationOption = number;\n\nexport interface TopQueryOption {\n context?: ODataQueryContext | null;\n rawValue?: string | null;\n value?: number;\n validator?: TopQueryValidator | null;\n}\n\nexport interface TopQueryValidator {\n [key: string]: any;\n}\n\nexport interface CountQueryOption {\n context?: ODataQueryContext | null;\n rawValue?: string | null;\n value?: boolean;\n validator?: CountQueryValidator | null;\n}\n\nexport interface CountQueryValidator {\n [key: string]: any;\n}\n\nexport interface ODataQueryValidator {\n [key: string]: any;\n}\n\nexport interface BiditemParent {\n bid?: string | null;\n id?: string;\n}\n\nexport interface EstimateSearchFlattened {\n estimateId?: string;\n estimateCode?: string | null;\n estimateName?: string | null;\n biditemId?: string;\n bid_Date?: string | null;\n biditemCode?: string | null;\n biditemDescription?: string | null;\n biditemClientNo?: string | null;\n activityId?: string;\n activityCode?: string | null;\n activityDescription?: string | null;\n activityQuantity?: number;\n modified_Date?: string | null;\n created_Date?: string | null;\n isActiveEstimate?: boolean;\n}\n\nexport type ODataQueryOptionsOfEstimate = ODataQueryOptions & {\n ifMatch?: ETagOfEstimate | null;\n ifNoneMatch?: ETagOfEstimate | null;\n};\n\nexport type ETagOfEstimate = ETag & { [key: string]: any };\n\nexport interface CostHistoryActivity {\n estimateId?: string | null;\n estimateCode?: string | null;\n estimateName?: string | null;\n activityId?: string | null;\n activityCode?: string | null;\n activityDescription?: string | null;\n manHours?: number;\n cost?: number;\n crewCost?: number;\n quantity?: number;\n bid_Date?: string | null;\n units?: string | null;\n clientNumber?: string | null;\n isActiveEstimate?: boolean;\n}\n\nexport type DatabasePartition = Entity & {\n /**\n * The system info id.\n */\n systemInfoId?: string;\n /**\n * The system info.\n */\n systemInfo?: SystemInfo | null;\n /**\n * The business unit id.\n */\n businessUnitId?: string;\n /**\n * The business unit.\n */\n businessUnit?: BusinessUnit | null;\n /**\n * The estimates.\n */\n estimates?: Estimate[] | null;\n};\n\nexport type SystemInfo = Entity & {\n /**\n * The HeavyBid system id.\n */\n heavyBidSystemId?: string;\n /**\n * The database partitions.\n */\n partitions?: DatabasePartition[] | null;\n};\n\nexport interface Entity {\n id?: string;\n}\n\nexport type BusinessUnit = Entity & {\n /**\n * The code.\n */\n code?: string;\n /**\n * The partitions.\n */\n partitions?: DatabasePartition[] | null;\n /**\n * The setups business unit id.\n */\n businessUnitId?: string;\n /**\n * The setups business unit code.\n */\n businessUnitCode?: string | null;\n};\n\nexport type Estimate = EstimateIntegrationDto;\n\nexport type StatusCode = number;\n\nexport interface EstimateFilters {\n project_Name?: string;\n project_Number?: string;\n status?: string;\n engineer?: string;\n resp_Estimator?: string;\n owner?: string;\n bid_Date?: string | null;\n start_Date?: string | null;\n review_Date?: string | null;\n created_Date?: string | null;\n modified_Date?: string | null;\n modified_Time?: number | null;\n bid_Amount?: number | null;\n takeoff_Amount?: number | null;\n profit_Bidquan?: number | null;\n profit_Takeoff?: number | null;\n tot_Cost?: number | null;\n wc_State?: string;\n type_Work?: string;\n filter_1?: string;\n filter_2?: string;\n filter_3?: string;\n filter_4?: string;\n filter_5?: string;\n filter_6?: string;\n user_Ascii1?: string;\n user_Ascii2?: string;\n user_Ascii3?: string;\n user_Ascii4?: string;\n user_Ascii5?: string;\n user_Ascii6?: string;\n user_Ascii7?: string;\n user_Ascii8?: string;\n user_Ascii9?: string;\n user_Ascii10?: string;\n user_Ascii11?: string;\n user_Ascii12?: string;\n user_Ascii13?: string;\n user_Ascii14?: string;\n user_Ascii15?: string;\n user_Ascii16?: string;\n user_Ascii17?: string;\n user_Ascii18?: string;\n user_Ascii19?: string;\n user_Ascii20?: string;\n user_Vendor1?: string;\n user_Vendor2?: string;\n user_Vendor3?: string;\n user_Vendor4?: string;\n user_Vendor5?: string;\n user_Vendor6?: string;\n user_Flag1?: string;\n user_Flag2?: string;\n user_Flag3?: string;\n user_Flag4?: string;\n user_Flag5?: string;\n user_Flag6?: string;\n user_Flag7?: string;\n user_Flag8?: string;\n user_Flag9?: string;\n user_Flag10?: string;\n user_Flag11?: string;\n user_Flag12?: string;\n user_Code1?: string;\n user_Name2?: string;\n user_Integer1?: number | null;\n user_Integer2?: number | null;\n user_Integer3?: number | null;\n user_Integer4?: number | null;\n user_Integer5?: number | null;\n user_Number1?: number | null;\n user_Number2?: number | null;\n user_Number3?: number | null;\n user_Number4?: number | null;\n user_Number5?: number | null;\n user_Number6?: number | null;\n user_Number7?: number | null;\n user_Number8?: number | null;\n user_Number9?: number | null;\n user_Number10?: number | null;\n user_Number11?: number | null;\n user_Number12?: number | null;\n user_Number13?: number | null;\n user_Number14?: number | null;\n user_Number15?: number | null;\n user_Number16?: number | null;\n user_Number17?: number | null;\n user_Number18?: number | null;\n user_Number19?: number | null;\n user_Number20?: number | null;\n user_Perc1?: number | null;\n user_Perc2?: number | null;\n user_Def_Date?: string | null;\n user_Date2?: string | null;\n user_Date3?: string | null;\n user_Date4?: string | null;\n user_Date5?: string | null;\n user_Date6?: string | null;\n user_Date7?: string | null;\n user_Date8?: string | null;\n user_Date9?: string | null;\n user_Date10?: string | null;\n user_Date11?: string | null;\n address?: string;\n latitude?: number | null;\n longitude?: number | null;\n}\n\nexport interface EstimateTotals {\n baseLabor_Direct?: number;\n baseLabor_Indirect?: number;\n baseLabor_Total?: number;\n burden_Direct?: number;\n burden_Indirect?: number;\n burden_Total?: number;\n totalLabor_Direct?: number;\n totalLabor_Indirect?: number;\n totalLabor_Total?: number;\n permanentMaterial_Direct?: number;\n permanentMaterial_Indirect?: number;\n permanentMaterial_Total?: number;\n constructionMaterial_Direct?: number;\n constructionMaterial_Indirect?: number;\n constructionMaterial_Total?: number;\n subcontract_Direct?: number;\n subcontract_Indirect?: number;\n subcontract_Total?: number;\n equipmentOperatingExpense_Direct?: number;\n equipmentOperatingExpense_Indirect?: number;\n equipmentOperatingExpense_Total?: number;\n companyEquipment_Direct?: number;\n companyEquipment_Indirect?: number;\n companyEquipment_Total?: number;\n rentedEquipment_Direct?: number;\n rentedEquipment_Indirect?: number;\n rentedEquipment_Total?: number;\n misc1_Direct?: number;\n misc1_Indirect?: number;\n misc1_Total?: number;\n misc2_Direct?: number;\n misc2_Indirect?: number;\n misc2_Total?: number;\n misc3_Direct?: number;\n misc3_Indirect?: number;\n misc3_Total?: number;\n totalEntryCost_Takeoff_Direct?: number;\n totalEntryCost_Takeoff_Indirect?: number;\n totalEntryCost_Takeoff_Total?: number;\n totalEntryCost_Bid_Direct?: number;\n totalEntryCost_Bid_Indirect?: number;\n totalEntryCost_Bid_Total?: number;\n balMarkup_Bid?: number;\n actualMarkup_Bid?: number;\n balancedBid_Bid?: number;\n bidTotal_Bid?: number;\n addonBondTotal?: number;\n totalEqp_Direct?: number;\n totalEqp_Indirect?: number;\n totalEqp_Total?: number;\n manhours_Direct?: number;\n manhours_Indirect?: number;\n manhours_Total?: number;\n addon_Cost?: number;\n bond?: number;\n addon_Markup?: number;\n addon_Total?: number;\n totalCost_Takeoff?: number;\n job_Duration?: number;\n balMarkup_Takeoff?: number;\n actualMarkup_Takeoff?: number;\n balancedBid_Takeoff?: number;\n passThrough_Cost?: number;\n passThrough_Adjustment?: number;\n passThrough_Total?: number;\n totalCost_Bid_LessPassThrough?: number;\n totalCost_Bid?: number;\n total_User_Adjustments?: number;\n total_User_Adjustments_Cost?: number;\n desired_Bid?: number;\n desired_Bid_Diff?: number;\n bidTotal_Takeoff?: number;\n totalCost_Takeoff_LessPassThrough?: number;\n markupPercentCost_Takeoff?: number;\n markupPercentCost_Bid?: number;\n markupPercentSales_Takeoff?: number;\n markupPercentSales_Bid?: number;\n totalCost_Takeoff_LessPassThroughAndAdjustments?: number;\n totalCost_Bid_LessPassThroughAndAdjustments?: number;\n totalEntryCost_Bid_Spread_Indirect?: number;\n addonBond_Cost_Bid_Spread_Total?: number;\n totalCost_Bid_Spread?: number;\n balMarkup_Bid_Spread?: number;\n actualMarkup_Bid_Spread?: number;\n actv_User_Quan1?: number;\n actv_User_Quan2?: number;\n actv_User_Quan3?: number;\n actv_User_Quan4?: number;\n open_Biditems?: number;\n minority_Goal_Percent?: number;\n minority_Goal_Total?: number;\n minority_Current_Percent?: number;\n minority_Current_Total?: number;\n summary_Date?: string | null;\n spread_Date?: string | null;\n}\n\nexport type ProcessedEstimateFailureCode = number;\n\nexport type ActiveEstimateBackup = Entity & {\n estimateId?: string;\n blobUrl?: string;\n uploadedTimestamp?: string;\n};\n\nexport type EstimateSummaryExtended = EstimateSummary & {\n blobUrl?: string | null;\n description?: string | null;\n filter1?: string | null;\n filter2?: string | null;\n filter3?: string | null;\n filter4?: string | null;\n filter5?: string | null;\n filter6?: string | null;\n address?: string | null;\n resp_Estimator?: string | null;\n tot_Cost?: number;\n bid_Amount?: number;\n status?: string | null;\n owner?: string | null;\n wc_State?: string | null;\n project_Name?: string | null;\n project_Number?: string | null;\n type_Work?: string | null;\n availableReports?: ReportViewModel[] | null;\n};\n\nexport interface ReportViewModel {\n estimateId: string;\n type: ReportType;\n createdAt: string;\n reportName: string | null;\n displayName: string | null;\n}\n\nexport enum ReportType {\n cost,\n costAndPrice,\n estimateRecap\n}\n\nexport interface EstimateSummary {\n id?: string;\n code: string;\n name: string;\n processedStatus?: StatusCode;\n processedStatusFailureCode?: ProcessedEstimateFailureCode;\n estimateVersion?: string | null;\n bid_Date?: string | null;\n start_Date?: string | null;\n review_Date?: string | null;\n created_Date?: string | null;\n modified_Date?: string | null;\n uploaded_Datetime?: string | null;\n isExcludedEstimate?: boolean;\n}\n\nexport interface ProblemDetails {\n type?: string | null;\n title?: string | null;\n status?: number | null;\n detail?: string | null;\n instance?: string | null;\n extensions?: { [key: string]: any } | null;\n [key: string]: string | {} | undefined | null;\n}\n\nexport interface EstimateExcluded {\n estimateId?: string;\n excluded?: boolean;\n}\n\nexport interface DeleteEstimateViewModel {\n found?: boolean;\n success?: boolean;\n id?: string;\n deletionError?: string | null;\n}\n\nexport interface EstimateExistViewModel {\n code?: string | null;\n exist?: boolean;\n}\n\nexport interface EstimateIndex {\n index?: number;\n}\n\nexport interface IntegrationResponseOfEstimateWithDivision {\n data?: EstimateWithDivision[] | null;\n currentTopValue?: number | null;\n currentSkipValue?: number | null;\n nextSkipValue?: number | null;\n}\n\nexport type EstimateWithDivision = Estimate & {\n division?: string | null;\n};\n\nexport type ODataQueryOptionsOfEstimateWithDivision = ODataQueryOptions & {\n ifMatch?: ETagOfEstimateWithDivision | null;\n ifNoneMatch?: ETagOfEstimateWithDivision | null;\n};\n\nexport type ETagOfEstimateWithDivision = ETag & { [key: string]: any };\n\nexport interface EstimateFlattened {\n id?: string;\n processedStatus?: StatusCode;\n partitionId?: string;\n lastModified?: string;\n lastProcessed?: string | null;\n code?: string | null;\n name?: string | null;\n blobUrl?: string | null;\n description?: string | null;\n estimateVersion?: string | null;\n division?: string | null;\n isExcludedEstimate?: boolean;\n isActiveEstimate?: boolean;\n filters_Project_Name?: string | null;\n filters_Project_Number?: string | null;\n filters_Address?: string | null;\n filters_Latitude?: number | null;\n filters_Longitude?: number | null;\n filters_Status?: string | null;\n filters_Engineer?: string | null;\n filters_Resp_Estimator?: string | null;\n filters_Owner?: string | null;\n filters_Bid_Date?: string | null;\n filters_Start_Date?: string | null;\n filters_Review_Date?: string | null;\n filters_Created_Date?: string | null;\n filters_Modified_Date?: string | null;\n filters_Modified_Time?: number | null;\n filters_Bid_Amount?: number | null;\n filters_Takeoff_Amount?: number | null;\n filters_Profit_Bidquan?: number | null;\n filters_Profit_Takeoff?: number | null;\n filters_Tot_Cost?: number | null;\n filters_Wc_State?: string | null;\n filters_Type_Work?: string | null;\n filters_Filter_1?: string | null;\n filters_Filter_2?: string | null;\n filters_Filter_3?: string | null;\n filters_Filter_4?: string | null;\n filters_Filter_5?: string | null;\n filters_Filter_6?: string | null;\n filters_User_Ascii1?: string | null;\n filters_User_Ascii2?: string | null;\n filters_User_Ascii3?: string | null;\n filters_User_Ascii4?: string | null;\n filters_User_Ascii5?: string | null;\n filters_User_Ascii6?: string | null;\n filters_User_Ascii7?: string | null;\n filters_User_Ascii8?: string | null;\n filters_User_Ascii9?: string | null;\n filters_User_Ascii10?: string | null;\n filters_User_Ascii11?: string | null;\n filters_User_Ascii12?: string | null;\n filters_User_Ascii13?: string | null;\n filters_User_Ascii14?: string | null;\n filters_User_Ascii15?: string | null;\n filters_User_Ascii16?: string | null;\n filters_User_Ascii17?: string | null;\n filters_User_Ascii18?: string | null;\n filters_User_Ascii19?: string | null;\n filters_User_Ascii20?: string | null;\n filters_User_Vendor1?: string | null;\n filters_User_Vendor2?: string | null;\n filters_User_Vendor3?: string | null;\n filters_User_Vendor4?: string | null;\n filters_User_Vendor5?: string | null;\n filters_User_Vendor6?: string | null;\n filters_User_Flag1?: string | null;\n filters_User_Flag2?: string | null;\n filters_User_Flag3?: string | null;\n filters_User_Flag4?: string | null;\n filters_User_Flag5?: string | null;\n filters_User_Flag6?: string | null;\n filters_User_Flag7?: string | null;\n filters_User_Flag8?: string | null;\n filters_User_Flag9?: string | null;\n filters_User_Flag10?: string | null;\n filters_User_Flag11?: string | null;\n filters_User_Flag12?: string | null;\n filters_User_Code1?: string | null;\n filters_User_Name2?: string | null;\n filters_User_Integer1?: number | null;\n filters_User_Integer2?: number | null;\n filters_User_Integer3?: number | null;\n filters_User_Integer4?: number | null;\n filters_User_Integer5?: number | null;\n filters_User_Number1?: number | null;\n filters_User_Number2?: number | null;\n filters_User_Number3?: number | null;\n filters_User_Number4?: number | null;\n filters_User_Number5?: number | null;\n filters_User_Number6?: number | null;\n filters_User_Number7?: number | null;\n filters_User_Number8?: number | null;\n filters_User_Number9?: number | null;\n filters_User_Number10?: number | null;\n filters_User_Number11?: number | null;\n filters_User_Number12?: number | null;\n filters_User_Number13?: number | null;\n filters_User_Number14?: number | null;\n filters_User_Number15?: number | null;\n filters_User_Number16?: number | null;\n filters_User_Number17?: number | null;\n filters_User_Number18?: number | null;\n filters_User_Number19?: number | null;\n filters_User_Number20?: number | null;\n filters_User_Perc1?: number | null;\n filters_User_Perc2?: number | null;\n filters_User_Def_Date?: string | null;\n filters_User_Date2?: string | null;\n filters_User_Date3?: string | null;\n filters_User_Date4?: string | null;\n filters_User_Date5?: string | null;\n filters_User_Date6?: string | null;\n filters_User_Date7?: string | null;\n filters_User_Date8?: string | null;\n filters_User_Date9?: string | null;\n filters_User_Date10?: string | null;\n filters_User_Date11?: string | null;\n totals_BaseLabor_Direct?: number;\n totals_BaseLabor_Indirect?: number;\n totals_BaseLabor_Total?: number;\n totals_Burden_Direct?: number;\n totals_Burden_Indirect?: number;\n totals_Burden_Total?: number;\n totals_TotalLabor_Direct?: number;\n totals_TotalLabor_Indirect?: number;\n totals_TotalLabor_Total?: number;\n totals_PermanentMaterial_Direct?: number;\n totals_PermanentMaterial_Indirect?: number;\n totals_PermanentMaterial_Total?: number;\n totals_ConstructionMaterial_Direct?: number;\n totals_ConstructionMaterial_Indirect?: number;\n totals_ConstructionMaterial_Total?: number;\n totals_Subcontract_Direct?: number;\n totals_Subcontract_Indirect?: number;\n totals_Subcontract_Total?: number;\n totals_EquipmentOperatingExpense_Direct?: number;\n totals_EquipmentOperatingExpense_Indirect?: number;\n totals_EquipmentOperatingExpense_Total?: number;\n totals_CompanyEquipment_Direct?: number;\n totals_CompanyEquipment_Indirect?: number;\n totals_CompanyEquipment_Total?: number;\n totals_RentedEquipment_Direct?: number;\n totals_RentedEquipment_Indirect?: number;\n totals_RentedEquipment_Total?: number;\n totals_Misc1_Direct?: number;\n totals_Misc1_Indirect?: number;\n totals_Misc1_Total?: number;\n totals_Misc2_Direct?: number;\n totals_Misc2_Indirect?: number;\n totals_Misc2_Total?: number;\n totals_Misc3_Direct?: number;\n totals_Misc3_Indirect?: number;\n totals_Misc3_Total?: number;\n totals_TotalEntryCost_Takeoff_Direct?: number;\n totals_TotalEntryCost_Takeoff_Indirect?: number;\n totals_TotalEntryCost_Takeoff_Total?: number;\n totals_TotalEntryCost_Bid_Direct?: number;\n totals_TotalEntryCost_Bid_Indirect?: number;\n totals_TotalEntryCost_Bid_Total?: number;\n totals_BalMarkup_Bid?: number;\n totals_ActualMarkup_Bid?: number;\n totals_BalancedBid_Bid?: number;\n totals_BidTotal_Bid?: number;\n totals_AddonBondTotal?: number;\n totals_TotalEqp_Direct?: number;\n totals_TotalEqp_Indirect?: number;\n totals_TotalEqp_Total?: number;\n totals_Manhours_Direct?: number;\n totals_Manhours_Indirect?: number;\n totals_Manhours_Total?: number;\n totals_Addon_Cost?: number;\n totals_Bond?: number;\n totals_Addon_Markup?: number;\n totals_Addon_Total?: number;\n totals_TotalCost_Takeoff?: number;\n totals_Job_Duration?: number;\n totals_BalMarkup_Takeoff?: number;\n totals_ActualMarkup_Takeoff?: number;\n totals_BalancedBid_Takeoff?: number;\n totals_PassThrough_Cost?: number;\n totals_PassThrough_Adjustment?: number;\n totals_PassThrough_Total?: number;\n totals_TotalCost_Bid_LessPassThrough?: number;\n totals_TotalCost_Bid?: number;\n totals_Total_User_Adjustments?: number;\n totals_Total_User_Adjustments_Cost?: number;\n totals_Desired_Bid?: number;\n totals_Desired_Bid_Diff?: number;\n totals_BidTotal_Takeoff?: number;\n totals_TotalCost_Takeoff_LessPassThrough?: number;\n totals_MarkupPercentCost_Takeoff?: number;\n totals_MarkupPercentCost_Bid?: number;\n totals_MarkupPercentSales_Takeoff?: number;\n totals_MarkupPercentSales_Bid?: number;\n totals_TotalCost_Takeoff_LessPassThroughAndAdjustments?: number;\n totals_TotalCost_Bid_LessPassThroughAndAdjustments?: number;\n totals_TotalEntryCost_Bid_Spread_Indirect?: number;\n totals_AddonBond_Cost_Bid_Spread_Total?: number;\n totals_TotalCost_Bid_Spread?: number;\n totals_BalMarkup_Bid_Spread?: number;\n totals_ActualMarkup_Bid_Spread?: number;\n totals_Actv_User_Quan1?: number;\n totals_Actv_User_Quan2?: number;\n totals_Actv_User_Quan3?: number;\n totals_Actv_User_Quan4?: number;\n totals_Open_Biditems?: number;\n totals_Minority_Goal_Percent?: number;\n totals_Minority_Goal_Total?: number;\n totals_Minority_Current_Percent?: number;\n totals_Minority_Current_Total?: number;\n empId?: string | null;\n}\n\nexport type ODataQueryOptionsOfEstimateFlattened = ODataQueryOptions & {\n ifMatch?: ETagOfEstimateFlattened | null;\n ifNoneMatch?: ETagOfEstimateFlattened | null;\n};\n\nexport type ETagOfEstimateFlattened = ETag & { [key: string]: any };\n\nexport interface ReportsDto {\n reports?: ReportViewModel[] | null;\n}\n\nexport interface UniqueEstimateFilters {\n businessUnitCode?: string[] | null;\n filter1?: string[] | null;\n filter2?: string[] | null;\n filter3?: string[] | null;\n filter4?: string[] | null;\n filter5?: string[] | null;\n filter6?: string[] | null;\n estimator?: string[] | null;\n status?: string[] | null;\n owner?: string[] | null;\n wcState?: string[] | null;\n typeWork?: string[] | null;\n engineer?: string[] | null;\n projectName?: string[] | null;\n projectNumber?: string[] | null;\n [key: string]: string[] | null | undefined;\n}\nexport interface ActivityTotal {\n estimateId: string;\n activityCode: string;\n units: string;\n cost: number;\n quantity: number;\n}\n\nexport interface ActivityFormulaDto {\n match: FormulaMatchOptions;\n expression: string;\n unit: string;\n}\n\nexport enum FormulaMatchOptions {\n StartsWith,\n Exact\n}\n\nexport type Activity = Entity & {\n biditemId?: string;\n /**\n * The activity code.\n */\n activityCode?: string;\n /**\n * The bid item code.\n */\n biditemCode?: string;\n /**\n * The description.\n */\n description?: string;\n /**\n * The quantity.\n */\n quantity?: number;\n /**\n * The unit of measure.\n */\n units?: string;\n /**\n * The factorable.\n */\n factorable?: string;\n /**\n * The save skip cost.\n */\n saveSkipCost?: string;\n /**\n * The worker's comp code.\n */\n workersCompCode?: string;\n /**\n * The marine worker's comp.\n */\n marineWorkersComp?: string;\n /**\n * The summary code.\n */\n summaryCode?: string;\n /**\n * The calendar.\n */\n calendar?: string;\n /**\n * The hours per day.\n */\n hoursPerDay?: number;\n /**\n * The CPM prior item.\n */\n cpmPriorItem?: string;\n /**\n * The sort option.\n */\n sortOption?: string;\n /**\n * The skip cost.\n */\n skipCost?: string;\n /**\n * The crew.\n */\n crew?: string;\n /**\n * The crew hours.\n */\n crewHours?: number;\n /**\n * The crew percent.\n */\n crewPercent?: number;\n /**\n * The production type.\n */\n productionType?: string;\n /**\n * The production rate.\n */\n productionRate?: number;\n /**\n * The user1.\n */\n user1?: number;\n /**\n * The user2.\n */\n user2?: number;\n /**\n * The user3.\n */\n user3?: number;\n /**\n * The user4.\n */\n user4?: number;\n /**\n * The accounting code 1.\n */\n accountingJCCode1?: string;\n /**\n * The accounting code 2.\n */\n accountingJCCode2?: string;\n /**\n * The alternate cost code.\n */\n alternateCostCode?: string;\n /**\n * The tagged.\n */\n tagged?: string;\n /**\n * The image attached.\n */\n imageAttached?: string;\n /**\n * The resoirce factor risk percent.\n */\n resourceFactorRiskPercent?: number;\n /**\n * The efficient percent.\n */\n efficientPercent?: number;\n /**\n * The calculated duration.\n */\n calculatedDuration?: number;\n /**\n * The modified crew.\n */\n modifiedCrew?: string;\n /**\n * The user flag 1.\n */\n userFlag1?: string;\n /**\n * The user flag 2.\n */\n userFlag2?: string;\n /**\n * The man hours.\n */\n manHours?: number;\n /**\n * The direct total.\n */\n directTotal?: number;\n /**\n * The crew cost.\n */\n crewCost?: number;\n /**\n * The crew cost with material.\n */\n crewCost_WithMaterial?: number;\n /**\n * The notes.\n */\n notes?: string;\n /**\n * The report group1.\n */\n reportGroup1?: string;\n /**\n * The report group2.\n */\n reportGroup2?: string;\n /**\n * The report group3.\n */\n reportGroup3?: string;\n /**\n * The report group4.\n */\n reportGroup4?: string;\n /**\n * The report group5.\n */\n reportGroup5?: string;\n /**\n * The report group6.\n */\n reportGroup6?: string;\n /**\n * The factor.\n */\n factor?: number;\n /**\n * The days.\n */\n days?: number;\n /**\n * The labor.\n */\n labor?: number;\n /**\n * The burden.\n */\n burden?: number;\n /**\n * The permanent material.\n */\n permanentMaterial?: number;\n /**\n * The construction material.\n */\n constructionMaterial?: number;\n /**\n * The subcontract.\n */\n subcontract?: number;\n /**\n * The equipment operating expense.\n */\n equipmentOperatingExpense?: number;\n /**\n * The company equipment.\n */\n companyEquipment?: number;\n /**\n * The rented equipment\n */\n rentedEquipment?: number;\n /**\n * The misc1.\n */\n misc1?: number;\n /**\n * The misc2.\n */\n misc2?: number;\n /**\n * The misc3.\n */\n misc3?: number;\n /**\n * The account revenue code.\n */\n accountingRevenueCode?: string;\n /**\n * The accounting description.\n */\n accountingDescription?: string;\n /**\n * The accounting quantity.\n */\n accountingQuantity?: number;\n /**\n * The accounting units.\n */\n accountingUnits?: string;\n /**\n * The accounting change order.\n */\n accountingChangeOrder?: string;\n /**\n * The HeavyJob code.\n */\n heavyJobCode?: string;\n /**\n * The HeavyJob description\n */\n heavyJobDescription?: string;\n /**\n * The HeavyJob quantity.\n */\n heavyJobQuantity?: number;\n /**\n * The HeavyJob unit.\n */\n heavyJobUnit?: string;\n /**\n * The link flag.\n */\n linkFlag?: number;\n /**\n * The add quantity.\n */\n addQuantity?: string;\n /**\n * The alternate description.\n */\n alternateDescription?: string;\n /**\n * The safety code.\n */\n safetyCode?: string;\n /**\n * The scheduling equivalent CPM item.\n */\n schedulingEquivalentCPMItem?: string;\n /**\n * The scheduling start1.\n */\n schedulingStart1?: number;\n /**\n * The scheduling duration1.\n */\n schedulingDuration1?: number;\n /**\n * The scheduling percent1.\n */\n schedulingPercent1?: number;\n /**\n * The schduling start1.\n */\n schedulingStart2?: number;\n /**\n * The scheduling duration2.\n */\n schedulingDuration2?: number;\n /**\n * The scheduling percent2.\n */\n schedulingPercent2?: number;\n /**\n * The scheduling start3.\n */\n schedulingStart3?: number;\n /**\n * The scheduling duration3.\n */\n schedulingDuration3?: number;\n /**\n * The scheduling percent3.\n */\n schedulingPercent3?: number;\n /**\n * The scheduling start4.\n */\n schedulingStart4?: number;\n /**\n * The scheduling duration4.\n */\n schedulingDuration4?: number;\n /**\n * The scheduling percent4.\n */\n schedulingPercent4?: number;\n /**\n * The scheduling CPM lag.\n */\n schedulingCPMLag?: number;\n /**\n * The scheduling bar option.\n */\n schedulingBarOption?: string;\n /**\n * The scheduling sub net.\n */\n schedulingSubNet?: string;\n /**\n * The scheduling bar line number.\n */\n schedulingBarLineNum?: number;\n /**\n * The scheduling CPM export description.\n */\n schedulingCPMExportDescription?: string;\n /**\n * The scheduling CPM sequential.\n */\n schedulingCPMSequential?: string;\n};\n\nexport type Biditem = Entity & {\n estimateId?: string;\n /**\n * The bid.\n */\n bid?: string;\n /**\n * The description.\n */\n description?: string;\n /**\n * The activities.\n */\n activities?: Activity[] | null;\n /**\n * The type.\n */\n type?: string;\n /**\n * The quantity.\n */\n quantity?: number;\n /**\n * The engineering quantity.\n */\n engineeringQuantity?: number;\n /**\n * The unit of meaure.\n */\n units?: string;\n /**\n * The engineering bid.\n */\n engineeringBid?: string;\n /**\n * The image attached.\n */\n imageAttached?: string;\n /**\n * The subtotal level.\n */\n subtotalLevel?: string;\n /**\n * The other option.\n */\n otherOptions?: string;\n /**\n * The WBS code.\n */\n wbsCode?: string;\n /**\n * The pass through.\n */\n passThrough?: string;\n /**\n * The marine land.\n */\n marineLand?: string;\n /**\n * The parent.\n */\n parent?: string;\n /**\n * The subdivided.\n */\n subDivided?: string;\n /**\n * The alternate units.\n */\n alternateUnits?: string;\n /**\n * The alternate description.\n */\n alternateDescription?: string;\n /**\n * The low bid.\n */\n lowBid?: number;\n /**\n * The average bid.\n */\n averageBid?: number;\n /**\n * The high bid.\n */\n highBid?: number;\n /**\n * The state code.\n */\n stateCode?: string;\n /**\n * The unit cost holding account.\n */\n unitCostHoldingAccount?: string;\n /**\n * The bid history id.\n */\n bidHistoryID?: number;\n /**\n * The tax percent.\n */\n taxPercent?: number;\n /**\n * The taxable.\n */\n taxable?: string;\n /**\n * The bid price.\n */\n bidPrice?: number;\n /**\n * The summary group1.\n */\n summaryGroup1?: string;\n /**\n * The summary group2.\n */\n summaryGroup2?: string;\n /**\n * The summary group3.\n */\n summaryGroup3?: string;\n /**\n * The summary group4.\n */\n summaryGroup4?: string;\n /**\n * The summary group5.\n */\n summaryGroup5?: string;\n /**\n * The summary group6.\n */\n summaryGroup6?: string;\n /**\n * The review flag.\n */\n reviewFlag?: string;\n /**\n * The estimate initials.\n */\n estInitials?: string;\n /**\n * The sort code.\n */\n sortCode?: string;\n /**\n * The cost notes.\n */\n costNotes?: string;\n /**\n * The bid notes.\n */\n bidNotes?: string;\n /**\n * The factor.\n */\n factor?: number;\n /**\n * The scheduling start1.\n */\n schedulingStart1?: number;\n /**\n * The scheduling duration1.\n */\n schedulingDuration1?: number;\n /**\n * The scheduling percent1.\n */\n schedulingPercent1?: number;\n /**\n * The scheduling start2.\n */\n schedulingStart2?: number;\n /**\n * The scheduling duration2.\n */\n schedulingDuration2?: number;\n /**\n * The scheduling percent2.\n */\n schedulingPercent2?: number;\n /**\n * The scheduling start3.\n */\n schedulingStart3?: number;\n /**\n * The scheduling duration3.\n */\n schedulingDuration3?: number;\n /**\n * The scheduling percent3.\n */\n schedulingPercent3?: number;\n /**\n * The scheduling start4.\n */\n schedulingStart4?: number;\n /**\n * The scheduling duration4.\n */\n schedulingDuration4?: number;\n /**\n * The scheduling percent4.\n */\n schedulingPercent4?: number;\n /**\n * The bid item percent value.\n */\n biditemPercentValue?: number;\n /**\n * The pricing status.\n */\n pricingStatus?: string;\n /**\n * The user activity1.\n */\n userActivity1?: number;\n /**\n * The user activity2.\n */\n userActivity2?: number;\n /**\n * The user activity3.\n */\n userActivity3?: number;\n /**\n * The user activity4.\n */\n userActivity4?: number;\n /**\n * The labor.\n */\n labor?: number;\n /**\n * The burden.\n */\n burden?: number;\n /**\n * The permanent material.\n */\n permanentMaterial?: number;\n /**\n * The construction material.\n */\n constructionMaterial?: number;\n /**\n * The subcontract.\n */\n subcontract?: number;\n /**\n * The equipment operating expense.\n */\n equipmentOperatingExpense?: number;\n /**\n * The company equipment.\n */\n companyEquipment?: number;\n /**\n * The rented equipment.\n */\n rentedEquipment?: number;\n /**\n * Misc1.\n */\n misc1?: number;\n /**\n * Misc2.\n */\n misc2?: number;\n /**\n * Misc3.\n */\n misc3?: number;\n /**\n * The direct total.\n */\n directTotal?: number;\n /**\n * The equipment account dollars.\n */\n equipmentAccountDollars?: number;\n /**\n * The indirect total.\n */\n indirectTotal?: number;\n /**\n * The addon bond.\n */\n addonBond?: number;\n /**\n * The total cost.\n */\n totalCost?: number;\n /**\n * The total cost adjustment to bid quantity.\n */\n totalCostAdjToBidQuantity?: number;\n /**\n * The markup.\n */\n markup?: number;\n /**\n * The total takeoff.\n */\n totalTakeoff?: number;\n /**\n * The total balanced.\n */\n totalBalanced?: number;\n /**\n * The man-hours.\n */\n manhours?: number;\n /**\n * The escalation total cost.\n */\n escalationTotalCost?: number;\n /**\n * The fixed cost.\n */\n fixedCost?: number;\n /**\n * The freeze bid.\n */\n freezeBid?: string;\n /**\n * The sequence item number.\n */\n sequenceItemNumber?: number;\n /**\n * The holding account activity quantity.\n */\n holdingAccountActivityQuantity?: number;\n /**\n * The account revenue code.\n */\n accountingRevenueCode?: string;\n /**\n * The scheduling CPM code.\n */\n schedulingCPMCode?: string;\n /**\n * The scheduling CPM overlap.\n */\n schedulingCPMOverlap?: number;\n /**\n * The schduling calculated days.\n */\n schedulingCalc_Days?: number;\n /**\n * The folder.\n */\n folder?: string;\n /**\n * The link flag.\n */\n linkFlag?: number;\n /**\n * The single alternate.\n */\n singleAlternate?: string;\n /**\n * The package alternate.\n */\n packageAlternate?: string;\n /**\n * The user flag1.\n */\n userFlag1?: string;\n /**\n * The user flag2.\n */\n userFlag2?: string;\n /**\n * The child bid price.\n */\n childBidPrice?: number;\n /**\n * The zero price text.\n */\n zeroPriceText?: string;\n /**\n * The unit cost item.\n */\n unitCostItem?: string;\n};\n\nexport type ODataQueryOptionsOfBusinessUnit = ODataQueryOptions & {\n ifMatch?: ETagOfBusinessUnit | null;\n ifNoneMatch?: ETagOfBusinessUnit | null;\n};\n\nexport type ETagOfBusinessUnit = ETag & { [key: string]: any };\n\nexport type ODataQueryOptionsOfDatabasePartition = ODataQueryOptions & {\n ifMatch?: ETagOfDatabasePartition | null;\n ifNoneMatch?: ETagOfDatabasePartition | null;\n};\n\nexport type ETagOfDatabasePartition = ETag & { [key: string]: any };\n\nexport type KeyIndicator = Entity & {\n /**\n * The partition id.\n */\n partitionId?: string;\n /**\n * The partition.\n */\n partition?: DatabasePartition | null;\n /**\n * The heavybid id.\n */\n heavyBidId?: string | null;\n /**\n * The key indicator origin type.\n */\n origin?: KeyIndicatorOriginType;\n /**\n * The result name.\n */\n resultName?: string | null;\n /**\n * The result decimal length.\n */\n resultDecimalLength?: number;\n /**\n * The left display name.\n */\n leftDisplayName?: string | null;\n /**\n * The left operand type.\n */\n leftOperandType?: KeyIndicatorOperandType;\n /**\n * The left operand value.\n */\n leftOperandValue?: string | null;\n /**\n * The left operand decimal length.\n */\n leftOperandDecimalLength?: number;\n /**\n * The operator.\n */\n operator?: string | null;\n /**\n * The right display name.\n */\n rightDisplayName?: string | null;\n /**\n * The right operand type.\n */\n rightOperandType?: KeyIndicatorOperandType;\n /**\n * The right operand value.\n */\n rightOperandValue?: string | null;\n /**\n * The right operand decimal length.\n */\n rightOperandDecimalLength?: number;\n};\n\nexport type KeyIndicatorOriginType = number;\n\nexport type KeyIndicatorOperandType = number;\n\nexport type ODataQueryOptionsOfKeyIndicator = ODataQueryOptions & {\n ifMatch?: ETagOfKeyIndicator | null;\n ifNoneMatch?: ETagOfKeyIndicator | null;\n};\n\nexport type ETagOfKeyIndicator = ETag & { [key: string]: any };\n\nexport type Resource = Entity & {\n /**\n * The activity id.\n */\n activityId?: string;\n /**\n * The resource code.\n */\n resourceCode?: string;\n /**\n * The activity code.\n */\n activityCode?: string;\n /**\n * The bid item code.\n */\n biditemCode?: string;\n /**\n * The description.\n */\n description?: string;\n /**\n * The type cost.\n */\n typeCost?: string;\n /**\n * The type of equipment rent.\n */\n typeOfEquipmentRent?: string;\n /**\n * The sub type.\n */\n subType?: string;\n /**\n * The quantity.\n */\n quantity?: number;\n /**\n * The unit of measure.\n */\n units?: string;\n /**\n * The percent.\n */\n percent?: number;\n /**\n * The unit price.\n */\n unitPrice?: number;\n /**\n * The currency.\n */\n currency?: string;\n /**\n * The sub type cost.\n */\n subTypeCost?: number;\n /**\n * The total.\n */\n total?: number;\n /**\n * The factorable.\n */\n factorable?: string;\n /**\n * The factor.\n */\n factor?: number;\n /**\n * The supplemental description.\n */\n supplementalDescription?: string;\n /**\n * The skip cost.\n */\n skipCost?: string;\n /**\n * The number of pieces.\n */\n pieces?: number;\n /**\n * The operating percent.\n */\n operatingPercent?: number;\n /**\n * The rent percent.\n */\n rentPercent?: number;\n /**\n * The production code.\n */\n productionCode?: string;\n /**\n * The production.\n */\n production?: number;\n /**\n * The crew code.\n */\n crewCode?: string;\n /**\n * The equipment operator code.\n */\n equipmentOperatorCode?: string;\n /**\n * The escalation percent.\n */\n escalationPercent?: number;\n /**\n * The plug indicator.\n */\n plugIndicator?: string;\n /**\n * The calendar.\n */\n calendar?: string;\n /**\n * The start day,\n */\n startDay?: string;\n /**\n * The special schedule.\n */\n specialSchedule?: string;\n /**\n * The man hour adjustment per shift.\n */\n manHourAdjustmentPerShift?: number;\n /**\n * The selected vendor.\n */\n selectedVendor?: string;\n /**\n * The man hour unit.\n */\n manHourUnit?: number;\n /**\n * The escalation override.\n */\n escalationOverride?: string;\n /**\n * The unused flag3.\n */\n unusedFlag3?: string;\n /**\n * The link flag.\n */\n linkflag?: number;\n /**\n * The class.\n */\n class?: string;\n /**\n * The alternate quantity.\n */\n alternateQuantity?: number;\n /**\n * The alternate unit.\n */\n alternateUnits?: string;\n /**\n * The resource text1.\n */\n resourceText1?: string;\n /**\n * The resource text2.\n */\n resourceText2?: string;\n};\n\nexport type ODataQueryOptionsOfSystemInfo = ODataQueryOptions & {\n ifMatch?: ETagOfSystemInfo | null;\n ifNoneMatch?: ETagOfSystemInfo | null;\n};\n\nexport type ETagOfSystemInfo = ETag & { [key: string]: any };\n\nexport interface EstimateKPIs {\n kpis?: Kpi[] | null;\n estimate?: EstimateSummaryExtended | null;\n}\n\nexport interface Kpi {\n id: string;\n name: string;\n leftField: string;\n rightField: string;\n operator: string;\n values: KPIValue[];\n stats: KPIStats;\n currentValues: KPICurrentValues;\n resultDecimals: number;\n rightDecimals: number;\n leftDecimals: number;\n originType: KeyIndicatorOriginType;\n}\n\nexport interface KPIValue {\n value: number;\n estimateCode: string;\n estimateName: string;\n}\n\nexport interface KPIStats {\n iqr: number;\n min: number;\n max: number;\n q1: number;\n q2: number;\n q3: number;\n lower: number;\n lowerActual: number;\n upper: number;\n upperActual: number;\n}\n\nexport interface KPICurrentValues {\n result: number;\n left: number;\n right: number;\n}\n\nexport interface GenericResponse {\n success?: boolean;\n errorMessage?: string | null;\n}\n\nexport interface KeyIndicatorViewModel {\n heavyBidId?: string | null;\n origin?: KeyIndicatorOriginType;\n resultName?: string | null;\n resultDecimalLength?: number;\n leftDisplayName?: string | null;\n leftOperandType?: KeyIndicatorOperandType;\n leftOperandValue?: string | null;\n leftOperandDecimalLength?: number;\n operator?: string | null;\n rightDisplayName?: string | null;\n rightOperandType?: KeyIndicatorOperandType;\n rightOperandValue?: string | null;\n rightOperandDecimalLength?: number;\n}\n\nexport interface PingViewModel {\n success?: boolean;\n pingMessage?: string | null;\n user?: CurrentUser | null;\n}\n\nexport interface CurrentUser {\n companyId?: string;\n userId?: string;\n companyName?: string | null;\n businessUnitName?: string | null;\n connectionString?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n insightsAccess?: boolean;\n isAzureClient?: boolean;\n businessUnits?: string[] | null;\n canViewAllBusinessUnits?: boolean;\n}\n\nexport interface QuoteFolderSummaryDto {\n id?: string;\n folder?: string | null;\n description?: string | null;\n type?: string | null;\n estimatorInitials?: string | null;\n selectedVendor?: string | null;\n folderTotal?: number;\n hasPluggedPrices?: boolean;\n}\n\nexport interface QuoteFolderDto {\n id: string;\n quoteMasterId?: string;\n folder: string;\n description?: string | null;\n type?: string | null;\n estimatorInitials?: string | null;\n notes?: string | null;\n breakout?: string | null;\n selectedVendor?: string | null;\n showBiditem?: string | null;\n showActivity?: string | null;\n showResource?: string | null;\n useSelfPerform?: string | null;\n totalAdditiveFactored?: number;\n totalAdditiveNonFactored?: number;\n totalNonAdditiveFactored?: number;\n totalNonAdditiveNonFactored?: number;\n updatedSelectedVendorTotal?: number;\n syncRequired?: boolean;\n folderTotal?: number;\n quoteItems?: QuoteItemDto[] | null;\n quoteVendors?: QuoteVendorDto[] | null;\n adHocAdjustmentItems?: QuoteItemDto[] | null;\n}\n\nexport interface QuoteItemDto {\n id?: string;\n quoteFolderId?: string;\n biditem?: string | null;\n activity?: string | null;\n resource?: string | null;\n plugPrice?: number;\n unit?: string | null;\n quantityAdditiveFactored?: number;\n quantityAdditiveNonFactored?: number;\n quantityNonAdditiveFactored?: number;\n quantityNonAdditiveNonFactored?: number;\n currency?: string | null;\n isSelfPerform?: string | null;\n selfAmount?: number;\n selectedVendor?: string | null;\n alternateSort?: string | null;\n alternateDescription?: string | null;\n addendumNumber?: string | null;\n actualPlug?: number;\n alternateQuantity?: number;\n unitCostInEstimate?: number;\n clientNo?: string | null;\n isAdhocAdjustmentItem?: boolean;\n syncRequired?: boolean;\n quotes?: QuoteDto[] | null;\n}\n\nexport interface QuoteDto {\n id?: string;\n quoteItemId?: string;\n quoteVendorId?: string;\n quoteVendorCode?: string | null;\n plugIndicator?: string | null;\n previousPrice?: number;\n previousUnit?: string | null;\n quantityAdditiveFactored?: number;\n quantityAdditiveNonFactored?: number;\n quantityNonAdditiveFactored?: number;\n quantityNonAdditiveNonFactored?: number;\n totalAdditiveFactored?: number;\n totalAdditiveNonFactored?: number;\n totalNonAdditiveFactored?: number;\n totalNonAdditiveNonFactored?: number;\n quoteUnit?: string | null;\n quotePrice?: number;\n quoteCurrency?: string | null;\n lastModified?: string;\n syncRequired?: boolean;\n}\n\nexport interface QuoteVendorDto {\n id?: string;\n quoteFolderId?: string;\n code?: string | null;\n name?: string | null;\n totalAdditiveFactored?: number;\n totalAdditiveNonFactored?: number;\n totalNonAdditiveFactored?: number;\n totalNonAdditiveNonFactored?: number;\n plugAdditiveFactored?: number;\n plugAdditiveNonFactored?: number;\n plugNonAdditiveFactored?: number;\n plugNonAdditiveNonFactored?: number;\n adHocAdditiveFactored?: number;\n adHocAdditiveNonFactored?: number;\n adHocNonAdditiveFactored?: number;\n adHocNonAdditiveNonFactored?: number;\n vendorContact?: string | null;\n jobTitle?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n email?: string | null;\n phone?: string | null;\n cellPhone?: string | null;\n fax?: string | null;\n address1?: string | null;\n address2?: string | null;\n address3?: string | null;\n city?: string | null;\n state?: string | null;\n zip?: string | null;\n bondable?: string | null;\n bondRate?: number;\n mobilizationAmount?: number;\n adjustmentPercent?: number;\n adjustmentAmount?: number;\n minorityStatuses?: MinorityClass[] | null;\n minority1?: MinorityClass | null;\n minority2?: MinorityClass | null;\n minority3?: MinorityClass | null;\n minority4?: MinorityClass | null;\n minority5?: MinorityClass | null;\n excluded?: string | null;\n notes?: string | null;\n pluggedAmount?: number;\n quotedAmount?: number;\n totalAdditive?: number;\n syncRequired?: boolean;\n lastModified?: string;\n totalAdjustments?: number;\n vendorTotal?: number;\n}\n\nexport interface MinorityClass {\n /**\n * HeavyBid Field: MIN_CLASS\n */\n code?: string;\n /**\n * HeavyBid Field: MIN_PERCENT\n */\n percent?: number;\n /**\n * HeavyBid Field: CERT#\n */\n certificateNumber?: string;\n}\n\nexport interface QuoteMasterDto {\n id?: string;\n estimateId?: string;\n adjustToBidQuantity?: string | null;\n syncRequired?: boolean;\n quoteFolders?: QuoteFolderDto[] | null;\n}\n\nexport interface AcceptQuoteDto {\n estimateId?: string;\n vendorCode?: string | null;\n prices?: QuotePriceDto[] | null;\n adhocAdjustments?: QuoteAdhocAdjustmentDto[] | null;\n notes?: QuoteVendorNotesDto[] | null;\n}\n\nexport interface QuotePriceDto {\n quoteItemId?: string;\n quoteFolderId?: string;\n quotePrice?: number;\n}\n\nexport interface QuoteAdhocAdjustmentDto {\n id?: string;\n quoteFolderId?: string;\n description?: string | null;\n total?: number;\n}\n\nexport interface QuoteVendorNotesDto {\n quoteFolderId?: string;\n notes?: string | null;\n}\n\nexport interface QuoteVendorSummaryDto {\n id?: string;\n quoteFolderId?: string;\n code?: string | null;\n name?: string | null;\n vendorContact?: string | null;\n jobTitle?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n email?: string | null;\n phone?: string | null;\n cellPhone?: string | null;\n fax?: string | null;\n address1?: string | null;\n address2?: string | null;\n address3?: string | null;\n city?: string | null;\n state?: string | null;\n zip?: string | null;\n adjustmentPercent?: number;\n adjustmentAmount?: number;\n minorityStatuses?: MinorityClass[] | null;\n pluggedAmount?: number;\n quotedAmount?: number;\n totalAdditive?: number;\n}\n\nexport interface EstimateViewModel {\n id?: string;\n partitionId?: string;\n code?: string | null;\n name?: string | null;\n blobUrl?: string | null;\n processedStatus?: StatusCode;\n description?: string | null;\n estimateVersion?: string | null;\n isActiveEstimate?: boolean;\n filters?: EstimateFilters | null;\n totals?: EstimateTotals | null;\n biditems?: BiditemViewModel[] | null;\n attachments?: AttachmentViewModel[] | null;\n}\n\nexport interface AttachmentViewModel {\n estimateId?: string;\n lookupId?: string;\n blobUrl?: string | null;\n heavyBidFileName?: string | null;\n attachmentType?: AttachmentType;\n}\n\nexport type AttachmentType = number;\n\nexport interface UploadViewModel {\n success?: number;\n estimateId?: string;\n blobURL?: string | null;\n blobHash?: string | null;\n msg?: string | null;\n}\n\nexport interface IntegrationResponseOfActivityIntegrationDto {\n data?: ActivityIntegrationDto[] | null;\n currentTopValue?: number | null;\n currentSkipValue?: number | null;\n nextSkipValue?: number | null;\n}\n\nexport interface ActivityIntegrationDto {\n /**\n * The unique activity id.\n */\n id?: string;\n /**\n * The unique estimate id.\n */\n estimateId?: string;\n /**\n * The HeavyBid estimate code.\n */\n estimateCode?: string | null;\n /**\n * The last modified date.\n */\n lastModified?: string;\n /**\n * The unique biditem id.\n */\n biditemId?: string;\n /**\n * The HeavyBid activity code.\n */\n activityCode?: string | null;\n /**\n * The HeavyBid biditem code.\n */\n biditemCode?: string | null;\n /**\n * The description.\n */\n description?: string | null;\n /**\n * The quantity.\n */\n quantity?: number;\n /**\n * The unit of measure.\n */\n units?: string | null;\n /**\n * The factorable.\n */\n factorable?: string | null;\n /**\n * The worker's comp code.\n */\n workersCompCode?: string | null;\n /**\n * The marine worker's comp code.\n */\n marineWorkersComp?: string | null;\n /**\n * The summary code.\n */\n summaryCode?: string | null;\n /**\n * The calendar.\n */\n calendar?: string | null;\n /**\n * The hours per day.\n */\n hoursPerDay?: number;\n /**\n * The crew code.\n */\n crew?: string | null;\n /**\n * The crew hours.\n */\n crewHours?: number;\n /**\n * The crew percent.\n */\n crewPercent?: number;\n /**\n * The production type.\n */\n productionType?: string | null;\n /**\n * The production rate.\n */\n productionRate?: number;\n /**\n * The user defined quantity 1.\n */\n user1?: number;\n /**\n * The user defined quantity 2.\n */\n user2?: number;\n /**\n * The user defined quantity 3.\n */\n user3?: number;\n /**\n * The user defined quantity 4.\n */\n user4?: number;\n /**\n * The accounting code 1.\n */\n accountingJCCode1?: string | null;\n /**\n * The accounting code 2.\n */\n accountingJCCode2?: string | null;\n /**\n * The alternate cost code.\n */\n alternateCostCode?: string | null;\n /**\n * The resource factor risk percent.\n */\n resourceFactorRiskPercent?: number;\n /**\n * The efficiency percent.\n */\n efficientPercent?: number;\n /**\n * The calculated duration.\n */\n calculatedDuration?: number;\n /**\n * The modified crew.\n */\n modifiedCrew?: string | null;\n /**\n * The user flag 1.\n */\n userFlag1?: string | null;\n /**\n * The user flag 2.\n */\n userFlag2?: string | null;\n /**\n * The total man hours.\n */\n manHours?: number;\n /**\n * The direct total.\n */\n directTotal?: number;\n /**\n * The total crew cost.\n */\n crewCost?: number;\n /**\n * The total crew cost with material.\n */\n crewCost_WithMaterial?: number;\n /**\n * The notes.\n */\n notes?: string | null;\n /**\n * The report group1.\n */\n reportGroup1?: string | null;\n /**\n * The report group2.\n */\n reportGroup2?: string | null;\n /**\n * The report group3.\n */\n reportGroup3?: string | null;\n /**\n * The report group4.\n */\n reportGroup4?: string | null;\n /**\n * The report group5.\n */\n reportGroup5?: string | null;\n /**\n * The report group6.\n */\n reportGroup6?: string | null;\n /**\n * The factor.\n */\n factor?: number;\n /**\n * The days.\n */\n days?: number;\n /**\n * The total labor.\n */\n labor?: number;\n /**\n * The total burden.\n */\n burden?: number;\n /**\n * The total permanent material.\n */\n permanentMaterial?: number;\n /**\n * The total construction material.\n */\n constructionMaterial?: number;\n /**\n * The total subcontract.\n */\n subcontract?: number;\n /**\n * The total equipment operating expense.\n */\n equipmentOperatingExpense?: number;\n /**\n * The total company equipment.\n */\n companyEquipment?: number;\n /**\n * The total rented equipment\n */\n rentedEquipment?: number;\n /**\n * The total misc1.\n */\n misc1?: number;\n /**\n * The total misc2.\n */\n misc2?: number;\n /**\n * The total misc3.\n */\n misc3?: number;\n /**\n * The accounting revenue code.\n */\n accountingRevenueCode?: string | null;\n /**\n * The accounting description.\n */\n accountingDescription?: string | null;\n /**\n * The accounting quantity.\n */\n accountingQuantity?: number;\n /**\n * The accounting units.\n */\n accountingUnits?: string | null;\n /**\n * The accounting change order.\n */\n accountingChangeOrder?: string | null;\n /**\n * The HeavyJob code.\n */\n heavyJobCode?: string | null;\n /**\n * The HeavyJob description\n */\n heavyJobDescription?: string | null;\n /**\n * The HeavyJob quantity.\n */\n heavyJobQuantity?: number;\n /**\n * The HeavyJob unit.\n */\n heavyJobUnit?: string | null;\n /**\n * The add quantity.\n */\n addQuantity?: string | null;\n /**\n * The alternate description.\n */\n alternateDescription?: string | null;\n /**\n * The safety code.\n */\n safetyCode?: string | null;\n /**\n * The CPM prior item.\n */\n cpmPriorItem?: string | null;\n /**\n * The scheduling equivalent CPM item.\n */\n schedulingEquivalentCPMItem?: string | null;\n /**\n * The scheduling start1.\n */\n schedulingStart1?: number;\n /**\n * The scheduling duration1.\n */\n schedulingDuration1?: number;\n /**\n * The scheduling percent1.\n */\n schedulingPercent1?: number;\n /**\n * The schduling start1.\n */\n schedulingStart2?: number;\n /**\n * The scheduling duration2.\n */\n schedulingDuration2?: number;\n /**\n * The scheduling percent2.\n */\n schedulingPercent2?: number;\n /**\n * The scheduling start3.\n */\n schedulingStart3?: number;\n /**\n * The scheduling duration3.\n */\n schedulingDuration3?: number;\n /**\n * The scheduling percent3.\n */\n schedulingPercent3?: number;\n /**\n * The scheduling start4.\n */\n schedulingStart4?: number;\n /**\n * The scheduling duration4.\n */\n schedulingDuration4?: number;\n /**\n * The scheduling percent4.\n */\n schedulingPercent4?: number;\n /**\n * The scheduling CPM lag.\n */\n schedulingCPMLag?: number;\n /**\n * The scheduling bar option.\n */\n schedulingBarOption?: string | null;\n /**\n * The scheduling sub net.\n */\n schedulingSubNet?: string | null;\n /**\n * The scheduling bar line number.\n */\n schedulingBarLineNum?: number;\n /**\n * The scheduling CPM export description.\n */\n schedulingCPMExportDescription?: string | null;\n /**\n * The scheduling CPM sequential.\n */\n schedulingCPMSequential?: string | null;\n}\n\nexport type ODataQueryOptionsOfActivityIntegrationDto = ODataQueryOptions & {\n ifMatch?: ETagOfActivityIntegrationDto | null;\n ifNoneMatch?: ETagOfActivityIntegrationDto | null;\n};\n\nexport type ETagOfActivityIntegrationDto = ETag & { [key: string]: any };\n\nexport interface IntegrationResponseSingleOfActivityIntegrationDto {\n data?: ActivityIntegrationDto | null;\n}\n\nexport interface IntegrationResponseOfBiditemIntegrationDto {\n data?: BiditemIntegrationDto[] | null;\n currentTopValue?: number | null;\n currentSkipValue?: number | null;\n nextSkipValue?: number | null;\n}\n\nexport interface BiditemIntegrationDto {\n /**\n * The unique biditem id.\n */\n id?: string;\n /**\n * The unique estimate id.\n */\n estimateId?: string;\n /**\n * The HeavyBid estimate code.\n */\n estimateCode?: string | null;\n /**\n * The last modified date.\n */\n lastModified?: string;\n /**\n * The HeavyBid biditem code.\n */\n biditemCode?: string | null;\n /**\n * The description.\n */\n description?: string | null;\n /**\n * The type.\n */\n type?: string | null;\n /**\n * The takeoff quantity - this is what costs inside of HeavyBid are based on, not what is submitted to the owner\n */\n quantity?: number;\n /**\n * Bid Quantity - this is the quantity that will be priced and given to the owner when the bid is submitted\n */\n bidQuantity?: number;\n /**\n * The unit of meaure.\n */\n units?: string | null;\n /**\n * The client number or owners number that sometimes is used for bidforms instead of biditem number\n */\n clientNumber?: string | null;\n /**\n * The subtotal level.\n */\n subtotalLevel?: string | null;\n /**\n * The other option.\n */\n otherOptions?: string | null;\n /**\n * The WBS code.\n */\n wbsCode?: string | null;\n /**\n * A flag to represent if the biditem is a passthrough item.\n */\n passThrough?: string | null;\n /**\n * A flag to represent if the biditem is marine / land.\n */\n marineLand?: string | null;\n /**\n * The parent biditem code.\n */\n parent?: string | null;\n /**\n * A flag to represent if the biditem is subdivided.\n */\n subDivided?: string | null;\n /**\n * The alternate units.\n */\n alternateUnits?: string | null;\n /**\n * The alternate description.\n */\n alternateDescription?: string | null;\n /**\n * The low bid.\n */\n lowBid?: number;\n /**\n * The average bid.\n */\n averageBid?: number;\n /**\n * The high bid.\n */\n highBid?: number;\n /**\n * The state code.\n */\n stateCode?: string | null;\n /**\n * The unit cost holding account.\n */\n unitCostHoldingAccount?: string | null;\n /**\n * The tax percent.\n */\n taxPercent?: number;\n /**\n * A flag representing if the biditem is taxable.\n */\n taxable?: string | null;\n /**\n * The bid price.\n */\n bidPrice?: number;\n /**\n * The summary group1.\n */\n summaryGroup1?: string | null;\n /**\n * The summary group2.\n */\n summaryGroup2?: string | null;\n /**\n * The summary group3.\n */\n summaryGroup3?: string | null;\n /**\n * The summary group4.\n */\n summaryGroup4?: string | null;\n /**\n * The summary group5.\n */\n summaryGroup5?: string | null;\n /**\n * The summary group6.\n */\n summaryGroup6?: string | null;\n /**\n * A flag representing if the biditem has been reviewed.\n */\n reviewFlag?: string | null;\n /**\n * The estimator initials.\n */\n estInitials?: string | null;\n /**\n * The biditem sort code.\n */\n sortCode?: string | null;\n /**\n * The cost notes.\n */\n costNotes?: string | null;\n /**\n * The bid notes.\n */\n bidNotes?: string | null;\n /**\n * The factor.\n */\n factor?: number;\n /**\n * The scheduling start1.\n */\n schedulingStart1?: number;\n /**\n * The scheduling duration1.\n */\n schedulingDuration1?: number;\n /**\n * The scheduling percent1.\n */\n schedulingPercent1?: number;\n /**\n * The scheduling start2.\n */\n schedulingStart2?: number;\n /**\n * The scheduling duration2.\n */\n schedulingDuration2?: number;\n /**\n * The scheduling percent2.\n */\n schedulingPercent2?: number;\n /**\n * The scheduling start3.\n */\n schedulingStart3?: number;\n /**\n * The scheduling duration3.\n */\n schedulingDuration3?: number;\n /**\n * The scheduling percent3.\n */\n schedulingPercent3?: number;\n /**\n * The scheduling start4.\n */\n schedulingStart4?: number;\n /**\n * The scheduling duration4.\n */\n schedulingDuration4?: number;\n /**\n * The scheduling percent4.\n */\n schedulingPercent4?: number;\n /**\n * The bid item percent value.\n */\n biditemPercentValue?: number;\n /**\n * The pricing status.\n */\n pricingStatus?: string | null;\n /**\n * The total user activity quantity 1.\n */\n userActivity1?: number;\n /**\n * The total user activity quantity 2.\n */\n userActivity2?: number;\n /**\n * The total user activity quantity 3.\n */\n userActivity3?: number;\n /**\n * The total user activity quantity 4.\n */\n userActivity4?: number;\n /**\n * The total labor.\n */\n labor?: number;\n /**\n * The total burden.\n */\n burden?: number;\n /**\n * The total permanent material.\n */\n permanentMaterial?: number;\n /**\n * The total construction material.\n */\n constructionMaterial?: number;\n /**\n * The total subcontract.\n */\n subcontract?: number;\n /**\n * The total equipment operating expense.\n */\n equipmentOperatingExpense?: number;\n /**\n * The total company equipment.\n */\n companyEquipment?: number;\n /**\n * The total rented equipment.\n */\n rentedEquipment?: number;\n /**\n * The total Misc1.\n */\n misc1?: number;\n /**\n * The total Misc2.\n */\n misc2?: number;\n /**\n * The total Misc3.\n */\n misc3?: number;\n /**\n * The direct total.\n */\n directTotal?: number;\n /**\n * The total equipment account dollars.\n */\n equipmentAccountDollars?: number;\n /**\n * The indirect total.\n */\n indirectTotal?: number;\n /**\n * The addon bond total.\n */\n addonBond?: number;\n /**\n * The total cost.\n */\n totalCost?: number;\n /**\n * The total cost adjustment to bid quantity.\n */\n totalCostAdjToBidQuantity?: number;\n /**\n * The markup.\n */\n markup?: number;\n /**\n * The total takeoff.\n */\n totalTakeoff?: number;\n /**\n * The total balanced.\n */\n totalBalanced?: number;\n /**\n * The man-hours.\n */\n manhours?: number;\n /**\n * The escalation total cost.\n */\n escalationTotalCost?: number;\n /**\n * The fixed cost.\n */\n fixedCost?: number;\n /**\n * A flag representing if the biditem is frozen for pricing purposes.\n */\n freezeBid?: string | null;\n /**\n * The sequence item number.\n */\n sequenceItemNumber?: number;\n /**\n * The holding account activity quantity.\n */\n holdingAccountActivityQuantity?: number;\n /**\n * The account revenue code.\n */\n accountingRevenueCode?: string | null;\n /**\n * Scheduling Critical Path Method Code (CPM) assigns a code to each Biditem for export to another scheduling system.\n */\n schedulingCPMCode?: string | null;\n /**\n * The number of days between the start of this Biditem and the end of this items Predecessor biditem.\n */\n schedulingCPMOverlap?: number;\n /**\n * The scheduling calculated days.\n */\n schedulingCalc_Days?: number;\n /**\n * The folder.\n */\n folder?: string | null;\n /**\n * The single alternate.\n */\n singleAlternate?: string | null;\n /**\n * The package alternate.\n */\n packageAlternate?: string | null;\n /**\n * The user flag1.\n */\n userFlag1?: string | null;\n /**\n * The user flag2.\n */\n userFlag2?: string | null;\n /**\n * The child bid price.\n */\n childBidPrice?: number;\n /**\n * A note field for the users to write notes about why this Biditem has 0 price.\n */\n zeroPriceText?: string | null;\n /**\n * The unit cost item.\n */\n unitCostItem?: string | null;\n}\n\nexport type ODataQueryOptionsOfBiditemIntegrationDto = ODataQueryOptions & {\n ifMatch?: ETagOfBiditemIntegrationDto | null;\n ifNoneMatch?: ETagOfBiditemIntegrationDto | null;\n};\n\nexport type ETagOfBiditemIntegrationDto = ETag & { [key: string]: any };\n\nexport interface IntegrationResponseSingleOfBiditemIntegrationDto {\n data?: BiditemIntegrationDto | null;\n}\n\nexport interface IntegrationResponseOfApiBusinessUnitRead {\n data?: ApiBusinessUnitRead[] | null;\n currentTopValue?: number | null;\n currentSkipValue?: number | null;\n nextSkipValue?: number | null;\n}\n\nexport interface ApiBusinessUnitRead {\n /**\n * The setups business unit id.\n */\n id: string;\n /**\n * The heavybid division code.\n */\n division?: string | null;\n /**\n * The setups business unit code.\n */\n businessUnitCode?: string | null;\n}\n\nexport interface IntegrationResponseOfEstimateIntegrationDto {\n data?: EstimateIntegrationDto[] | null;\n currentTopValue?: number | null;\n currentSkipValue?: number | null;\n nextSkipValue?: number | null;\n}\n\nexport interface EstimateIntegrationDto {\n /**\n * The estimate id.\n */\n id?: string;\n /**\n * The partition id.\n */\n partitionId?: string;\n /**\n * The business unit id.\n */\n businessUnitId?: string;\n /**\n * The business unit code.\n */\n businessUnitCode?: string | null;\n /**\n * The HeavyBid division.\n */\n heavyBidDivision?: string | null;\n /**\n * The estimate code.\n */\n code: string;\n /**\n * The name.\n */\n name?: string | null;\n /**\n * The processed status of the estimate.\n * 0 = queued\n * 1 = processing\n * 2 = success\n * 3 = failure\n */\n processedStatus?: StatusCode;\n /**\n * The description.\n */\n description?: string | null;\n /**\n * The estimate version.\n */\n estimateVersion?: string | null;\n /**\n * The filters.\n */\n filters?: EstimateFiltersIntegrationDto | null;\n /**\n * The estimate totals.\n */\n totals?: EstimateTotals | null;\n /**\n * The last modified date.\n */\n lastModified?: string;\n /**\n * The last processed date.\n */\n lastProcessed?: string | null;\n /**\n * Whether the estimate is excluded.\n */\n isExcludedEstimate?: boolean;\n /**\n * Whether the estimate is active.\n */\n isActiveEstimate?: boolean;\n /**\n * Whether the estimate is deleted.\n */\n isDeleted?: boolean;\n /**\n * The deleted date.\n */\n deletedTimestamp?: string | null;\n}\n\nexport interface EstimateFiltersIntegrationDto {\n projectName?: string | null;\n projectNumber?: string | null;\n status?: string | null;\n engineer?: string | null;\n estimator?: string | null;\n owner?: string | null;\n bidDate?: string | null;\n startDate?: string | null;\n reviewDate?: string | null;\n createdDate?: string | null;\n modifiedDate?: string | null;\n modifiedTime?: number | null;\n state?: string | null;\n typeOfWork?: string | null;\n estimateTag1?: string | null;\n estimateTag2?: string | null;\n estimateTag3?: string | null;\n estimateTag4?: string | null;\n estimateTag5?: string | null;\n estimateTag6?: string | null;\n userDefinedText1?: string | null;\n userDefinedText2?: string | null;\n userDefinedText3?: string | null;\n userDefinedText4?: string | null;\n userDefinedText5?: string | null;\n userDefinedText6?: string | null;\n userDefinedText7?: string | null;\n userDefinedText8?: string | null;\n userDefinedText9?: string | null;\n userDefinedText10?: string | null;\n userDefinedText11?: string | null;\n userDefinedText12?: string | null;\n userDefinedText13?: string | null;\n userDefinedText14?: string | null;\n userDefinedText15?: string | null;\n userDefinedText16?: string | null;\n userDefinedText17?: string | null;\n userDefinedText18?: string | null;\n userDefinedText19?: string | null;\n userDefinedText20?: string | null;\n userDefinedInteger1?: number | null;\n userDefinedInteger2?: number | null;\n userDefinedInteger3?: number | null;\n userDefinedInteger4?: number | null;\n userDefinedInteger5?: number | null;\n userDefinedNumber1?: number | null;\n userDefinedNumber2?: number | null;\n userDefinedNumber3?: number | null;\n userDefinedNumber4?: number | null;\n userDefinedNumber5?: number | null;\n userDefinedNumber6?: number | null;\n userDefinedNumber7?: number | null;\n userDefinedNumber8?: number | null;\n userDefinedNumber9?: number | null;\n userDefinedNumber10?: number | null;\n userDefinedNumber11?: number | null;\n userDefinedNumber12?: number | null;\n userDefinedNumber13?: number | null;\n userDefinedNumber14?: number | null;\n userDefinedNumber15?: number | null;\n userDefinedNumber16?: number | null;\n userDefinedNumber17?: number | null;\n userDefinedNumber18?: number | null;\n userDefinedNumber19?: number | null;\n userDefinedNumber20?: number | null;\n userDefinedDate1?: string | null;\n userDefinedDate2?: string | null;\n userDefinedDate3?: string | null;\n userDefinedDate4?: string | null;\n userDefinedDate5?: string | null;\n address?: string | null;\n latitude?: number | null;\n longitude?: number | null;\n}\n\nexport type ODataQueryOptionsOfEstimateIntegrationDto = ODataQueryOptions & {\n ifMatch?: ETagOfEstimateIntegrationDto | null;\n ifNoneMatch?: ETagOfEstimateIntegrationDto | null;\n};\n\nexport type ETagOfEstimateIntegrationDto = ETag & { [key: string]: any };\n\nexport interface IntegrationResponseSingleOfEstimateIntegrationDto {\n data?: EstimateIntegrationDto | null;\n}\n\nexport interface IntegrationResponseOfKPI {\n data?: Kpi[] | null;\n currentTopValue?: number | null;\n currentSkipValue?: number | null;\n nextSkipValue?: number | null;\n}\n\nexport interface IntegrationResponseOfApiDatabasePartitionRead {\n data?: ApiDatabasePartitionRead[] | null;\n currentTopValue?: number | null;\n currentSkipValue?: number | null;\n nextSkipValue?: number | null;\n}\n\nexport interface ApiDatabasePartitionRead {\n /**\n * The id.\n */\n id: string;\n /**\n * The heavybid system id.\n */\n systemId?: string;\n /**\n * The setups business unit id.\n */\n businessUnitId?: string;\n}\n\nexport interface IntegrationResponseSingleOfApiDatabasePartitionRead {\n data?: ApiDatabasePartitionRead | null;\n}\n\nexport interface IntegrationResponseOfResourceIntegrationDto {\n data?: ResourceIntegrationDto[] | null;\n currentTopValue?: number | null;\n currentSkipValue?: number | null;\n nextSkipValue?: number | null;\n}\n\nexport interface ResourceIntegrationDto {\n /**\n * The unique resource id.\n */\n id?: string;\n /**\n * The estimate id.\n */\n estimateId?: string;\n /**\n * The estimate code.\n */\n estimateCode?: string | null;\n /**\n * The biditem id.\n */\n biditemId?: string;\n /**\n * The activity id.\n */\n activityId?: string;\n /**\n * The last modified date.\n */\n lastModified?: string;\n /**\n * The resource code.\n */\n resourceCode?: string | null;\n /**\n * The activity code.\n */\n activityCode?: string | null;\n /**\n * The biditem code.\n */\n biditemCode?: string | null;\n /**\n * The description.\n */\n description?: string | null;\n /**\n * The type cost.\n */\n typeCost?: string | null;\n /**\n * The type of equipment rent.\n */\n typeOfEquipmentRent?: string | null;\n /**\n * The sub type.\n */\n subType?: string | null;\n /**\n * The quantity.\n */\n quantity?: number;\n /**\n * The unit of measure.\n */\n units?: string | null;\n /**\n * The percent.\n */\n percent?: number;\n /**\n * The unit price.\n */\n unitPrice?: number;\n /**\n * The currency.\n */\n currency?: string | null;\n /**\n * The sub type cost.\n */\n subTypeCost?: number;\n /**\n * The total.\n */\n total?: number;\n /**\n * The factorable.\n */\n factorable?: string | null;\n /**\n * The factor.\n */\n factor?: number;\n /**\n * The supplemental description.\n */\n supplementalDescription?: string | null;\n /**\n * The skip cost.\n */\n skipCost?: string | null;\n /**\n * The number of pieces.\n */\n pieces?: number;\n /**\n * The operating percent.\n */\n operatingPercent?: number;\n /**\n * The rent percent.\n */\n rentPercent?: number;\n /**\n * The production code.\n */\n productionCode?: string | null;\n /**\n * The production.\n */\n production?: number;\n /**\n * The crew code.\n */\n crewCode?: string | null;\n /**\n * The equipment operator code.\n */\n equipmentOperatorCode?: string | null;\n /**\n * The escalation percent.\n */\n escalationPercent?: number;\n /**\n * The plug indicator.\n */\n plugIndicator?: string | null;\n /**\n * The calendar.\n */\n calendar?: string | null;\n /**\n * The start day,\n */\n startDay?: string | null;\n /**\n * The special schedule.\n */\n specialSchedule?: string | null;\n /**\n * The man hour adjustment per shift.\n */\n manHourAdjustmentPerShift?: number;\n /**\n * The selected vendor.\n */\n selectedVendor?: string | null;\n /**\n * The man hour unit.\n */\n manHourUnit?: number;\n /**\n * The escalation override.\n */\n escalationOverride?: string | null;\n /**\n * The class.\n */\n class?: string | null;\n /**\n * The alternate quantity.\n */\n alternateQuantity?: number;\n /**\n * The alternate unit.\n */\n alternateUnits?: string | null;\n /**\n * The resource text1.\n */\n resourceText1?: string | null;\n /**\n * The resource text2.\n */\n resourceText2?: string | null;\n}\n\nexport type ODataQueryOptionsOfResourceIntegrationDto = ODataQueryOptions & {\n ifMatch?: ETagOfResourceIntegrationDto | null;\n ifNoneMatch?: ETagOfResourceIntegrationDto | null;\n};\n\nexport type ETagOfResourceIntegrationDto = ETag & { [key: string]: any };\n\nexport interface IntegrationResponseSingleOfResourceIntegrationDto {\n data?: ResourceIntegrationDto | null;\n}\n\nexport interface BidHistoryGetBidHistoryPricesQueryParams {\n requestType?: number;\n beginDate?: string | null;\n endDate?: string | null;\n}\n\nexport type BidHistoryGetBidHistoryPricesProps = Omit<\n MutateProps<\n HistoricalBidPrice[],\n void,\n BidHistoryGetBidHistoryPricesQueryParams,\n BidInfo[],\n void\n >,\n \"path\" | \"verb\"\n>;\n\nexport const BidHistoryGetBidHistoryPrices = (\n props: BidHistoryGetBidHistoryPricesProps\n) => (\n \n verb=\"POST\"\n path={`/api/v1/bidhistory/prices`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseBidHistoryGetBidHistoryPricesProps = Omit<\n UseMutateProps<\n HistoricalBidPrice[],\n void,\n BidHistoryGetBidHistoryPricesQueryParams,\n BidInfo[],\n void\n >,\n \"path\" | \"verb\"\n>;\n\nexport const useBidHistoryGetBidHistoryPrices = (\n props: UseBidHistoryGetBidHistoryPricesProps\n) =>\n useMutate<\n HistoricalBidPrice[],\n void,\n BidHistoryGetBidHistoryPricesQueryParams,\n BidInfo[],\n void\n >(\"POST\", `/api/v1/bidhistory/prices`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface BidHistoryGetBidHistoryBiditemsQueryParams {\n beginDate?: string | null;\n endDate?: string | null;\n includeActiveEstimates?: boolean;\n}\n\nexport type BidHistoryGetBidHistoryBiditemsProps = Omit<\n MutateProps<\n HistoricalBiditem[],\n void,\n BidHistoryGetBidHistoryBiditemsQueryParams,\n BidInfo[],\n void\n >,\n \"path\" | \"verb\"\n>;\n\nexport const BidHistoryGetBidHistoryBiditems = (\n props: BidHistoryGetBidHistoryBiditemsProps\n) => (\n \n verb=\"POST\"\n path={`/api/v1/bidhistory/biditems`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseBidHistoryGetBidHistoryBiditemsProps = Omit<\n UseMutateProps<\n HistoricalBiditem[],\n void,\n BidHistoryGetBidHistoryBiditemsQueryParams,\n BidInfo[],\n void\n >,\n \"path\" | \"verb\"\n>;\n\nexport const useBidHistoryGetBidHistoryBiditems = (\n props: UseBidHistoryGetBidHistoryBiditemsProps\n) =>\n useMutate<\n HistoricalBiditem[],\n void,\n BidHistoryGetBidHistoryBiditemsQueryParams,\n BidInfo[],\n void\n >(\"POST\", `/api/v1/bidhistory/biditems`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface BidResultsSendToBidResultsQueryParams {\n estimateId?: string;\n}\n\nexport type BidResultsSendToBidResultsProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const BidResultsSendToBidResults = (\n props: BidResultsSendToBidResultsProps\n) => (\n \n path={`/api/v1/bidresults`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseBidResultsSendToBidResultsProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useBidResultsSendToBidResults = (\n props: UseBidResultsSendToBidResultsProps\n) =>\n useGet(\n `/api/v1/bidresults`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type BusinessUnitGetProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const BusinessUnitGet = (props: BusinessUnitGetProps) => (\n \n path={`/api/v1/businessunits`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseBusinessUnitGetProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useBusinessUnitGet = (props: UseBusinessUnitGetProps) =>\n useGet(`/api/v1/businessunits`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface CompareEstimatesDirectQueryParams {\n partitionId?: string;\n estimateCode?: string | null;\n}\n\nexport type CompareEstimatesDirectProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const CompareEstimatesDirect = (props: CompareEstimatesDirectProps) => (\n \n path={`/api/v1/compare`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCompareEstimatesDirectProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useCompareEstimatesDirect = (\n props: UseCompareEstimatesDirectProps\n) =>\n useGet(\n `/api/v1/compare`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type CopyPostCopyStructureProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const CopyPostCopyStructure = (props: CopyPostCopyStructureProps) => (\n \n verb=\"POST\"\n path={`/api/v1/copy`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyPostCopyStructureProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useCopyPostCopyStructure = (\n props: UseCopyPostCopyStructureProps\n) =>\n useMutate(\n \"POST\",\n `/api/v1/copy`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface CopyGetEstimatePathParams {\n id: string;\n}\n\nexport type CopyGetEstimateProps = Omit<\n GetProps,\n \"path\"\n> &\n CopyGetEstimatePathParams;\n\nexport const CopyGetEstimate = ({ id, ...props }: CopyGetEstimateProps) => (\n \n path={`/api/v1/copy/estimates/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetEstimateProps = Omit<\n UseGetProps,\n \"path\"\n> &\n CopyGetEstimatePathParams;\n\nexport const useCopyGetEstimate = ({ id, ...props }: UseCopyGetEstimateProps) =>\n useGet(\n (paramsInPath: CopyGetEstimatePathParams) =>\n `/api/v1/copy/estimates/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface CopyGetBiditemsForEstimateQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport interface CopyGetBiditemsForEstimatePathParams {\n id: string;\n}\n\nexport type CopyGetBiditemsForEstimateProps = Omit<\n GetProps<\n CopyBiditemViewModel[],\n void,\n CopyGetBiditemsForEstimateQueryParams,\n CopyGetBiditemsForEstimatePathParams\n >,\n \"path\"\n> &\n CopyGetBiditemsForEstimatePathParams;\n\nexport const CopyGetBiditemsForEstimate = ({\n id,\n ...props\n}: CopyGetBiditemsForEstimateProps) => (\n \n path={`/api/v1/copy/estimates/${id}/biditems`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetBiditemsForEstimateProps = Omit<\n UseGetProps<\n CopyBiditemViewModel[],\n void,\n CopyGetBiditemsForEstimateQueryParams,\n CopyGetBiditemsForEstimatePathParams\n >,\n \"path\"\n> &\n CopyGetBiditemsForEstimatePathParams;\n\nexport const useCopyGetBiditemsForEstimate = ({\n id,\n ...props\n}: UseCopyGetBiditemsForEstimateProps) =>\n useGet<\n CopyBiditemViewModel[],\n void,\n CopyGetBiditemsForEstimateQueryParams,\n CopyGetBiditemsForEstimatePathParams\n >(\n (paramsInPath: CopyGetBiditemsForEstimatePathParams) =>\n `/api/v1/copy/estimates/${paramsInPath.id}/biditems`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface CopyGetActivitiesForBiditemPathParams {\n id: string;\n}\n\nexport type CopyGetActivitiesForBiditemProps = Omit<\n GetProps<\n CopyActivityViewModel[],\n void,\n void,\n CopyGetActivitiesForBiditemPathParams\n >,\n \"path\"\n> &\n CopyGetActivitiesForBiditemPathParams;\n\nexport const CopyGetActivitiesForBiditem = ({\n id,\n ...props\n}: CopyGetActivitiesForBiditemProps) => (\n \n path={`/api/v1/copy/biditems/${id}/activities`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetActivitiesForBiditemProps = Omit<\n UseGetProps<\n CopyActivityViewModel[],\n void,\n void,\n CopyGetActivitiesForBiditemPathParams\n >,\n \"path\"\n> &\n CopyGetActivitiesForBiditemPathParams;\n\nexport const useCopyGetActivitiesForBiditem = ({\n id,\n ...props\n}: UseCopyGetActivitiesForBiditemProps) =>\n useGet<\n CopyActivityViewModel[],\n void,\n void,\n CopyGetActivitiesForBiditemPathParams\n >(\n (paramsInPath: CopyGetActivitiesForBiditemPathParams) =>\n `/api/v1/copy/biditems/${paramsInPath.id}/activities`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface CopyGetResourcesForActivityPathParams {\n id: string;\n}\n\nexport type CopyGetResourcesForActivityProps = Omit<\n GetProps<\n CopyResourceViewModel[],\n void,\n void,\n CopyGetResourcesForActivityPathParams\n >,\n \"path\"\n> &\n CopyGetResourcesForActivityPathParams;\n\nexport const CopyGetResourcesForActivity = ({\n id,\n ...props\n}: CopyGetResourcesForActivityProps) => (\n \n path={`/api/v1/copy/activities/${id}/resources`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetResourcesForActivityProps = Omit<\n UseGetProps<\n CopyResourceViewModel[],\n void,\n void,\n CopyGetResourcesForActivityPathParams\n >,\n \"path\"\n> &\n CopyGetResourcesForActivityPathParams;\n\nexport const useCopyGetResourcesForActivity = ({\n id,\n ...props\n}: UseCopyGetResourcesForActivityProps) =>\n useGet<\n CopyResourceViewModel[],\n void,\n void,\n CopyGetResourcesForActivityPathParams\n >(\n (paramsInPath: CopyGetResourcesForActivityPathParams) =>\n `/api/v1/copy/activities/${paramsInPath.id}/resources`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface CopyGetParentIdsForBiditemPathParams {\n id: string;\n}\n\nexport type CopyGetParentIdsForBiditemProps = Omit<\n GetProps,\n \"path\"\n> &\n CopyGetParentIdsForBiditemPathParams;\n\nexport const CopyGetParentIdsForBiditem = ({\n id,\n ...props\n}: CopyGetParentIdsForBiditemProps) => (\n \n path={`/api/v1/copy/biditems/${id}/parents`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetParentIdsForBiditemProps = Omit<\n UseGetProps<\n BiditemParent[],\n void,\n void,\n CopyGetParentIdsForBiditemPathParams\n >,\n \"path\"\n> &\n CopyGetParentIdsForBiditemPathParams;\n\nexport const useCopyGetParentIdsForBiditem = ({\n id,\n ...props\n}: UseCopyGetParentIdsForBiditemProps) =>\n useGet(\n (paramsInPath: CopyGetParentIdsForBiditemPathParams) =>\n `/api/v1/copy/biditems/${paramsInPath.id}/parents`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport type CopyGetAttachmentsProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const CopyGetAttachments = (props: CopyGetAttachmentsProps) => (\n \n verb=\"POST\"\n path={`/api/v1/copy/GetAttachments`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetAttachmentsProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useCopyGetAttachments = (props: UseCopyGetAttachmentsProps) =>\n useMutate(\n \"POST\",\n `/api/v1/copy/GetAttachments`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface CopyGetCopySearchByEstimateQueryParams {\n searchTerms?: string | null;\n primarySortColumn?: string | null;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type CopyGetCopySearchByEstimateProps = Omit<\n GetProps<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByEstimateQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const CopyGetCopySearchByEstimate = (\n props: CopyGetCopySearchByEstimateProps\n) => (\n \n path={`/api/v1/copy/search/estimate`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetCopySearchByEstimateProps = Omit<\n UseGetProps<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByEstimateQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useCopyGetCopySearchByEstimate = (\n props: UseCopyGetCopySearchByEstimateProps\n) =>\n useGet<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByEstimateQueryParams,\n void\n >(`/api/v1/copy/search/estimate`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface CopyGetCopySearchByBiditemQueryParams {\n searchTerms?: string | null;\n primarySortColumn?: string | null;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type CopyGetCopySearchByBiditemProps = Omit<\n GetProps<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByBiditemQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const CopyGetCopySearchByBiditem = (\n props: CopyGetCopySearchByBiditemProps\n) => (\n \n path={`/api/v1/copy/search/biditem`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetCopySearchByBiditemProps = Omit<\n UseGetProps<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByBiditemQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useCopyGetCopySearchByBiditem = (\n props: UseCopyGetCopySearchByBiditemProps\n) =>\n useGet<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByBiditemQueryParams,\n void\n >(`/api/v1/copy/search/biditem`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface CopyGetCopySearchByActivityQueryParams {\n searchTerms?: string | null;\n primarySortColumn?: string | null;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type CopyGetCopySearchByActivityProps = Omit<\n GetProps<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByActivityQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const CopyGetCopySearchByActivity = (\n props: CopyGetCopySearchByActivityProps\n) => (\n \n path={`/api/v1/copy/search/activity`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCopyGetCopySearchByActivityProps = Omit<\n UseGetProps<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByActivityQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useCopyGetCopySearchByActivity = (\n props: UseCopyGetCopySearchByActivityProps\n) =>\n useGet<\n EstimateSearchFlattened[],\n void,\n CopyGetCopySearchByActivityQueryParams,\n void\n >(`/api/v1/copy/search/activity`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface CostHistoryGetCostHistoryActivitiesQueryParams {\n SearchTerms?: string | null;\n FilterDates?: boolean;\n BeginDate?: string;\n EndDate?: string;\n QuanLow?: number;\n QuanHigh?: number;\n MaxRecords?: number;\n}\n\nexport type CostHistoryGetCostHistoryActivitiesProps = Omit<\n GetProps<\n CostHistoryActivity[],\n void,\n CostHistoryGetCostHistoryActivitiesQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const CostHistoryGetCostHistoryActivities = (\n props: CostHistoryGetCostHistoryActivitiesProps\n) => (\n \n path={`/api/v1/costhistory/activities`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCostHistoryGetCostHistoryActivitiesProps = Omit<\n UseGetProps<\n CostHistoryActivity[],\n void,\n CostHistoryGetCostHistoryActivitiesQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useCostHistoryGetCostHistoryActivities = (\n props: UseCostHistoryGetCostHistoryActivitiesProps\n) =>\n useGet<\n CostHistoryActivity[],\n void,\n CostHistoryGetCostHistoryActivitiesQueryParams,\n void\n >(`/api/v1/costhistory/activities`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type DashboardGetTotalActiveEstimatesProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetTotalActiveEstimates = (\n props: DashboardGetTotalActiveEstimatesProps\n) => (\n \n path={`/api/v1/insights/dashboard/active/count`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetTotalActiveEstimatesProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetTotalActiveEstimates = (\n props: UseDashboardGetTotalActiveEstimatesProps\n) =>\n useGet(`/api/v1/insights/dashboard/active/count`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type DashboardGetAverageActiveEstimateAmountProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetAverageActiveEstimateAmount = (\n props: DashboardGetAverageActiveEstimateAmountProps\n) => (\n \n path={`/api/v1/insights/dashboard/active/totalamount`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetAverageActiveEstimateAmountProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetAverageActiveEstimateAmount = (\n props: UseDashboardGetAverageActiveEstimateAmountProps\n) =>\n useGet(\n `/api/v1/insights/dashboard/active/totalamount`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type DashboardGetArchivedEstimatesMarkupByTypeProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetArchivedEstimatesMarkupByType = (\n props: DashboardGetArchivedEstimatesMarkupByTypeProps\n) => (\n \n path={`/api/v1/insights/dashboard/archived/markupbytype`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetArchivedEstimatesMarkupByTypeProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetArchivedEstimatesMarkupByType = (\n props: UseDashboardGetArchivedEstimatesMarkupByTypeProps\n) =>\n useGet(\n `/api/v1/insights/dashboard/archived/markupbytype`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type DashboardGetArchivedEstimatesKpiByTypeProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetArchivedEstimatesKpiByType = (\n props: DashboardGetArchivedEstimatesKpiByTypeProps\n) => (\n \n path={`/api/v1/insights/dashboard/archived/kpibytype`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetArchivedEstimatesKpiByTypeProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetArchivedEstimatesKpiByType = (\n props: UseDashboardGetArchivedEstimatesKpiByTypeProps\n) =>\n useGet(\n `/api/v1/insights/dashboard/archived/kpibytype`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type DashboardGetRecentActiveEstimatesProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetRecentActiveEstimates = (\n props: DashboardGetRecentActiveEstimatesProps\n) => (\n \n path={`/api/v1/insights/dashboard/active/recent`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetRecentActiveEstimatesProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetRecentActiveEstimates = (\n props: UseDashboardGetRecentActiveEstimatesProps\n) =>\n useGet(`/api/v1/insights/dashboard/active/recent`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type DashboardGetTotalArchivedEstimatesProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetTotalArchivedEstimates = (\n props: DashboardGetTotalArchivedEstimatesProps\n) => (\n \n path={`/api/v1/insights/dashboard/archived/count`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetTotalArchivedEstimatesProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetTotalArchivedEstimates = (\n props: UseDashboardGetTotalArchivedEstimatesProps\n) =>\n useGet(\n `/api/v1/insights/dashboard/archived/count`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type DashboardGetAverageArchivedEstimateAmountProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetAverageArchivedEstimateAmount = (\n props: DashboardGetAverageArchivedEstimateAmountProps\n) => (\n \n path={`/api/v1/insights/dashboard/archived/averageamount`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetAverageArchivedEstimateAmountProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetAverageArchivedEstimateAmount = (\n props: UseDashboardGetAverageArchivedEstimateAmountProps\n) =>\n useGet(\n `/api/v1/insights/dashboard/archived/averageamount`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type DashboardGetRecentArchivedEstimatesProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetRecentArchivedEstimates = (\n props: DashboardGetRecentArchivedEstimatesProps\n) => (\n \n path={`/api/v1/insights/dashboard/archived/recent`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetRecentArchivedEstimatesProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetRecentArchivedEstimates = (\n props: UseDashboardGetRecentArchivedEstimatesProps\n) =>\n useGet(\n `/api/v1/insights/dashboard/archived/recent`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type DashboardGetRecentEstimatesProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetRecentEstimates = (\n props: DashboardGetRecentEstimatesProps\n) => (\n \n path={`/api/v1/insights/dashboard/all/recent`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetRecentEstimatesProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetRecentEstimates = (\n props: UseDashboardGetRecentEstimatesProps\n) =>\n useGet(`/api/v1/insights/dashboard/all/recent`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type DashboardGetEstimateLocationsProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DashboardGetEstimateLocations = (\n props: DashboardGetEstimateLocationsProps\n) => (\n \n path={`/api/v1/insights/dashboard/all/geo`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDashboardGetEstimateLocationsProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDashboardGetEstimateLocations = (\n props: UseDashboardGetEstimateLocationsProps\n) =>\n useGet(`/api/v1/insights/dashboard/all/geo`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type DatabasePartitionGetProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DatabasePartitionGet = (props: DatabasePartitionGetProps) => (\n \n path={`/api/v1/partition/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDatabasePartitionGetProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDatabasePartitionGet = (props: UseDatabasePartitionGetProps) =>\n useGet(`/api/v1/partition/all`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface DatabasePartitionGetOrCreateQueryParams {\n systemId?: string;\n businessUnitCode?: string | null;\n}\n\nexport type DatabasePartitionGetOrCreateProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const DatabasePartitionGetOrCreate = (\n props: DatabasePartitionGetOrCreateProps\n) => (\n \n path={`/api/v1/partition`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseDatabasePartitionGetOrCreateProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useDatabasePartitionGetOrCreate = (\n props: UseDatabasePartitionGetOrCreateProps\n) =>\n useGet(\n `/api/v1/partition`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface EstimatesGetEstimatesQueryParams {\n dto?: string | null;\n activeEstimates?: boolean;\n hideExcludedEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type EstimatesGetEstimatesProps = Omit<\n GetProps<\n EstimateSummaryExtended[],\n void,\n EstimatesGetEstimatesQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const EstimatesGetEstimates = (props: EstimatesGetEstimatesProps) => (\n \n path={`/api/v1/estimates`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesGetEstimatesProps = Omit<\n UseGetProps<\n EstimateSummaryExtended[],\n void,\n EstimatesGetEstimatesQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useEstimatesGetEstimates = (\n props: UseEstimatesGetEstimatesProps\n) =>\n useGet<\n EstimateSummaryExtended[],\n void,\n EstimatesGetEstimatesQueryParams,\n void\n >(`/api/v1/estimates`, { base: config.endpoints.HBINSIGHTS, ...props });\n\nexport interface EstimatesGetEstimateQueryParams {\n dto?: string | null;\n}\n\nexport interface EstimatesGetEstimatePathParams {\n id: string;\n}\n\nexport type EstimatesGetEstimateProps = Omit<\n GetProps<\n EstimateSummaryExtended,\n void | ProblemDetails,\n EstimatesGetEstimateQueryParams,\n EstimatesGetEstimatePathParams\n >,\n \"path\"\n> &\n EstimatesGetEstimatePathParams;\n\nexport const EstimatesGetEstimate = ({\n id,\n ...props\n}: EstimatesGetEstimateProps) => (\n \n path={`/api/v1/estimates/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesGetEstimateProps = Omit<\n UseGetProps<\n EstimateSummaryExtended,\n void | ProblemDetails,\n EstimatesGetEstimateQueryParams,\n EstimatesGetEstimatePathParams\n >,\n \"path\"\n> &\n EstimatesGetEstimatePathParams;\n\nexport const useEstimatesGetEstimate = ({\n id,\n ...props\n}: UseEstimatesGetEstimateProps) =>\n useGet<\n EstimateSummaryExtended,\n void | ProblemDetails,\n EstimatesGetEstimateQueryParams,\n EstimatesGetEstimatePathParams\n >(\n (paramsInPath: EstimatesGetEstimatePathParams) =>\n `/api/v1/estimates/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface EstimatesGetEstimateBlobPathParams {\n id: string;\n}\n\nexport type EstimatesGetEstimateBlobProps = Omit<\n GetProps<\n void,\n void | ProblemDetails,\n void,\n EstimatesGetEstimateBlobPathParams\n >,\n \"path\"\n> &\n EstimatesGetEstimateBlobPathParams;\n\nexport const EstimatesGetEstimateBlob = ({\n id,\n ...props\n}: EstimatesGetEstimateBlobProps) => (\n \n path={`/api/v1/estimates/download/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesGetEstimateBlobProps = Omit<\n UseGetProps<\n void,\n void | ProblemDetails,\n void,\n EstimatesGetEstimateBlobPathParams\n >,\n \"path\"\n> &\n EstimatesGetEstimateBlobPathParams;\n\nexport const useEstimatesGetEstimateBlob = ({\n id,\n ...props\n}: UseEstimatesGetEstimateBlobProps) =>\n useGet(\n (paramsInPath: EstimatesGetEstimateBlobPathParams) =>\n `/api/v1/estimates/download/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface EstimatesPutEstimatePathParams {\n id: string;\n estimate: string;\n}\n\nexport type EstimatesPutEstimateProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n> &\n EstimatesPutEstimatePathParams;\n\nexport const EstimatesPutEstimate = ({\n id,\n estimate,\n ...props\n}: EstimatesPutEstimateProps) => (\n \n verb=\"PUT\"\n path={`/api/v1/estimates/${id}/${estimate}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesPutEstimateProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n> &\n EstimatesPutEstimatePathParams;\n\nexport const useEstimatesPutEstimate = ({\n id,\n estimate,\n ...props\n}: UseEstimatesPutEstimateProps) =>\n useMutate(\n \"PUT\",\n (paramsInPath: EstimatesPutEstimatePathParams) =>\n `/api/v1/estimates/${paramsInPath.id}/${paramsInPath.estimate}`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { id, estimate },\n ...props\n }\n );\n\nexport type EstimatesPostExcludedProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const EstimatesPostExcluded = (props: EstimatesPostExcludedProps) => (\n \n verb=\"POST\"\n path={`/api/v1/estimates/excluded`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesPostExcludedProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useEstimatesPostExcluded = (\n props: UseEstimatesPostExcludedProps\n) =>\n useMutate(\n \"POST\",\n `/api/v1/estimates/excluded`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface EstimatesDeleteEstimateByIdPathParams {\n id: string;\n}\n\nexport type EstimatesDeleteEstimateByIdProps = Omit<\n GetProps<\n DeleteEstimateViewModel,\n void,\n void,\n EstimatesDeleteEstimateByIdPathParams\n >,\n \"path\"\n> &\n EstimatesDeleteEstimateByIdPathParams;\n\nexport const EstimatesDeleteEstimateById = ({\n id,\n ...props\n}: EstimatesDeleteEstimateByIdProps) => (\n \n path={`/api/v1/estimates/delete/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesDeleteEstimateByIdProps = Omit<\n UseGetProps<\n DeleteEstimateViewModel,\n void,\n void,\n EstimatesDeleteEstimateByIdPathParams\n >,\n \"path\"\n> &\n EstimatesDeleteEstimateByIdPathParams;\n\nexport const useEstimatesDeleteEstimateById = ({\n id,\n ...props\n}: UseEstimatesDeleteEstimateByIdProps) =>\n useGet<\n DeleteEstimateViewModel,\n void,\n void,\n EstimatesDeleteEstimateByIdPathParams\n >(\n (paramsInPath: EstimatesDeleteEstimateByIdPathParams) =>\n `/api/v1/estimates/delete/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface EstimatesDeleteEstimateByCodeQueryParams {\n code?: string | null;\n}\n\nexport type EstimatesDeleteEstimateByCodeProps = Omit<\n GetProps<\n DeleteEstimateViewModel,\n void,\n EstimatesDeleteEstimateByCodeQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const EstimatesDeleteEstimateByCode = (\n props: EstimatesDeleteEstimateByCodeProps\n) => (\n \n path={`/api/v1/estimates/delete`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesDeleteEstimateByCodeProps = Omit<\n UseGetProps<\n DeleteEstimateViewModel,\n void,\n EstimatesDeleteEstimateByCodeQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useEstimatesDeleteEstimateByCode = (\n props: UseEstimatesDeleteEstimateByCodeProps\n) =>\n useGet<\n DeleteEstimateViewModel,\n void,\n EstimatesDeleteEstimateByCodeQueryParams,\n void\n >(`/api/v1/estimates/delete`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface EstimatesDoesEstimateCodesExistQueryParams {\n codes?: string[] | null;\n searchActiveEstimates?: boolean;\n}\n\nexport type EstimatesDoesEstimateCodesExistProps = Omit<\n GetProps<\n EstimateExistViewModel[],\n void,\n EstimatesDoesEstimateCodesExistQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const EstimatesDoesEstimateCodesExist = (\n props: EstimatesDoesEstimateCodesExistProps\n) => (\n \n path={`/api/v1/estimates/exist`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesDoesEstimateCodesExistProps = Omit<\n UseGetProps<\n EstimateExistViewModel[],\n void,\n EstimatesDoesEstimateCodesExistQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useEstimatesDoesEstimateCodesExist = (\n props: UseEstimatesDoesEstimateCodesExistProps\n) =>\n useGet<\n EstimateExistViewModel[],\n void,\n EstimatesDoesEstimateCodesExistQueryParams,\n void\n >(`/api/v1/estimates/exist`, { base: config.endpoints.HBINSIGHTS, ...props });\n\nexport interface EstimatesGetEstimateIndexQueryParams {\n code?: string | null;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type EstimatesGetEstimateIndexProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const EstimatesGetEstimateIndex = (\n props: EstimatesGetEstimateIndexProps\n) => (\n \n path={`/api/v1/estimates/estimateindex`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesGetEstimateIndexProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useEstimatesGetEstimateIndex = (\n props: UseEstimatesGetEstimateIndexProps\n) =>\n useGet(\n `/api/v1/estimates/estimateindex`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface EstimatesGetEstimateBackupHashQueryParams {\n estimateId?: string;\n}\n\nexport type EstimatesGetEstimateBackupHashProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const EstimatesGetEstimateBackupHash = (\n props: EstimatesGetEstimateBackupHashProps\n) => (\n \n path={`/api/v1/estimates/hash`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseEstimatesGetEstimateBackupHashProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useEstimatesGetEstimateBackupHash = (\n props: UseEstimatesGetEstimateBackupHashProps\n) =>\n useGet(\n `/api/v1/estimates/hash`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface HBWebGetAllEstimatesQueryParams {\n includeDeletedEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type HBWebGetAllEstimatesProps = Omit<\n GetProps<\n IntegrationResponseOfEstimateWithDivision,\n void,\n HBWebGetAllEstimatesQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const HBWebGetAllEstimates = (props: HBWebGetAllEstimatesProps) => (\n \n path={`/api/v1/hbweb/estimates`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseHBWebGetAllEstimatesProps = Omit<\n UseGetProps<\n IntegrationResponseOfEstimateWithDivision,\n void,\n HBWebGetAllEstimatesQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useHBWebGetAllEstimates = (props: UseHBWebGetAllEstimatesProps) =>\n useGet<\n IntegrationResponseOfEstimateWithDivision,\n void,\n HBWebGetAllEstimatesQueryParams,\n void\n >(`/api/v1/hbweb/estimates`, { base: config.endpoints.HBINSIGHTS, ...props });\n\nexport interface InsightsEstimatesGetEstimateQueryParams {\n liveEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type InsightsEstimatesGetEstimateProps = Omit<\n GetProps<\n EstimateFlattened[],\n void,\n InsightsEstimatesGetEstimateQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const InsightsEstimatesGetEstimate = (\n props: InsightsEstimatesGetEstimateProps\n) => (\n \n path={`/api/v1/insights/estimates`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseInsightsEstimatesGetEstimateProps = Omit<\n UseGetProps<\n EstimateFlattened[],\n void,\n InsightsEstimatesGetEstimateQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useInsightsEstimatesGetEstimate = (\n props: UseInsightsEstimatesGetEstimateProps\n) =>\n useGet<\n EstimateFlattened[],\n void,\n InsightsEstimatesGetEstimateQueryParams,\n void\n >(`/api/v1/insights/estimates`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface InsightsEstimatesGetReportsForEstimateQueryParams {\n estimateId?: string;\n}\n\nexport type InsightsEstimatesGetReportsForEstimateProps = Omit<\n GetProps<\n ReportsDto,\n void,\n InsightsEstimatesGetReportsForEstimateQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const InsightsEstimatesGetReportsForEstimate = (\n props: InsightsEstimatesGetReportsForEstimateProps\n) => (\n \n path={`/api/v1/insights/estimates/reports`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseInsightsEstimatesGetReportsForEstimateProps = Omit<\n UseGetProps<\n ReportsDto,\n void,\n InsightsEstimatesGetReportsForEstimateQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useInsightsEstimatesGetReportsForEstimate = (\n props: UseInsightsEstimatesGetReportsForEstimateProps\n) =>\n useGet<\n ReportsDto,\n void,\n InsightsEstimatesGetReportsForEstimateQueryParams,\n void\n >(`/api/v1/insights/estimates/reports`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type InsightsEstimatesGetUniqueEstimateFiltersProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const InsightsEstimatesGetUniqueEstimateFilters = (\n props: InsightsEstimatesGetUniqueEstimateFiltersProps\n) => (\n \n path={`/api/v1/insights/estimates/filters`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseInsightsEstimatesGetUniqueEstimateFiltersProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useInsightsEstimatesGetUniqueEstimateFilters = (\n props: UseInsightsEstimatesGetUniqueEstimateFiltersProps\n) =>\n useGet(\n `/api/v1/insights/estimates/filters`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type InsightsEstimatesPostExcludedProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const InsightsEstimatesPostExcluded = (\n props: InsightsEstimatesPostExcludedProps\n) => (\n \n verb=\"POST\"\n path={`/api/v1/insights/estimates/excluded`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseInsightsEstimatesPostExcludedProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useInsightsEstimatesPostExcluded = (\n props: UseInsightsEstimatesPostExcludedProps\n) =>\n useMutate(\n \"POST\",\n `/api/v1/insights/estimates/excluded`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface IntegrationsGetAllEstimatesQueryParams {\n includeExcludedEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type IntegrationsGetAllEstimatesProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const IntegrationsGetAllEstimates = (\n props: IntegrationsGetAllEstimatesProps\n) => (\n \n path={`/api/v1/integration/estimates/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetAllEstimatesProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useIntegrationsGetAllEstimates = (\n props: UseIntegrationsGetAllEstimatesProps\n) =>\n useGet(\n `/api/v1/integration/estimates/all`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface IntegrationsGetEstimatePathParams {\n id: string;\n}\n\nexport type IntegrationsGetEstimateProps = Omit<\n GetProps,\n \"path\"\n> &\n IntegrationsGetEstimatePathParams;\n\nexport const IntegrationsGetEstimate = ({\n id,\n ...props\n}: IntegrationsGetEstimateProps) => (\n \n path={`/api/v1/integration/estimates/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetEstimateProps = Omit<\n UseGetProps,\n \"path\"\n> &\n IntegrationsGetEstimatePathParams;\n\nexport const useIntegrationsGetEstimate = ({\n id,\n ...props\n}: UseIntegrationsGetEstimateProps) =>\n useGet(\n (paramsInPath: IntegrationsGetEstimatePathParams) =>\n `/api/v1/integration/estimates/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface IntegrationsGetAllActivityQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type IntegrationsGetAllActivityProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const IntegrationsGetAllActivity = (\n props: IntegrationsGetAllActivityProps\n) => (\n \n path={`/api/v1/integration/activity/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetAllActivityProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useIntegrationsGetAllActivity = (\n props: UseIntegrationsGetAllActivityProps\n) =>\n useGet(\n `/api/v1/integration/activity/all`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface IntegrationsGetActivityPathParams {\n id: string;\n}\n\nexport type IntegrationsGetActivityProps = Omit<\n GetProps,\n \"path\"\n> &\n IntegrationsGetActivityPathParams;\n\nexport const IntegrationsGetActivity = ({\n id,\n ...props\n}: IntegrationsGetActivityProps) => (\n \n path={`/api/v1/integration/activity/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetActivityProps = Omit<\n UseGetProps,\n \"path\"\n> &\n IntegrationsGetActivityPathParams;\n\nexport const useIntegrationsGetActivity = ({\n id,\n ...props\n}: UseIntegrationsGetActivityProps) =>\n useGet(\n (paramsInPath: IntegrationsGetActivityPathParams) =>\n `/api/v1/integration/activity/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface IntegrationsGetAllBidItemsQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type IntegrationsGetAllBidItemsProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const IntegrationsGetAllBidItems = (\n props: IntegrationsGetAllBidItemsProps\n) => (\n \n path={`/api/v1/integration/biditem/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetAllBidItemsProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useIntegrationsGetAllBidItems = (\n props: UseIntegrationsGetAllBidItemsProps\n) =>\n useGet(\n `/api/v1/integration/biditem/all`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface IntegrationsGetBidItemPathParams {\n id: string;\n}\n\nexport type IntegrationsGetBidItemProps = Omit<\n GetProps,\n \"path\"\n> &\n IntegrationsGetBidItemPathParams;\n\nexport const IntegrationsGetBidItem = ({\n id,\n ...props\n}: IntegrationsGetBidItemProps) => (\n \n path={`/api/v1/integration/biditem/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetBidItemProps = Omit<\n UseGetProps,\n \"path\"\n> &\n IntegrationsGetBidItemPathParams;\n\nexport const useIntegrationsGetBidItem = ({\n id,\n ...props\n}: UseIntegrationsGetBidItemProps) =>\n useGet(\n (paramsInPath: IntegrationsGetBidItemPathParams) =>\n `/api/v1/integration/biditem/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface IntegrationsGetAllBusinessUnitsQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type IntegrationsGetAllBusinessUnitsProps = Omit<\n GetProps<\n BusinessUnit[],\n void,\n IntegrationsGetAllBusinessUnitsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const IntegrationsGetAllBusinessUnits = (\n props: IntegrationsGetAllBusinessUnitsProps\n) => (\n \n path={`/api/v1/integration/businessunit/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetAllBusinessUnitsProps = Omit<\n UseGetProps<\n BusinessUnit[],\n void,\n IntegrationsGetAllBusinessUnitsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useIntegrationsGetAllBusinessUnits = (\n props: UseIntegrationsGetAllBusinessUnitsProps\n) =>\n useGet<\n BusinessUnit[],\n void,\n IntegrationsGetAllBusinessUnitsQueryParams,\n void\n >(`/api/v1/integration/businessunit/all`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface IntegrationsGetBusinessUnitByIdPathParams {\n id: string;\n}\n\nexport type IntegrationsGetBusinessUnitByIdProps = Omit<\n GetProps,\n \"path\"\n> &\n IntegrationsGetBusinessUnitByIdPathParams;\n\nexport const IntegrationsGetBusinessUnitById = ({\n id,\n ...props\n}: IntegrationsGetBusinessUnitByIdProps) => (\n \n path={`/api/v1/integration/businessunit/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetBusinessUnitByIdProps = Omit<\n UseGetProps<\n BusinessUnit,\n void,\n void,\n IntegrationsGetBusinessUnitByIdPathParams\n >,\n \"path\"\n> &\n IntegrationsGetBusinessUnitByIdPathParams;\n\nexport const useIntegrationsGetBusinessUnitById = ({\n id,\n ...props\n}: UseIntegrationsGetBusinessUnitByIdProps) =>\n useGet(\n (paramsInPath: IntegrationsGetBusinessUnitByIdPathParams) =>\n `/api/v1/integration/businessunit/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface IntegrationsUpdateBusinessUnitQueryParams {\n buId?: string;\n buCode?: string | null;\n}\n\nexport interface IntegrationsUpdateBusinessUnitPathParams {\n id: string;\n}\n\nexport type IntegrationsUpdateBusinessUnitProps = Omit<\n MutateProps<\n void,\n void,\n IntegrationsUpdateBusinessUnitQueryParams,\n void,\n IntegrationsUpdateBusinessUnitPathParams\n >,\n \"path\" | \"verb\"\n> &\n IntegrationsUpdateBusinessUnitPathParams;\n\nexport const IntegrationsUpdateBusinessUnit = ({\n id,\n ...props\n}: IntegrationsUpdateBusinessUnitProps) => (\n \n verb=\"POST\"\n path={`/api/v1/integration/businessunit/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsUpdateBusinessUnitProps = Omit<\n UseMutateProps<\n void,\n void,\n IntegrationsUpdateBusinessUnitQueryParams,\n void,\n IntegrationsUpdateBusinessUnitPathParams\n >,\n \"path\" | \"verb\"\n> &\n IntegrationsUpdateBusinessUnitPathParams;\n\nexport const useIntegrationsUpdateBusinessUnit = ({\n id,\n ...props\n}: UseIntegrationsUpdateBusinessUnitProps) =>\n useMutate<\n void,\n void,\n IntegrationsUpdateBusinessUnitQueryParams,\n void,\n IntegrationsUpdateBusinessUnitPathParams\n >(\n \"POST\",\n (paramsInPath: IntegrationsUpdateBusinessUnitPathParams) =>\n `/api/v1/integration/businessunit/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface IntegrationsGetAllDatabasePartitionsQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type IntegrationsGetAllDatabasePartitionsProps = Omit<\n GetProps<\n DatabasePartition[],\n void,\n IntegrationsGetAllDatabasePartitionsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const IntegrationsGetAllDatabasePartitions = (\n props: IntegrationsGetAllDatabasePartitionsProps\n) => (\n \n path={`/api/v1/integration/databasepartition/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetAllDatabasePartitionsProps = Omit<\n UseGetProps<\n DatabasePartition[],\n void,\n IntegrationsGetAllDatabasePartitionsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useIntegrationsGetAllDatabasePartitions = (\n props: UseIntegrationsGetAllDatabasePartitionsProps\n) =>\n useGet<\n DatabasePartition[],\n void,\n IntegrationsGetAllDatabasePartitionsQueryParams,\n void\n >(`/api/v1/integration/databasepartition/all`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface IntegrationsGetDatabasePartitionByIdPathParams {\n id: string;\n}\n\nexport type IntegrationsGetDatabasePartitionByIdProps = Omit<\n GetProps<\n DatabasePartition,\n void,\n void,\n IntegrationsGetDatabasePartitionByIdPathParams\n >,\n \"path\"\n> &\n IntegrationsGetDatabasePartitionByIdPathParams;\n\nexport const IntegrationsGetDatabasePartitionById = ({\n id,\n ...props\n}: IntegrationsGetDatabasePartitionByIdProps) => (\n \n path={`/api/v1/integration/databasepartition/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetDatabasePartitionByIdProps = Omit<\n UseGetProps<\n DatabasePartition,\n void,\n void,\n IntegrationsGetDatabasePartitionByIdPathParams\n >,\n \"path\"\n> &\n IntegrationsGetDatabasePartitionByIdPathParams;\n\nexport const useIntegrationsGetDatabasePartitionById = ({\n id,\n ...props\n}: UseIntegrationsGetDatabasePartitionByIdProps) =>\n useGet<\n DatabasePartition,\n void,\n void,\n IntegrationsGetDatabasePartitionByIdPathParams\n >(\n (paramsInPath: IntegrationsGetDatabasePartitionByIdPathParams) =>\n `/api/v1/integration/databasepartition/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface IntegrationsGetAllKeyIndicatorsQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type IntegrationsGetAllKeyIndicatorsProps = Omit<\n GetProps<\n KeyIndicator[],\n void,\n IntegrationsGetAllKeyIndicatorsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const IntegrationsGetAllKeyIndicators = (\n props: IntegrationsGetAllKeyIndicatorsProps\n) => (\n \n path={`/api/v1/integration/keyindicator/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetAllKeyIndicatorsProps = Omit<\n UseGetProps<\n KeyIndicator[],\n void,\n IntegrationsGetAllKeyIndicatorsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useIntegrationsGetAllKeyIndicators = (\n props: UseIntegrationsGetAllKeyIndicatorsProps\n) =>\n useGet<\n KeyIndicator[],\n void,\n IntegrationsGetAllKeyIndicatorsQueryParams,\n void\n >(`/api/v1/integration/keyindicator/all`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface IntegrationsGetKeyIndicatorByIdPathParams {\n id: string;\n}\n\nexport type IntegrationsGetKeyIndicatorByIdProps = Omit<\n GetProps,\n \"path\"\n> &\n IntegrationsGetKeyIndicatorByIdPathParams;\n\nexport const IntegrationsGetKeyIndicatorById = ({\n id,\n ...props\n}: IntegrationsGetKeyIndicatorByIdProps) => (\n \n path={`/api/v1/integration/keyindicator/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetKeyIndicatorByIdProps = Omit<\n UseGetProps<\n KeyIndicator,\n void,\n void,\n IntegrationsGetKeyIndicatorByIdPathParams\n >,\n \"path\"\n> &\n IntegrationsGetKeyIndicatorByIdPathParams;\n\nexport const useIntegrationsGetKeyIndicatorById = ({\n id,\n ...props\n}: UseIntegrationsGetKeyIndicatorByIdProps) =>\n useGet(\n (paramsInPath: IntegrationsGetKeyIndicatorByIdPathParams) =>\n `/api/v1/integration/keyindicator/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface IntegrationsGetAllResourcesQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type IntegrationsGetAllResourcesProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const IntegrationsGetAllResources = (\n props: IntegrationsGetAllResourcesProps\n) => (\n \n path={`/api/v1/integration/resource/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetAllResourcesProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useIntegrationsGetAllResources = (\n props: UseIntegrationsGetAllResourcesProps\n) =>\n useGet(\n `/api/v1/integration/resource/all`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface IntegrationsGetResourceByIdPathParams {\n id: string;\n}\n\nexport type IntegrationsGetResourceByIdProps = Omit<\n GetProps,\n \"path\"\n> &\n IntegrationsGetResourceByIdPathParams;\n\nexport const IntegrationsGetResourceById = ({\n id,\n ...props\n}: IntegrationsGetResourceByIdProps) => (\n \n path={`/api/v1/integration/resource/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetResourceByIdProps = Omit<\n UseGetProps,\n \"path\"\n> &\n IntegrationsGetResourceByIdPathParams;\n\nexport const useIntegrationsGetResourceById = ({\n id,\n ...props\n}: UseIntegrationsGetResourceByIdProps) =>\n useGet(\n (paramsInPath: IntegrationsGetResourceByIdPathParams) =>\n `/api/v1/integration/resource/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface IntegrationsGetAllSystemInfoQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type IntegrationsGetAllSystemInfoProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const IntegrationsGetAllSystemInfo = (\n props: IntegrationsGetAllSystemInfoProps\n) => (\n \n path={`/api/v1/integration/systeminfo/all`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetAllSystemInfoProps = Omit<\n UseGetProps<\n SystemInfo[],\n void,\n IntegrationsGetAllSystemInfoQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useIntegrationsGetAllSystemInfo = (\n props: UseIntegrationsGetAllSystemInfoProps\n) =>\n useGet(\n `/api/v1/integration/systeminfo/all`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface IntegrationsGetSystemInfoByIdPathParams {\n id: string;\n}\n\nexport type IntegrationsGetSystemInfoByIdProps = Omit<\n GetProps,\n \"path\"\n> &\n IntegrationsGetSystemInfoByIdPathParams;\n\nexport const IntegrationsGetSystemInfoById = ({\n id,\n ...props\n}: IntegrationsGetSystemInfoByIdProps) => (\n \n path={`/api/v1/integration/systeminfo/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsGetSystemInfoByIdProps = Omit<\n UseGetProps,\n \"path\"\n> &\n IntegrationsGetSystemInfoByIdPathParams;\n\nexport const useIntegrationsGetSystemInfoById = ({\n id,\n ...props\n}: UseIntegrationsGetSystemInfoByIdProps) =>\n useGet(\n (paramsInPath: IntegrationsGetSystemInfoByIdPathParams) =>\n `/api/v1/integration/systeminfo/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface KeyIndicatorsGetAllCalulatedKPIsQueryParams {\n currentEstimateId?: string | null;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type KeyIndicatorsGetAllCalulatedKPIsProps = Omit<\n GetProps<\n EstimateKPIs,\n void,\n KeyIndicatorsGetAllCalulatedKPIsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const KeyIndicatorsGetAllCalulatedKPIs = (\n props: KeyIndicatorsGetAllCalulatedKPIsProps\n) => (\n \n path={`/api/v1/insights/keyindicators`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseKeyIndicatorsGetAllCalulatedKPIsProps = Omit<\n UseGetProps<\n EstimateKPIs,\n void,\n KeyIndicatorsGetAllCalulatedKPIsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useKeyIndicatorsGetAllCalulatedKPIs = (\n props: UseKeyIndicatorsGetAllCalulatedKPIsProps\n) =>\n useGet(\n `/api/v1/insights/keyindicators`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type KeyIndicatorsImportKeyIndicatorsProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const KeyIndicatorsImportKeyIndicators = (\n props: KeyIndicatorsImportKeyIndicatorsProps\n) => (\n \n verb=\"POST\"\n path={`/api/v1/insights/keyindicators/import`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseKeyIndicatorsImportKeyIndicatorsProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useKeyIndicatorsImportKeyIndicators = (\n props: UseKeyIndicatorsImportKeyIndicatorsProps\n) =>\n useMutate(\n \"POST\",\n `/api/v1/insights/keyindicators/import`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type PingGetProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const PingGet = (props: PingGetProps) => (\n \n path={`/api/v1/ping`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UsePingGetProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const usePingGet = (props: UsePingGetProps) =>\n useGet(`/api/v1/ping`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface QuoteFoldersGetQuoteFoldersQueryParams {\n estimateId?: string | null;\n}\n\nexport type QuoteFoldersGetQuoteFoldersProps = Omit<\n GetProps<\n QuoteFolderSummaryDto[],\n void,\n QuoteFoldersGetQuoteFoldersQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const QuoteFoldersGetQuoteFolders = (\n props: QuoteFoldersGetQuoteFoldersProps\n) => (\n \n path={`/api/v1/quoteFolders`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteFoldersGetQuoteFoldersProps = Omit<\n UseGetProps<\n QuoteFolderSummaryDto[],\n void,\n QuoteFoldersGetQuoteFoldersQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useQuoteFoldersGetQuoteFolders = (\n props: UseQuoteFoldersGetQuoteFoldersProps\n) =>\n useGet<\n QuoteFolderSummaryDto[],\n void,\n QuoteFoldersGetQuoteFoldersQueryParams,\n void\n >(`/api/v1/quoteFolders`, { base: config.endpoints.HBINSIGHTS, ...props });\n\nexport type QuoteFoldersCreateQuoteFolderProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuoteFoldersCreateQuoteFolder = (\n props: QuoteFoldersCreateQuoteFolderProps\n) => (\n \n verb=\"POST\"\n path={`/api/v1/quoteFolders`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteFoldersCreateQuoteFolderProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuoteFoldersCreateQuoteFolder = (\n props: UseQuoteFoldersCreateQuoteFolderProps\n) =>\n useMutate(\"POST\", `/api/v1/quoteFolders`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface QuoteFoldersGetQuoteFolderPathParams {\n id: string;\n}\n\nexport type QuoteFoldersGetQuoteFolderProps = Omit<\n GetProps,\n \"path\"\n> &\n QuoteFoldersGetQuoteFolderPathParams;\n\nexport const QuoteFoldersGetQuoteFolder = ({\n id,\n ...props\n}: QuoteFoldersGetQuoteFolderProps) => (\n \n path={`/api/v1/quoteFolders/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteFoldersGetQuoteFolderProps = Omit<\n UseGetProps,\n \"path\"\n> &\n QuoteFoldersGetQuoteFolderPathParams;\n\nexport const useQuoteFoldersGetQuoteFolder = ({\n id,\n ...props\n}: UseQuoteFoldersGetQuoteFolderProps) =>\n useGet(\n (paramsInPath: QuoteFoldersGetQuoteFolderPathParams) =>\n `/api/v1/quoteFolders/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface QuoteFoldersUpdateQuoteFolderPathParams {\n id: string;\n}\n\nexport type QuoteFoldersUpdateQuoteFolderProps = Omit<\n MutateProps<\n string,\n void,\n void,\n void,\n QuoteFoldersUpdateQuoteFolderPathParams\n >,\n \"path\" | \"verb\"\n> &\n QuoteFoldersUpdateQuoteFolderPathParams;\n\nexport const QuoteFoldersUpdateQuoteFolder = ({\n id,\n ...props\n}: QuoteFoldersUpdateQuoteFolderProps) => (\n \n verb=\"PUT\"\n path={`/api/v1/quoteFolders/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteFoldersUpdateQuoteFolderProps = Omit<\n UseMutateProps<\n string,\n void,\n void,\n void,\n QuoteFoldersUpdateQuoteFolderPathParams\n >,\n \"path\" | \"verb\"\n> &\n QuoteFoldersUpdateQuoteFolderPathParams;\n\nexport const useQuoteFoldersUpdateQuoteFolder = ({\n id,\n ...props\n}: UseQuoteFoldersUpdateQuoteFolderProps) =>\n useMutate(\n \"PUT\",\n (paramsInPath: QuoteFoldersUpdateQuoteFolderPathParams) =>\n `/api/v1/quoteFolders/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport type QuoteFoldersDeleteQuoteFolderProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuoteFoldersDeleteQuoteFolder = (\n props: QuoteFoldersDeleteQuoteFolderProps\n) => (\n \n verb=\"DELETE\"\n path={`/api/v1/quoteFolders`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteFoldersDeleteQuoteFolderProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuoteFoldersDeleteQuoteFolder = (\n props: UseQuoteFoldersDeleteQuoteFolderProps\n) =>\n useMutate(\n \"DELETE\",\n `/api/v1/quoteFolders`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface QuoteFoldersGetQuoteFoldersDetailsQueryParams {\n estimateId?: string | null;\n}\n\nexport type QuoteFoldersGetQuoteFoldersDetailsProps = Omit<\n GetProps<\n QuoteFolderDto[],\n void,\n QuoteFoldersGetQuoteFoldersDetailsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const QuoteFoldersGetQuoteFoldersDetails = (\n props: QuoteFoldersGetQuoteFoldersDetailsProps\n) => (\n \n path={`/api/v1/quoteFolders/details`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteFoldersGetQuoteFoldersDetailsProps = Omit<\n UseGetProps<\n QuoteFolderDto[],\n void,\n QuoteFoldersGetQuoteFoldersDetailsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useQuoteFoldersGetQuoteFoldersDetails = (\n props: UseQuoteFoldersGetQuoteFoldersDetailsProps\n) =>\n useGet<\n QuoteFolderDto[],\n void,\n QuoteFoldersGetQuoteFoldersDetailsQueryParams,\n void\n >(`/api/v1/quoteFolders/details`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface QuoteMastersGetQuoteMasterByEstimateCodePathParams {\n estimateCode: string | null;\n}\n\nexport type QuoteMastersGetQuoteMasterByEstimateCodeProps = Omit<\n GetProps<\n QuoteMasterDto,\n void,\n void,\n QuoteMastersGetQuoteMasterByEstimateCodePathParams\n >,\n \"path\"\n> &\n QuoteMastersGetQuoteMasterByEstimateCodePathParams;\n\nexport const QuoteMastersGetQuoteMasterByEstimateCode = ({\n estimateCode,\n ...props\n}: QuoteMastersGetQuoteMasterByEstimateCodeProps) => (\n \n path={`/api/v1/quoteMasters/${estimateCode}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteMastersGetQuoteMasterByEstimateCodeProps = Omit<\n UseGetProps<\n QuoteMasterDto,\n void,\n void,\n QuoteMastersGetQuoteMasterByEstimateCodePathParams\n >,\n \"path\"\n> &\n QuoteMastersGetQuoteMasterByEstimateCodePathParams;\n\nexport const useQuoteMastersGetQuoteMasterByEstimateCode = ({\n estimateCode,\n ...props\n}: UseQuoteMastersGetQuoteMasterByEstimateCodeProps) =>\n useGet<\n QuoteMasterDto,\n void,\n void,\n QuoteMastersGetQuoteMasterByEstimateCodePathParams\n >(\n (paramsInPath: QuoteMastersGetQuoteMasterByEstimateCodePathParams) =>\n `/api/v1/quoteMasters/${paramsInPath.estimateCode}`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { estimateCode },\n ...props\n }\n );\n\nexport type QuoteMastersSyncQuotesMasterProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuoteMastersSyncQuotesMaster = (\n props: QuoteMastersSyncQuotesMasterProps\n) => (\n \n verb=\"POST\"\n path={`/api/v1/quoteMasters`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteMastersSyncQuotesMasterProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuoteMastersSyncQuotesMaster = (\n props: UseQuoteMastersSyncQuotesMasterProps\n) =>\n useMutate(\n \"POST\",\n `/api/v1/quoteMasters`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type QuotesGetQuotesProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const QuotesGetQuotes = (props: QuotesGetQuotesProps) => (\n \n path={`/api/v1/quotes`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuotesGetQuotesProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useQuotesGetQuotes = (props: UseQuotesGetQuotesProps) =>\n useGet(`/api/v1/quotes`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type QuotesCreateQuoteProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuotesCreateQuote = (props: QuotesCreateQuoteProps) => (\n \n verb=\"POST\"\n path={`/api/v1/quotes`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuotesCreateQuoteProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuotesCreateQuote = (props: UseQuotesCreateQuoteProps) =>\n useMutate(\"POST\", `/api/v1/quotes`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface QuotesGetQuotePathParams {\n id: string;\n}\n\nexport type QuotesGetQuoteProps = Omit<\n GetProps,\n \"path\"\n> &\n QuotesGetQuotePathParams;\n\nexport const QuotesGetQuote = ({ id, ...props }: QuotesGetQuoteProps) => (\n \n path={`/api/v1/quotes/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuotesGetQuoteProps = Omit<\n UseGetProps,\n \"path\"\n> &\n QuotesGetQuotePathParams;\n\nexport const useQuotesGetQuote = ({ id, ...props }: UseQuotesGetQuoteProps) =>\n useGet(\n (paramsInPath: QuotesGetQuotePathParams) =>\n `/api/v1/quotes/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface QuotesUpdateQuotePathParams {\n id: string;\n}\n\nexport type QuotesUpdateQuoteProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n> &\n QuotesUpdateQuotePathParams;\n\nexport const QuotesUpdateQuote = ({ id, ...props }: QuotesUpdateQuoteProps) => (\n \n verb=\"PUT\"\n path={`/api/v1/quotes/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuotesUpdateQuoteProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n> &\n QuotesUpdateQuotePathParams;\n\nexport const useQuotesUpdateQuote = ({\n id,\n ...props\n}: UseQuotesUpdateQuoteProps) =>\n useMutate(\n \"PUT\",\n (paramsInPath: QuotesUpdateQuotePathParams) =>\n `/api/v1/quotes/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport type QuotesDeleteQuoteProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuotesDeleteQuote = (props: QuotesDeleteQuoteProps) => (\n \n verb=\"DELETE\"\n path={`/api/v1/quotes`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuotesDeleteQuoteProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuotesDeleteQuote = (props: UseQuotesDeleteQuoteProps) =>\n useMutate(\"DELETE\", `/api/v1/quotes`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type QuotesAcceptQuoteProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuotesAcceptQuote = (props: QuotesAcceptQuoteProps) => (\n \n verb=\"POST\"\n path={`/api/v1/quotes/accept`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuotesAcceptQuoteProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuotesAcceptQuote = (props: UseQuotesAcceptQuoteProps) =>\n useMutate(\n \"POST\",\n `/api/v1/quotes/accept`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface QuoteVendorsGetVendorsQueryParams {\n Code?: string | null;\n EstimateId?: string | null;\n FolderId?: string | null;\n}\n\nexport type QuoteVendorsGetVendorsProps = Omit<\n GetProps<\n QuoteVendorSummaryDto[],\n void,\n QuoteVendorsGetVendorsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const QuoteVendorsGetVendors = (props: QuoteVendorsGetVendorsProps) => (\n \n path={`/api/v1/quoteVendors`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteVendorsGetVendorsProps = Omit<\n UseGetProps<\n QuoteVendorSummaryDto[],\n void,\n QuoteVendorsGetVendorsQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useQuoteVendorsGetVendors = (\n props: UseQuoteVendorsGetVendorsProps\n) =>\n useGet<\n QuoteVendorSummaryDto[],\n void,\n QuoteVendorsGetVendorsQueryParams,\n void\n >(`/api/v1/quoteVendors`, { base: config.endpoints.HBINSIGHTS, ...props });\n\nexport type QuoteVendorsCreateVendorProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuoteVendorsCreateVendor = (\n props: QuoteVendorsCreateVendorProps\n) => (\n \n verb=\"POST\"\n path={`/api/v1/quoteVendors`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteVendorsCreateVendorProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuoteVendorsCreateVendor = (\n props: UseQuoteVendorsCreateVendorProps\n) =>\n useMutate(\"POST\", `/api/v1/quoteVendors`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type QuoteVendorsUpdateVendorProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuoteVendorsUpdateVendor = (\n props: QuoteVendorsUpdateVendorProps\n) => (\n \n verb=\"PUT\"\n path={`/api/v1/quoteVendors`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteVendorsUpdateVendorProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuoteVendorsUpdateVendor = (\n props: UseQuoteVendorsUpdateVendorProps\n) =>\n useMutate(\"PUT\", `/api/v1/quoteVendors`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport type QuoteVendorsDeleteVendorProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const QuoteVendorsDeleteVendor = (\n props: QuoteVendorsDeleteVendorProps\n) => (\n \n verb=\"DELETE\"\n path={`/api/v1/quoteVendors`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteVendorsDeleteVendorProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useQuoteVendorsDeleteVendor = (\n props: UseQuoteVendorsDeleteVendorProps\n) =>\n useMutate(\"DELETE\", `/api/v1/quoteVendors`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface QuoteVendorsGetVendorPathParams {\n id: string;\n}\n\nexport type QuoteVendorsGetVendorProps = Omit<\n GetProps,\n \"path\"\n> &\n QuoteVendorsGetVendorPathParams;\n\nexport const QuoteVendorsGetVendor = ({\n id,\n ...props\n}: QuoteVendorsGetVendorProps) => (\n \n path={`/api/v1/quoteVendors/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseQuoteVendorsGetVendorProps = Omit<\n UseGetProps,\n \"path\"\n> &\n QuoteVendorsGetVendorPathParams;\n\nexport const useQuoteVendorsGetVendor = ({\n id,\n ...props\n}: UseQuoteVendorsGetVendorProps) =>\n useGet(\n (paramsInPath: QuoteVendorsGetVendorPathParams) =>\n `/api/v1/quoteVendors/${paramsInPath.id}`,\n { base: config.endpoints.HBINSIGHTS, pathParams: { id }, ...props }\n );\n\nexport interface StorageReportsGetReportQueryParams {\n estimateId?: string;\n reportType?: string | null;\n}\n\nexport type StorageReportsGetReportProps = Omit<\n GetProps,\n \"path\"\n>;\n\nexport const StorageReportsGetReport = (\n props: StorageReportsGetReportProps\n) => (\n \n path={`/api/v1/storage/reports`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseStorageReportsGetReportProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useStorageReportsGetReport = (\n props: UseStorageReportsGetReportProps\n) =>\n useGet(\n `/api/v1/storage/reports`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type UploadPostMasterRecordProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const UploadPostMasterRecord = (props: UploadPostMasterRecordProps) => (\n \n verb=\"POST\"\n path={`/api/v1/upload/master`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseUploadPostMasterRecordProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useUploadPostMasterRecord = (\n props: UseUploadPostMasterRecordProps\n) =>\n useMutate(\n \"POST\",\n `/api/v1/upload/master`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface UploadPostEstimateQueryParams {\n addToProcessingQueue?: boolean;\n}\n\nexport type UploadPostEstimateProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\n/**\n * Endpoing for uploading an estimate backup\n *\n * Must use form-data as the content-type, and provide a single zip file in the body (the key doesn't matter).\n * 200 mb max upload size set by attributes.\n */\nexport const UploadPostEstimate = (props: UploadPostEstimateProps) => (\n \n verb=\"POST\"\n path={`/api/v1/upload`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseUploadPostEstimateProps = Omit<\n UseMutateProps<\n UploadViewModel,\n void,\n UploadPostEstimateQueryParams,\n void,\n void\n >,\n \"path\" | \"verb\"\n>;\n\n/**\n * Endpoing for uploading an estimate backup\n *\n * Must use form-data as the content-type, and provide a single zip file in the body (the key doesn't matter).\n * 200 mb max upload size set by attributes.\n */\nexport const useUploadPostEstimate = (props: UseUploadPostEstimateProps) =>\n useMutate(\n \"POST\",\n `/api/v1/upload`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport type UserGetProps = Omit, \"path\">;\n\nexport const UserGet = (props: UserGetProps) => (\n \n path={`/api/v1/user`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseUserGetProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\nexport const useUserGet = (props: UseUserGetProps) =>\n useGet(`/api/v1/user`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface BidHistoryV2GetBidHistoryPricesQueryParams {\n requestType?: number;\n beginDate?: string | null;\n endDate?: string | null;\n includeActiveEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type BidHistoryV2GetBidHistoryPricesProps = Omit<\n MutateProps<\n HistoricalBidPrice[],\n void,\n BidHistoryV2GetBidHistoryPricesQueryParams,\n BidInfo[],\n void\n >,\n \"path\" | \"verb\"\n>;\n\nexport const BidHistoryV2GetBidHistoryPrices = (\n props: BidHistoryV2GetBidHistoryPricesProps\n) => (\n \n verb=\"POST\"\n path={`/api/v2/bidhistory/prices`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseBidHistoryV2GetBidHistoryPricesProps = Omit<\n UseMutateProps<\n HistoricalBidPrice[],\n void,\n BidHistoryV2GetBidHistoryPricesQueryParams,\n BidInfo[],\n void\n >,\n \"path\" | \"verb\"\n>;\n\nexport const useBidHistoryV2GetBidHistoryPrices = (\n props: UseBidHistoryV2GetBidHistoryPricesProps\n) =>\n useMutate<\n HistoricalBidPrice[],\n void,\n BidHistoryV2GetBidHistoryPricesQueryParams,\n BidInfo[],\n void\n >(\"POST\", `/api/v2/bidhistory/prices`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface CostHistoryV2GetCostHistoryActivitiesQueryParams {\n SearchTerms?: string | null;\n FilterDates?: boolean;\n BeginDate?: string;\n EndDate?: string;\n QuanLow?: number;\n QuanHigh?: number;\n MaxRecords?: number;\n includeActiveEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport type CostHistoryV2GetCostHistoryActivitiesProps = Omit<\n GetProps<\n CostHistoryActivity[],\n void,\n CostHistoryV2GetCostHistoryActivitiesQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const CostHistoryV2GetCostHistoryActivities = (\n props: CostHistoryV2GetCostHistoryActivitiesProps\n) => (\n \n path={`/api/v2/costhistory/activities`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseCostHistoryV2GetCostHistoryActivitiesProps = Omit<\n UseGetProps<\n CostHistoryActivity[],\n void,\n CostHistoryV2GetCostHistoryActivitiesQueryParams,\n void\n >,\n \"path\"\n>;\n\nexport const useCostHistoryV2GetCostHistoryActivities = (\n props: UseCostHistoryV2GetCostHistoryActivitiesProps\n) =>\n useGet<\n CostHistoryActivity[],\n void,\n CostHistoryV2GetCostHistoryActivitiesQueryParams,\n void\n >(`/api/v2/costhistory/activities`, {\n base: config.endpoints.HBINSIGHTS,\n ...props\n });\n\nexport interface IntegrationsV2GetAllActivityQueryParams {\n /**\n * Whether the pull biditems that have been marked as \"excluded\" and are not used in calculations.\n */\n includeExcludedEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport interface IntegrationsV2GetAllActivityPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n}\n\nexport type IntegrationsV2GetAllActivityProps = Omit<\n GetProps<\n IntegrationResponseOfActivityIntegrationDto,\n void,\n IntegrationsV2GetAllActivityQueryParams,\n IntegrationsV2GetAllActivityPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllActivityPathParams;\n\n/**\n * Retrieve all activities for a business unit.\n */\nexport const IntegrationsV2GetAllActivity = ({\n businessUnitId,\n ...props\n}: IntegrationsV2GetAllActivityProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/activities`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetAllActivityProps = Omit<\n UseGetProps<\n IntegrationResponseOfActivityIntegrationDto,\n void,\n IntegrationsV2GetAllActivityQueryParams,\n IntegrationsV2GetAllActivityPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllActivityPathParams;\n\n/**\n * Retrieve all activities for a business unit.\n */\nexport const useIntegrationsV2GetAllActivity = ({\n businessUnitId,\n ...props\n}: UseIntegrationsV2GetAllActivityProps) =>\n useGet<\n IntegrationResponseOfActivityIntegrationDto,\n void,\n IntegrationsV2GetAllActivityQueryParams,\n IntegrationsV2GetAllActivityPathParams\n >(\n (paramsInPath: IntegrationsV2GetAllActivityPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/activities`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetActivityPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n /**\n * The required activity id.\n */\n id: string;\n}\n\nexport type IntegrationsV2GetActivityProps = Omit<\n GetProps<\n IntegrationResponseSingleOfActivityIntegrationDto,\n void,\n void,\n IntegrationsV2GetActivityPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetActivityPathParams;\n\n/**\n * Retrieves a specific activity by its id.\n */\nexport const IntegrationsV2GetActivity = ({\n businessUnitId,\n id,\n ...props\n}: IntegrationsV2GetActivityProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/activities/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetActivityProps = Omit<\n UseGetProps<\n IntegrationResponseSingleOfActivityIntegrationDto,\n void,\n void,\n IntegrationsV2GetActivityPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetActivityPathParams;\n\n/**\n * Retrieves a specific activity by its id.\n */\nexport const useIntegrationsV2GetActivity = ({\n businessUnitId,\n id,\n ...props\n}: UseIntegrationsV2GetActivityProps) =>\n useGet<\n IntegrationResponseSingleOfActivityIntegrationDto,\n void,\n void,\n IntegrationsV2GetActivityPathParams\n >(\n (paramsInPath: IntegrationsV2GetActivityPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/activities/${paramsInPath.id}`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId, id },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetAllBidItemsQueryParams {\n /**\n * Whether to pull biditems that have been marked as \"excluded\" and are not used in calculations.\n */\n includeExcludedEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport interface IntegrationsV2GetAllBidItemsPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n}\n\nexport type IntegrationsV2GetAllBidItemsProps = Omit<\n GetProps<\n IntegrationResponseOfBiditemIntegrationDto,\n void,\n IntegrationsV2GetAllBidItemsQueryParams,\n IntegrationsV2GetAllBidItemsPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllBidItemsPathParams;\n\n/**\n * Retrieves all bid items for a business unit.\n */\nexport const IntegrationsV2GetAllBidItems = ({\n businessUnitId,\n ...props\n}: IntegrationsV2GetAllBidItemsProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/biditems`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetAllBidItemsProps = Omit<\n UseGetProps<\n IntegrationResponseOfBiditemIntegrationDto,\n void,\n IntegrationsV2GetAllBidItemsQueryParams,\n IntegrationsV2GetAllBidItemsPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllBidItemsPathParams;\n\n/**\n * Retrieves all bid items for a business unit.\n */\nexport const useIntegrationsV2GetAllBidItems = ({\n businessUnitId,\n ...props\n}: UseIntegrationsV2GetAllBidItemsProps) =>\n useGet<\n IntegrationResponseOfBiditemIntegrationDto,\n void,\n IntegrationsV2GetAllBidItemsQueryParams,\n IntegrationsV2GetAllBidItemsPathParams\n >(\n (paramsInPath: IntegrationsV2GetAllBidItemsPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/biditems`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetBidItemPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n /**\n * The required biditem id.\n */\n id: string;\n}\n\nexport type IntegrationsV2GetBidItemProps = Omit<\n GetProps<\n IntegrationResponseSingleOfBiditemIntegrationDto,\n void,\n void,\n IntegrationsV2GetBidItemPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetBidItemPathParams;\n\n/**\n * Retrieves a specific biditem by its id.\n */\nexport const IntegrationsV2GetBidItem = ({\n businessUnitId,\n id,\n ...props\n}: IntegrationsV2GetBidItemProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/biditems/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetBidItemProps = Omit<\n UseGetProps<\n IntegrationResponseSingleOfBiditemIntegrationDto,\n void,\n void,\n IntegrationsV2GetBidItemPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetBidItemPathParams;\n\n/**\n * Retrieves a specific biditem by its id.\n */\nexport const useIntegrationsV2GetBidItem = ({\n businessUnitId,\n id,\n ...props\n}: UseIntegrationsV2GetBidItemProps) =>\n useGet<\n IntegrationResponseSingleOfBiditemIntegrationDto,\n void,\n void,\n IntegrationsV2GetBidItemPathParams\n >(\n (paramsInPath: IntegrationsV2GetBidItemPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/biditems/${paramsInPath.id}`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId, id },\n ...props\n }\n );\n\nexport type IntegrationsV2GetAllBusinessUnitsProps = Omit<\n GetProps,\n \"path\"\n>;\n\n/**\n * Retrieves all business units.\n */\nexport const IntegrationsV2GetAllBusinessUnits = (\n props: IntegrationsV2GetAllBusinessUnitsProps\n) => (\n \n path={`/api/v2/integration/businessunits`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetAllBusinessUnitsProps = Omit<\n UseGetProps,\n \"path\"\n>;\n\n/**\n * Retrieves all business units.\n */\nexport const useIntegrationsV2GetAllBusinessUnits = (\n props: UseIntegrationsV2GetAllBusinessUnitsProps\n) =>\n useGet(\n `/api/v2/integration/businessunits`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n\nexport interface IntegrationsV2GetAllEstimatesQueryParams {\n /**\n * Whether to include excluded estimates.\n */\n includeExcludedEstimates?: boolean;\n /**\n * Whether to include deleted estimates.\n */\n includeDeletedEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport interface IntegrationsV2GetAllEstimatesPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n}\n\nexport type IntegrationsV2GetAllEstimatesProps = Omit<\n GetProps<\n IntegrationResponseOfEstimateIntegrationDto,\n void,\n IntegrationsV2GetAllEstimatesQueryParams,\n IntegrationsV2GetAllEstimatesPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllEstimatesPathParams;\n\n/**\n * Retrieves all estimates for a business unit.\n */\nexport const IntegrationsV2GetAllEstimates = ({\n businessUnitId,\n ...props\n}: IntegrationsV2GetAllEstimatesProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/estimates`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetAllEstimatesProps = Omit<\n UseGetProps<\n IntegrationResponseOfEstimateIntegrationDto,\n void,\n IntegrationsV2GetAllEstimatesQueryParams,\n IntegrationsV2GetAllEstimatesPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllEstimatesPathParams;\n\n/**\n * Retrieves all estimates for a business unit.\n */\nexport const useIntegrationsV2GetAllEstimates = ({\n businessUnitId,\n ...props\n}: UseIntegrationsV2GetAllEstimatesProps) =>\n useGet<\n IntegrationResponseOfEstimateIntegrationDto,\n void,\n IntegrationsV2GetAllEstimatesQueryParams,\n IntegrationsV2GetAllEstimatesPathParams\n >(\n (paramsInPath: IntegrationsV2GetAllEstimatesPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/estimates`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetEstimatePathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n /**\n * The required id.\n */\n id: string;\n}\n\nexport type IntegrationsV2GetEstimateProps = Omit<\n GetProps<\n IntegrationResponseSingleOfEstimateIntegrationDto,\n void,\n void,\n IntegrationsV2GetEstimatePathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetEstimatePathParams;\n\n/**\n * Retrieve a specific estimate by its id.\n */\nexport const IntegrationsV2GetEstimate = ({\n businessUnitId,\n id,\n ...props\n}: IntegrationsV2GetEstimateProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/estimates/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetEstimateProps = Omit<\n UseGetProps<\n IntegrationResponseSingleOfEstimateIntegrationDto,\n void,\n void,\n IntegrationsV2GetEstimatePathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetEstimatePathParams;\n\n/**\n * Retrieve a specific estimate by its id.\n */\nexport const useIntegrationsV2GetEstimate = ({\n businessUnitId,\n id,\n ...props\n}: UseIntegrationsV2GetEstimateProps) =>\n useGet<\n IntegrationResponseSingleOfEstimateIntegrationDto,\n void,\n void,\n IntegrationsV2GetEstimatePathParams\n >(\n (paramsInPath: IntegrationsV2GetEstimatePathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/estimates/${paramsInPath.id}`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId, id },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetAllCalulatedKPIsQueryParams {\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport interface IntegrationsV2GetAllCalulatedKPIsPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n /**\n * The required estimate id.\n */\n id: string;\n}\n\nexport type IntegrationsV2GetAllCalulatedKPIsProps = Omit<\n GetProps<\n IntegrationResponseOfKPI,\n void,\n IntegrationsV2GetAllCalulatedKPIsQueryParams,\n IntegrationsV2GetAllCalulatedKPIsPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllCalulatedKPIsPathParams;\n\n/**\n * Retrieves key indicators for an estimate\n */\nexport const IntegrationsV2GetAllCalulatedKPIs = ({\n businessUnitId,\n id,\n ...props\n}: IntegrationsV2GetAllCalulatedKPIsProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/estimates/${id}/kpis`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetAllCalulatedKPIsProps = Omit<\n UseGetProps<\n IntegrationResponseOfKPI,\n void,\n IntegrationsV2GetAllCalulatedKPIsQueryParams,\n IntegrationsV2GetAllCalulatedKPIsPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllCalulatedKPIsPathParams;\n\n/**\n * Retrieves key indicators for an estimate\n */\nexport const useIntegrationsV2GetAllCalulatedKPIs = ({\n businessUnitId,\n id,\n ...props\n}: UseIntegrationsV2GetAllCalulatedKPIsProps) =>\n useGet<\n IntegrationResponseOfKPI,\n void,\n IntegrationsV2GetAllCalulatedKPIsQueryParams,\n IntegrationsV2GetAllCalulatedKPIsPathParams\n >(\n (paramsInPath: IntegrationsV2GetAllCalulatedKPIsPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/estimates/${paramsInPath.id}/kpis`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId, id },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetAllDatabasePartitionsPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n}\n\nexport type IntegrationsV2GetAllDatabasePartitionsProps = Omit<\n GetProps<\n IntegrationResponseOfApiDatabasePartitionRead,\n void,\n void,\n IntegrationsV2GetAllDatabasePartitionsPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllDatabasePartitionsPathParams;\n\n/**\n * Retrieves all database partitions for a business unit.\n */\nexport const IntegrationsV2GetAllDatabasePartitions = ({\n businessUnitId,\n ...props\n}: IntegrationsV2GetAllDatabasePartitionsProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/partitions`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetAllDatabasePartitionsProps = Omit<\n UseGetProps<\n IntegrationResponseOfApiDatabasePartitionRead,\n void,\n void,\n IntegrationsV2GetAllDatabasePartitionsPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllDatabasePartitionsPathParams;\n\n/**\n * Retrieves all database partitions for a business unit.\n */\nexport const useIntegrationsV2GetAllDatabasePartitions = ({\n businessUnitId,\n ...props\n}: UseIntegrationsV2GetAllDatabasePartitionsProps) =>\n useGet<\n IntegrationResponseOfApiDatabasePartitionRead,\n void,\n void,\n IntegrationsV2GetAllDatabasePartitionsPathParams\n >(\n (paramsInPath: IntegrationsV2GetAllDatabasePartitionsPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/partitions`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetDatabasePartitionByIdPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n /**\n * The required id.\n */\n id: string;\n}\n\nexport type IntegrationsV2GetDatabasePartitionByIdProps = Omit<\n GetProps<\n IntegrationResponseSingleOfApiDatabasePartitionRead,\n void,\n void,\n IntegrationsV2GetDatabasePartitionByIdPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetDatabasePartitionByIdPathParams;\n\n/**\n * Retrieves a specific database partition by its id.\n */\nexport const IntegrationsV2GetDatabasePartitionById = ({\n businessUnitId,\n id,\n ...props\n}: IntegrationsV2GetDatabasePartitionByIdProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/partitions/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetDatabasePartitionByIdProps = Omit<\n UseGetProps<\n IntegrationResponseSingleOfApiDatabasePartitionRead,\n void,\n void,\n IntegrationsV2GetDatabasePartitionByIdPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetDatabasePartitionByIdPathParams;\n\n/**\n * Retrieves a specific database partition by its id.\n */\nexport const useIntegrationsV2GetDatabasePartitionById = ({\n businessUnitId,\n id,\n ...props\n}: UseIntegrationsV2GetDatabasePartitionByIdProps) =>\n useGet<\n IntegrationResponseSingleOfApiDatabasePartitionRead,\n void,\n void,\n IntegrationsV2GetDatabasePartitionByIdPathParams\n >(\n (paramsInPath: IntegrationsV2GetDatabasePartitionByIdPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/partitions/${paramsInPath.id}`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId, id },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetAllResourcesQueryParams {\n /**\n * Whether the pull biditems that have been marked as \"excluded\" and are not used in calculations.\n */\n includeExcludedEstimates?: boolean;\n /**\n * The max number of records. (e.g. $top=10)\n */\n $top?: string;\n /**\n * The number of records to skip. (e.g. $skip=5)\n */\n $skip?: string;\n /**\n * A function that must evaluate to true for a record to be returned. (e.g. $filter=estimateId eq c9804e19-acbf-4db2-adaa-04d344dbcc1b)\n */\n $filter?: string;\n /**\n * Determines what values are used to order a collection of records. (e.g. $orderby=filters/typeOfWork desc)\n */\n $orderby?: string;\n}\n\nexport interface IntegrationsV2GetAllResourcesPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n}\n\nexport type IntegrationsV2GetAllResourcesProps = Omit<\n GetProps<\n IntegrationResponseOfResourceIntegrationDto,\n void,\n IntegrationsV2GetAllResourcesQueryParams,\n IntegrationsV2GetAllResourcesPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllResourcesPathParams;\n\n/**\n * Retrieves all resources for a business unit.\n */\nexport const IntegrationsV2GetAllResources = ({\n businessUnitId,\n ...props\n}: IntegrationsV2GetAllResourcesProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/resources`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetAllResourcesProps = Omit<\n UseGetProps<\n IntegrationResponseOfResourceIntegrationDto,\n void,\n IntegrationsV2GetAllResourcesQueryParams,\n IntegrationsV2GetAllResourcesPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetAllResourcesPathParams;\n\n/**\n * Retrieves all resources for a business unit.\n */\nexport const useIntegrationsV2GetAllResources = ({\n businessUnitId,\n ...props\n}: UseIntegrationsV2GetAllResourcesProps) =>\n useGet<\n IntegrationResponseOfResourceIntegrationDto,\n void,\n IntegrationsV2GetAllResourcesQueryParams,\n IntegrationsV2GetAllResourcesPathParams\n >(\n (paramsInPath: IntegrationsV2GetAllResourcesPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/resources`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId },\n ...props\n }\n );\n\nexport interface IntegrationsV2GetResourceByIdPathParams {\n /**\n * The required business unit id.\n */\n businessUnitId: string;\n /**\n * The required resource id.\n */\n id: string;\n}\n\nexport type IntegrationsV2GetResourceByIdProps = Omit<\n GetProps<\n IntegrationResponseSingleOfResourceIntegrationDto,\n void,\n void,\n IntegrationsV2GetResourceByIdPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetResourceByIdPathParams;\n\n/**\n * Retrieves a specific resource by its id.\n */\nexport const IntegrationsV2GetResourceById = ({\n businessUnitId,\n id,\n ...props\n}: IntegrationsV2GetResourceByIdProps) => (\n \n path={`/api/v2/integration/businessunits/${businessUnitId}/resources/${id}`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseIntegrationsV2GetResourceByIdProps = Omit<\n UseGetProps<\n IntegrationResponseSingleOfResourceIntegrationDto,\n void,\n void,\n IntegrationsV2GetResourceByIdPathParams\n >,\n \"path\"\n> &\n IntegrationsV2GetResourceByIdPathParams;\n\n/**\n * Retrieves a specific resource by its id.\n */\nexport const useIntegrationsV2GetResourceById = ({\n businessUnitId,\n id,\n ...props\n}: UseIntegrationsV2GetResourceByIdProps) =>\n useGet<\n IntegrationResponseSingleOfResourceIntegrationDto,\n void,\n void,\n IntegrationsV2GetResourceByIdPathParams\n >(\n (paramsInPath: IntegrationsV2GetResourceByIdPathParams) =>\n `/api/v2/integration/businessunits/${paramsInPath.businessUnitId}/resources/${paramsInPath.id}`,\n {\n base: config.endpoints.HBINSIGHTS,\n pathParams: { businessUnitId, id },\n ...props\n }\n );\n\nexport type UploadV2PostMasterRecordProps = Omit<\n MutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const UploadV2PostMasterRecord = (\n props: UploadV2PostMasterRecordProps\n) => (\n \n verb=\"POST\"\n path={`/api/v2/upload/master`}\n base={config.endpoints.HBINSIGHTS}\n {...props}\n />\n);\n\nexport type UseUploadV2PostMasterRecordProps = Omit<\n UseMutateProps,\n \"path\" | \"verb\"\n>;\n\nexport const useUploadV2PostMasterRecord = (\n props: UseUploadV2PostMasterRecordProps\n) =>\n useMutate(\n \"POST\",\n `/api/v2/upload/master`,\n { base: config.endpoints.HBINSIGHTS, ...props }\n );\n","/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport { selectors } from \"./state\";\nimport { useSelector } from \"react-redux\";\nimport { useMemo } from \"react\";\n\nexport function useAccount() {\n const account = useSelector(selectors.getAccount);\n return account;\n}\n\nexport function useHcssUser() {\n const user = useSelector(selectors.getHcssUser)!;\n return user;\n}\n\nexport function useHcssToken() {\n const token = useSelector(selectors.getHcssToken)!;\n return token;\n}\n\nexport function useAuthorization() {\n const authorization = useSelector(selectors.getAuthorization);\n return authorization;\n}\n\nexport function usePermissions() {\n const permissions = useSelector(selectors.getPermissions)!;\n const user = useSelector(selectors.getHcssUser);\n\n const permisions = useMemo(\n () => ({ ...permissions, credentialAdmin: user?.isCredentialAdmin }),\n [permissions, user]\n );\n\n return permisions;\n}\n\nexport function usePreferences() {\n const preferences = useSelector(selectors.getPreferences)!;\n const businessUnit = useSelector(selectors.getSelectedBusinessUnit);\n return { ...preferences, businessUnitId: businessUnit.id };\n}\n\nexport function useSelectedBusinessUnitId() {\n const id = useSelector(selectors.getSelectedBusinessUnitId)!;\n return id;\n}\n\nexport function useUserAndCompanyLicense() {\n const {\n canAccessLimitedPrecon,\n canAccessFullPrecon,\n canAccessFullReadonlyPrecon\n } = useSelector(selectors.getAuthorization);\n\n const {\n admin,\n credentialAdmin,\n write,\n contactWrite,\n estimateInsights,\n heavyBidNumbers\n } = usePermissions();\n const isLimitedLicense = canAccessLimitedPrecon && !canAccessFullPrecon;\n const isFullLicense = canAccessFullPrecon;\n const isFullReadOnlyLicense = canAccessFullReadonlyPrecon;\n\n const isFullCompanyAdmin = credentialAdmin && isFullLicense;\n const isFullPreConAdmin = !credentialAdmin && admin && isFullLicense;\n const isAdmin = isFullCompanyAdmin || isFullPreConAdmin;\n\n const isFullEditableUser =\n write &&\n contactWrite &&\n estimateInsights &&\n heavyBidNumbers &&\n isFullLicense;\n const isFullReadOnlyUser =\n !write && !contactWrite && !admin && isFullReadOnlyLicense;\n return {\n companyLicense: { isLimitedLicense, isFullLicense, isFullReadOnlyLicense },\n userLicense: {\n isAdmin,\n isFullCompanyAdmin,\n isFullEditableUser,\n isFullReadOnlyUser,\n isFullPreConAdmin\n }\n };\n}\n","import * as React from \"react\";\n\nexport interface PaneledPageContextState {\n maxPageWidth: number | null;\n contentAlign: \"center\" | \"left\";\n asideWidth: number;\n setAsideWidth: (updatedWidth: number | undefined) => void;\n filtersPanelExpanded: boolean;\n filtersHasOpenDropdown: boolean;\n activeDropdownId: string | null;\n onToggleFiltersPanel: (event?: any) => void;\n onDefaultExpandFilters: () => void;\n onClickInsideFilters: (event?: any) => void;\n onClickInsideContent: (filtersPanelShouldHide: boolean) => void;\n}\nexport const PaneledPageContext = React.createContext(\n {} as PaneledPageContextState\n);\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport {\n PaneledPageContext,\n PaneledPageContextState\n} from \"./PaneledPageContext\";\nimport { PaneledPageExtendedProps } from \"./ExtendedProps\";\nimport { ConcreteColors } from \"hcss-components\";\n\nexport interface HeaderPanelTitleProps extends PaneledPageExtendedProps {\n /** Automation testing id for the PaneledPage Header Title component. Defaults to \"paneledpage-header-title\". */\n testId?: string;\n}\nexport class HeaderPanelTitle extends React.PureComponent<\n HeaderPanelTitleProps\n> {\n render() {\n const { children, passThroughProps } = this.props;\n return (\n \n

{children}

\n \n );\n }\n}\n\nexport interface HeaderPanelSubtitleProps extends PaneledPageExtendedProps {\n /** Automation testing id for the PaneledPage Header Subtitle component. Defaults to \"paneledpage-header-subtitle\". */\n testId?: string;\n}\nexport class HeaderPanelSubtitle extends React.PureComponent<\n HeaderPanelSubtitleProps\n> {\n render() {\n const { children, passThroughProps } = this.props;\n return (\n \n {children}\n \n );\n }\n}\n\nexport interface HeaderPanelToolsProps extends PaneledPageExtendedProps {\n /** Automation testing id for the PaneledPage Header Tools component. Defaults to \"paneledpage-header-tools\". */\n testId?: string;\n}\nexport class HeaderPanelTools extends React.PureComponent<\n HeaderPanelToolsProps\n> {\n render() {\n const { children, passThroughProps } = this.props;\n return (\n \n {children}\n \n );\n }\n}\n\nexport interface HeaderPanelFiltersTemplateProps\n extends PaneledPageExtendedProps {\n defaultExpanded?: boolean;\n panelLabel?: string;\n status?: any;\n templateTools?: any;\n defaultContentPadding?: boolean;\n /** Automation testing id for the PaneledPage Filters component. Defaults to \"paneledpage-header-filters\". */\n testId?: string;\n}\nexport class HeaderPanelFiltersTemplate extends React.PureComponent<\n HeaderPanelFiltersTemplateProps\n> {\n render() {\n return (\n \n {(pageContext: PaneledPageContextState) => (\n \n )}\n \n );\n }\n}\n\ninterface HeaderPanelFiltersProps extends HeaderPanelFiltersTemplateProps {\n pageContext: PaneledPageContextState;\n}\nclass HeaderPanelFilters extends React.PureComponent {\n componentDidMount() {\n if (\n this.props.defaultExpanded &&\n this.props.pageContext.onDefaultExpandFilters\n )\n this.props.pageContext.onDefaultExpandFilters();\n }\n\n render() {\n const pageContext: PaneledPageContextState = this.props.pageContext;\n return (\n \n {this.props.templateTools && (\n
This feature is not yet supported.
\n )}\n
\n {!pageContext.filtersPanelExpanded && (\n \n )}\n \n \n {this.props.panelLabel || \"Filters\"}\n \n {this.props.status && (\n
\n {this.props.status || \"\"}\n
\n )}\n
\n
{this.props.children}
\n \n );\n }\n}\n\nexport default class PageHeaderPanelTemplate extends React.PureComponent<\n PaneledPageExtendedProps\n> {\n static Title = HeaderPanelTitle;\n static Subtitle = HeaderPanelSubtitle;\n static Tools = HeaderPanelTools;\n static Filters = HeaderPanelFiltersTemplate;\n\n render() {\n const { children, passThroughProps } = this.props;\n return (\n \n {(pageContext: PaneledPageContextState) => (\n \n {children}\n \n )}\n \n );\n }\n}\n\nexport const StyledPageHeaderPanel = styled(\"div\")<{ maxpagewidth?: number }>`\n background: ${ConcreteColors.gray100};\n border-bottom: 2px solid ${ConcreteColors.gray300};\n z-index: 1;\n\n & > div {\n padding: 0 16px;\n }\n & > div:first-child {\n padding-top: 10px;\n margin-bottom: 4px;\n border-bottom: none;\n padding-bottom: 0;\n }\n & > div:last-child:not(.header-panel-filters) {\n padding-bottom: 10px;\n }\n\n & > * {\n max-width: ${props =>\n props.maxpagewidth ? `${props.maxpagewidth}px` : \"none\"};\n }\n\n &[data-content-align=\"center\"] > * {\n margin-left: auto;\n margin-right: auto;\n }\n &[data-content-align=\"left\"] > * {\n margin-left: 0;\n margin-right: auto;\n }\n`;\nexport const StyledHeaderPanelTitle = styled(\"div\")`\n margin: 6px auto;\n border-bottom: none;\n\n & > h1 {\n margin: 0;\n padding: 0;\n font-size: 1.1em;\n font-weight: 700;\n color: #000000;\n }\n\n @media print {\n & > h1 {\n font-size: 22px;\n margin-bottom: 12px;\n }\n }\n`;\nexport const StyledHeaderPanelSubtitle = styled(\"div\")`\n font-size: 0.92em;\n @media print {\n margin-bottom: 10px;\n }\n`;\nexport const StyledHeaderPanelTools = styled(\"div\")`\n margin: 16px auto 8px auto;\n @media print {\n display: none;\n }\n`;\nexport const StyledFiltersPanelContainer = styled(\"div\")`\n position: relative;\n margin-top: 12px;\n padding: 10x 16px;\n transition: 0.2s;\n\n @media print {\n display: none;\n }\n\n & > .filters-content {\n font-size: 0.92em;\n }\n\n &[data-panel-expanded=\"true\"] {\n background: #ffffff;\n .filters-content {\n padding-top: 10px;\n padding-bottom: 20px;\n background: #ffffff;\n box-shadow: -8px 16px 20px -12px #aaaaaa, 8px 16px 20px -12px #aaaaaa;\n overflow: visible;\n }\n }\n &[data-panel-expanded=\"false\"] {\n background: #d6d6d6;\n & > .filters-controls {\n & > .filters-collapsed-toggle-region {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n z-index: 0;\n }\n }\n .filters-content {\n max-height: 0;\n background: #d6d6d6;\n box-shadow: none;\n overflow: hidden;\n }\n }\n\n & > .filters-controls {\n padding: 10px 0;\n overflow: auto;\n\n & > .filters-controls-toggle,\n & > .filters-controls-label,\n & > .filters-controls-status {\n position: relative;\n cursor: pointer;\n z-index: 2;\n }\n\n & > .filters-controls-toggle {\n font-size: 1em;\n margin-top: ${props =>\n props.theme.baseTheme === \"Concrete\" ? \"1px\" : \"0\"};\n margin-right: 10px;\n vertical-align: text-top;\n }\n & > .filters-controls-label {\n margin-right: 4px;\n font-size: 0.85em;\n font-weight: ${props =>\n props.theme.baseTheme === \"Concrete\" ? 600 : 700};\n text-transform: uppercase;\n &:hover {\n text-decoration: underline;\n }\n }\n & > .filters-controls-status {\n font-size: 0.9em;\n }\n }\n\n & > .filters-content {\n position: absolute;\n left: 0;\n width: 100%;\n transition: 0.2s;\n z-index: 50;\n }\n\n &.default-content-padding {\n & > .filters-content {\n padding-left: 20px;\n padding-right: 20px;\n }\n }\n`;\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { debounce } from \"lodash\";\nimport styled from \"styled-components\";\nimport { PaneledPageExtendedProps } from \"./ExtendedProps\";\n\nexport interface ContentMainProps extends PaneledPageExtendedProps {\n mainContainerRef: React.RefObject;\n onScroll?: (event: any, updatedScrollPosition: number) => void;\n onMount?: () => void;\n id?: string;\n testId?: string;\n innerWrapperId?: string;\n innerWrapperTestId?: string;\n}\nexport default class ContentMain extends React.PureComponent {\n componentDidMount() {\n if (this.props.mainContainerRef && this.props.mainContainerRef.current) {\n const node: Element | Text | null = ReactDOM.findDOMNode(\n this.props.mainContainerRef.current\n );\n if (node)\n (node as Element).addEventListener(\"scroll\", this.handleScroll, true);\n }\n if (this.props.onMount) this.props.onMount();\n }\n\n componentWillUnmount() {\n if (this.props.mainContainerRef && this.props.mainContainerRef.current) {\n const node: Element | Text | null = ReactDOM.findDOMNode(\n this.props.mainContainerRef.current\n );\n if (node)\n (node as Element).removeEventListener(\n \"scroll\",\n this.handleScroll,\n true\n );\n }\n }\n\n handleScroll = debounce(event => {\n if (this.props.onScroll) this.props.onScroll(event, event.target.scrollTop);\n }, 200);\n\n render() {\n return (\n \n \n {this.props.children}\n \n \n );\n }\n}\n\nexport const StyledContentMain = styled(\"main\")`\n @media print {\n height: auto;\n overflow: visible !important;\n\n .content-inner-wrapper {\n height: auto;\n overflow: visible !important;\n }\n }\n\n display: inline-block;\n position: relative;\n flex: 1 0;\n z-index: 1;\n\n .content-inner-wrapper {\n position: relative;\n padding: 12px 16px;\n min-height: 100%;\n\n & > h1,\n h2,\n h3,\n h4,\n h5,\n h6 {\n margin: 6px 0;\n font-weight: 700;\n }\n\n & > h1 {\n font-size: 1.6em;\n }\n & > h2 {\n font-size: 1.4em;\n }\n & > h3 {\n font-size: 1.2em;\n }\n }\n`;\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport { PaneledPageExtendedProps } from \"./ExtendedProps\";\nimport { PaneledPageContextState } from \"./PaneledPageContext\";\n\nexport const defaultAsideWidth = 200;\n\nexport const isContentAsideTemplate = (\n node: any\n): node is ContentAsideTemplate => {\n if (\n node &&\n node.props &&\n node.type.componentType === \"ContentAsideTemplate\" &&\n (node as ContentAsideTemplate).props.width !== undefined\n )\n return true;\n else return false;\n};\n\nexport interface ContentAsideTemplateProps extends PaneledPageExtendedProps {\n /** Automation testing id for the PaneledPage.Aside component. Defaults to \"paneledpage-content-aside\". */\n testId?: string;\n /** Custom width, in pixels, for the PaneledPage.Aside component. Defaults to 200. */\n width?: number;\n /** When set to true, PaneledPage.Aside height is set to the height of the container.\n * When set to false, the content determines the height, up to the height of the container.\n * In both cases, once the container's height is reached, scroll overflow is activated.\n * Defaults to \"true\". */\n fillContentHeight?: boolean;\n}\nexport class ContentAsideTemplate extends React.PureComponent<\n ContentAsideTemplateProps\n> {\n static defaultProps: ContentAsideTemplateProps = {\n testId: \"paneledpage-content-aside\",\n width: 200,\n fillContentHeight: true\n };\n static componentType = \"ContentAsideTemplate\";\n}\n\ninterface ContentAsideProps extends ContentAsideTemplateProps {\n pageContext: PaneledPageContextState;\n}\nexport default class ContentAside extends React.PureComponent<\n ContentAsideProps\n> {\n static componentType = \"ContentAside\";\n\n componentDidMount() {\n if (this.props.pageContext.setAsideWidth) {\n this.props.pageContext.setAsideWidth(this.props.width);\n }\n }\n\n componentDidUpdate(prevProps: ContentAsideProps) {\n if (\n this.props.width !== prevProps.width &&\n this.props.pageContext.setAsideWidth\n ) {\n this.props.pageContext.setAsideWidth(this.props.width);\n }\n }\n\n render() {\n return (\n \n {this.props.children}\n \n );\n }\n}\n\n/* eslint-disable-next-line */\nexport const StyledContentAside = styled.aside<{\n expandedwidth: number;\n}>`\n display: inline-block;\n position: absolute;\n top: 0;\n left: 0;\n max-height: 100%;\n width: ${props => `${props.expandedwidth}px`};\n padding: 12px 16px;\n overflow: auto;\n z-index: 2;\n\n &[data-fill-content-height=\"true\"] {\n height: 100%;\n }\n`;\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport { PaneledPageExtendedProps } from \"./ExtendedProps\";\nimport { SectionListModel } from \"./ContentSectionDataModels\";\nimport { TextOverflow } from \"../containers\";\n\nexport const isContentSectionTemplate = (\n node: any\n): node is ContentSectionTemplate => {\n if (\n node &&\n node.props &&\n node.type.componentType === \"ContentSectionTemplate\" &&\n (node as ContentSectionTemplate).props.title !== undefined\n )\n return true;\n else return false;\n};\n\nexport interface ContentSectionTemplateProps extends PaneledPageExtendedProps {\n /** Title of this section */\n title: string;\n /** Optional small toolbar at the top-right corner of the section */\n tools?: any;\n /** When set to true, allows the section to be collapsed and expanded by the user. Defaults to false. */\n collapsible?: boolean;\n /** When set to true, the section is initially rendered as collapsed and must be expanded by the user to view its contents. Defaults to false. If set to true, the 'collapsible' property must also be set to true. */\n defaultCollapsed?: boolean;\n /** When set to true, the section is marked as \"flagged\". If the PaneledPage's table of contents is shown, the section will have said flag next to its name. Defaults to false. */\n flagged?: boolean;\n /** When set to true, un-mounts content inside the section's body whenever the section is collapsed. Defaults to false. */\n unmountContentOnCollapse?: boolean;\n /** Optional callback to be executed when the user collapses a section. */\n onSectionCollapse?: (targetSectionListModel: SectionListModel) => void;\n /** Optional callback to be executed when the user expands a section. */\n onSectionExpand?: (targetSectionListModel: SectionListModel) => void;\n /** Automation testing id for the ContentSection component. Defaults to \"paneledpage-content-section-{sectionIndex}\".\n * Available wildcards:\n * %INDEX% - the section index value\n * %TITLE% - the section's title, in lowercase characters */\n testId?: string;\n /** Optional section's checkbox*/\n sectionCheckBox?: React.ReactNode;\n /** To handle the collapsed state from props, to make this be a controlled component */\n isCollapsed?: boolean;\n /** This is required when isCollapsed is set to handle isCollapsed */\n onToggleHandler?: (isSectionCollapsed: boolean) => void;\n}\nexport class ContentSectionTemplate extends React.PureComponent<\n ContentSectionTemplateProps\n> {\n static componentType = \"ContentSectionTemplate\";\n}\n\nexport interface ContentSectionProps extends ContentSectionTemplateProps {\n index: number;\n isCurrentSection: boolean;\n isLastSection: boolean;\n onHeightChange?: (isLastSection: boolean) => void;\n tableOfContentsActive?: boolean;\n}\nexport interface ContentSectionState {\n collapsed: boolean;\n haveContentReady: boolean;\n}\nexport default class ContentSection extends React.PureComponent<\n ContentSectionProps,\n ContentSectionState\n> {\n static componentType = \"ContentSection\";\n readonly componentClassIdentifier: string =\n \"paneled-page-content-main-section\";\n private resizeListener: React.RefObject = React.createRef();\n readonly state = {\n collapsed:\n this.props.isCollapsed !== undefined\n ? this.props.isCollapsed\n : this.props.collapsible && this.props.defaultCollapsed\n ? this.props.defaultCollapsed\n : false,\n haveContentReady:\n this.props.collapsible && this.props.defaultCollapsed ? false : true\n };\n\n componentDidMount() {\n this.resizeListener.current.contentWindow.addEventListener(\n \"resize\",\n this.handleHeightChange,\n true\n );\n }\n\n componentWillUnmount() {\n this.resizeListener.current.contentWindow.removeEventListener(\n \"resize\",\n this.handleHeightChange,\n true\n );\n }\n\n static getDerivedStateFromProps(\n nextProps: ContentSectionProps,\n prevState: ContentSectionState\n ) {\n if (\n nextProps.isCollapsed !== undefined &&\n nextProps.isCollapsed !== prevState.collapsed\n ) {\n return {\n collapsed: nextProps.isCollapsed\n };\n }\n }\n\n componentDidUpdate(\n prevProps: ContentSectionProps,\n prevState: ContentSectionState\n ) {\n if (this.state.collapsed !== prevState.collapsed) {\n const targetSectionListModel: SectionListModel = {\n sectionIndex: this.props.index,\n sectionTitle: this.props.title,\n sectionFlagged: this.props.flagged\n };\n if (this.state.collapsed) {\n if (this.props.onSectionCollapse)\n this.props.onSectionCollapse(targetSectionListModel);\n if (this.props.unmountContentOnCollapse)\n this.setState({ haveContentReady: false });\n } else {\n if (this.props.onSectionExpand)\n this.props.onSectionExpand(targetSectionListModel);\n if (!this.state.haveContentReady)\n this.setState({ haveContentReady: true });\n }\n }\n }\n\n handleHeightChange = (event: any) => {\n // Sections can unexpectedly change height due to lazy-loaded content 'jumping' into appearance.\n if (this.props.onHeightChange)\n this.props.onHeightChange(this.props.isLastSection);\n };\n\n toggleCollapse = () => {\n if (this.props.onToggleHandler) {\n this.props.onToggleHandler(this.state.collapsed);\n }\n this.setState(prevState => ({\n collapsed: this.props.collapsible ? !prevState.collapsed : false\n }));\n };\n\n onSectionToolsClicked = (event: any) => {\n if (this.state.collapsed) {\n this.setState({\n collapsed: false\n });\n }\n };\n\n renderTestId = (): string => {\n if (this.props.testId)\n return this.props.testId\n .replace(/%(INDEX)%/g, `${this.props.index}`)\n .replace(/%(TITLE)%/g, `${this.props.title}`);\n else return `paneledpage-content-section-${this.props.index}`;\n };\n\n render() {\n const sectionId = `section-${this.props.index}`;\n const hasSectionTools: boolean =\n this.props.tools && this.props.tools !== \"\";\n\n return (\n \n \n
\n
\n {this.props.sectionCheckBox && (\n
\n {this.props.sectionCheckBox}\n
\n )}\n {this.props.collapsible && (\n \n \n \n )}\n \n {this.props.title}\n \n
\n {hasSectionTools && (\n \n {this.props.tools}\n
\n )}\n \n\n
\n {this.state.haveContentReady && (\n
{this.props.children}
\n )}\n
\n \n );\n }\n}\n\nexport const StyledContentSection = styled(\"section\")`\n position: relative;\n box-sizing: border-box;\n margin-bottom: 32px;\n padding: 0;\n border-radius: 4px;\n border-left: 4px solid transparent;\n /*box-shadow: 0 0 0 0 transparent*/\n background: ${props => {\n //@ts-ignore\n if (props.disabled === \"true\") {\n return \"#e6e6e6\";\n }\n return \"#ffffff\";\n }};\n transition: 0.3s;\n\n &[data-table-of-contents=\"active\"] {\n &[data-current-section=\"true\"] {\n box-shadow: -4px 4px 10px -2px #d6d6d6;\n }\n &:not([data-current-section=\"true\"]) {\n box-shadow: -4px 4px 10px -12px #d6d6d6;\n }\n }\n\n & > .content-section-header {\n display: flex;\n flex-wrap: nowrap;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n padding: 20px 24px 24px 24px;\n\n & > .content-at-left {\n width: 100%;\n cursor: pointer;\n display: flex;\n flex-wrap: nowrap;\n flex-direction: row;\n align-items: center;\n flex-grow: 1;\n }\n & > .content-at-right {\n flex-shrink: 0;\n margin-left: 36px;\n text-align: right;\n }\n\n .content-section-collapse-toggle {\n display: inline-block;\n position: relative;\n margin-right: 8px;\n font-size: 1em;\n vertical-align: middle;\n cursor: pointer;\n transition: 0.2s;\n width: 20px;\n height: 20px;\n\n border: none;\n background: none;\n padding: 0;\n\n & > i {\n transition: 0.2s;\n }\n\n &:hover > i,\n &:active > i {\n color: #0370f5;\n }\n }\n\n & .content-section-title {\n display: inline-block;\n margin: 2px 0 0 0;\n font-size: 1.2em;\n font-weight: 500;\n vertical-align: middle;\n\n &.section-collapsible {\n cursor: pointer;\n }\n }\n }\n\n & > .content-section-body {\n padding: 0 24px 28px 24px;\n height: auto;\n font-size: 0.95em;\n\n h4,\n h5,\n h6 {\n color: #404040;\n font-weight: 700;\n text-transform: uppercase;\n }\n }\n\n &[data-widget-collapsed=\"false\"] {\n min-height: 192px;\n\n & > .content-section-header {\n .content-section-collapse-toggle > i {\n transform: rotate(0deg);\n margin-top: ${props =>\n props.theme.baseTheme === \"Concrete\" ? \"2px\" : \"1px\"};\n }\n }\n\n & > .content-section-body {\n & > .content-inner-container {\n height: auto;\n }\n }\n }\n &[data-widget-collapsed=\"true\"] {\n & > .content-section-header {\n padding-bottom: 0;\n .content-section-collapse-toggle > i {\n transform: rotate(-90deg);\n margin-top: ${props =>\n props.theme.baseTheme === \"Concrete\" ? \"4px\" : \"3px\"};\n margin-left: -1px;\n }\n }\n\n & > .content-section-body {\n & > .content-inner-container {\n height: 0;\n overflow: hidden;\n }\n }\n }\n\n & > .height-resize-listener {\n display: block !important;\n position: absolute;\n width: 0;\n height: 100%;\n background-color: none;\n border: none;\n }\n`;\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport { Icon } from \"hcss-components\";\n\nexport const StyledStatusFlag = styled(\"div\")`\n display: inline-block;\n cursor: pointer;\n\n & > i {\n font-size: 0.92em;\n }\n\n & > .icon-spacer {\n display: inline-block;\n margin-right: 8px;\n }\n`;\n\nexport interface StatusFlagProps {\n additionalClassNames?: string;\n /** FontAwesome code (e.g. \"asterisk\") for the Status Flag's icon. Default value is \"asterisk\" */\n flagIcon?: string;\n /** Color of the Status Flag. Default value is #ff3f1f */\n flagIconColor?: string;\n}\nexport default class StatusFlag extends React.PureComponent<\n StatusFlagProps,\n any\n> {\n render() {\n const combinedClassNames = this.props.additionalClassNames\n ? `status-flag ${this.props.additionalClassNames}`\n : \"status-flag\";\n const flagIconColor = this.props.flagIconColor || \"#ff3f1f\";\n return (\n \n \n {this.props.children ?
: \"\"}\n {this.props.children}\n \n );\n }\n}\n","import * as React from \"react\";\nimport styled, { withTheme } from \"styled-components\";\nimport { PaneledPageExtendedProps } from \"./ExtendedProps\";\nimport {\n PaneledPageContext,\n PaneledPageContextState\n} from \"./PaneledPageContext\";\nimport ContentAside from \"./ContentAside\";\nimport { SectionListModel } from \"./ContentSectionDataModels\";\nimport StatusFlag from \"./StatusFlag\";\n\nexport const StyledTableOfContents = styled(\"div\")`\n @media print {\n display: none;\n }\n\n position: relative;\n z-index: 2;\n\n & > ul {\n list-style: none;\n margin: 0 0 0 2px;\n padding: 0;\n\n & > li {\n height: 28px;\n\n & > a {\n display: inline-block;\n max-width: calc(100% - 20px);\n font-size: 13px;\n line-height: 28px;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n transition: 0.2s;\n color: #1e1e1e;\n cursor: pointer;\n\n &:hover {\n color: #0370f5;\n }\n }\n\n & > .section-flag-container {\n display: inline-block;\n position: absolute;\n height: 28px;\n right: 0;\n line-height: 28px;\n\n & * {\n display: inline-block;\n }\n }\n\n &[data-current-section=\"true\"] {\n & > a {\n font-weight: 600;\n font-size: 14.5px;\n color: #0370f5;\n }\n }\n }\n }\n\n & .selected-section-indicator {\n position: absolute;\n margin-left: -12px;\n transition: 0.5s;\n\n &:before {\n content: \"\";\n display: block;\n position: absolute;\n border-top: 5px solid transparent;\n border-bottom: 5px solid transparent;\n border-left: 8px solid #0370f5;\n }\n }\n`;\n\nexport const isTableOfContentsTemplate = (\n node: any\n): node is SectionTableOfContentsTemplate => {\n if (\n node &&\n node.props &&\n node.type.componentType === \"SectionTableOfContentsTemplate\" &&\n (node as SectionTableOfContentsTemplate).props.sectionFlag !== undefined\n )\n return true;\n else return false;\n};\n\nexport interface SectionTableOfContentsTemplateProps\n extends PaneledPageExtendedProps {\n /** Optional \"flag\" displayed in table of contents next to the name of any section that is \"flagged\". Defaults to an orange asterisk. */\n sectionFlag?: any;\n /** Automation testing id for the ContentSection component. Defaults to \"paneledpage-content-section-{sectionIndex}\".\n * Available wildcards:\n * %CURRENTINDEX% - the index of the current section */\n testId?: string;\n}\nexport class SectionTableOfContentsTemplate extends React.PureComponent<\n SectionTableOfContentsTemplateProps\n> {\n static componentType = \"SectionTableOfContentsTemplate\";\n\n static defaultProps: SectionTableOfContentsTemplateProps = {\n sectionFlag: \n };\n}\n\nexport interface SectionTableOfContentsProps\n extends SectionTableOfContentsTemplateProps {\n allSections: SectionListModel[];\n currentSectionIndex: number | null;\n onSelectSection: (sectionIndex: number) => void;\n theme?: any;\n}\nclass SectionTableOfContents extends React.PureComponent<\n SectionTableOfContentsProps\n> {\n static componentType = \"SectionTableOfContents\";\n\n moveIndicatorToCurrentSection = (\n currentSectionIndex: number | null\n ): string => {\n const getOffsetCompensationAmount = (): number => {\n if (this.props.theme) {\n return this.props.theme.baseTheme === \"Concrete\" ? 19 : 20;\n } else return 20;\n };\n if (currentSectionIndex !== null) {\n const offsetFactor = 28;\n return `${\n offsetFactor * (currentSectionIndex + 1) - getOffsetCompensationAmount()\n }px`;\n } else return \"-500px\";\n };\n\n renderTestId = (): string => {\n if (this.props.testId)\n return this.props.testId.replace(\n /%(CURRENTINDEX)%/g,\n `${this.props.currentSectionIndex}`\n );\n else return \"paneledpage-content-tableofcontents\";\n };\n\n // The Table of Contents is rendered inside a ContentAside which acts as a wrapper\n // This allows for more consistent styling and layout rules.\n\n render() {\n return (\n \n {(pageContext: PaneledPageContextState) => (\n \n \n
    \n {this.props.allSections && this.props.allSections.length > 0\n ? this.props.allSections.map((section, index) => {\n const sectionFlagged: boolean =\n section.sectionFlagged || false;\n return (\n \n {/* eslint-disable-next-line */}\n \n this.props.onSelectSection(section.sectionIndex)\n }\n title={`Go to section \"${section.sectionTitle}\"`}\n >\n {section.sectionTitle}\n \n {sectionFlagged && (\n \n this.props.onSelectSection(section.sectionIndex)\n }\n >\n {this.props.sectionFlag}\n
\n )}\n \n );\n })\n : \"\"}\n \n \n \n \n )}\n \n );\n }\n}\n\nexport default withTheme(SectionTableOfContents);\n","import * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\nimport { debounce, isEqual } from \"lodash\";\nimport {\n SectionListModel,\n ScrollOffsetListModel\n} from \"./ContentSectionDataModels\";\nimport ContentMain from \"./ContentMain\";\nimport ContentAside, {\n ContentAsideTemplate,\n isContentAsideTemplate\n} from \"./ContentAside\";\nimport ContentSection, {\n ContentSectionTemplate,\n isContentSectionTemplate\n} from \"./ContentSection\";\nimport SectionTableOfContents, {\n SectionTableOfContentsTemplate,\n isTableOfContentsTemplate\n} from \"./SectionTableOfContents\";\nimport {\n PaneledPageContext,\n PaneledPageContextState\n} from \"./PaneledPageContext\";\nimport { PaneledPageExtendedProps } from \"./ExtendedProps\";\nimport { ConcreteColors } from \"hcss-components\";\n\nconst getContentSectionListFromChildren = (\n children?: React.ReactNode | React.ReactNode[]\n): SectionListModel[] => {\n if (children) {\n const sections: SectionListModel[] = [];\n let contentSectionCount = 0;\n React.Children.forEach(children, (node, index) => {\n if (isContentSectionTemplate(node)) {\n sections.push({\n sectionIndex: contentSectionCount,\n sectionTitle: node.props.title,\n sectionFlagged: node.props.flagged\n });\n contentSectionCount++;\n }\n });\n return sections;\n } else return [] as SectionListModel[];\n};\n\nconst checkForTableOfContents = (\n children?: React.ReactNode | React.ReactNode[]\n): boolean => {\n let tableOfContentsFound = false;\n\n if (children) {\n let numTOCChildNodes = 0;\n const childArray = React.Children.toArray(children);\n for (let index = 0; index < childArray.length; index++) {\n const node = childArray[index];\n if (isTableOfContentsTemplate(node)) {\n if (process.env.NODE_ENV === \"development\") {\n tableOfContentsFound = true;\n numTOCChildNodes++;\n } else {\n return true;\n }\n }\n }\n\n if (numTOCChildNodes > 1) {\n // No need to print more than one warning message if, for some bizarre reason, there was\n // an attempt to mount more than two components.\n console.warn(\n \"Invalid number of inside PaneledPage content\\n\" +\n \"No more than one component should be used simultaneously in a PaneledPage's content.\"\n );\n }\n }\n\n return tableOfContentsFound;\n};\n\nconst checkForAside = (\n children?: React.ReactNode | React.ReactNode[]\n): boolean => {\n let asideFound = false;\n\n if (children) {\n let numAsideChildNodes = 0;\n const childArray = React.Children.toArray(children);\n for (let index = 0; index < childArray.length; index++) {\n const node = childArray[index];\n if (isContentAsideTemplate(node)) {\n if (process.env.NODE_ENV === \"development\") {\n asideFound = true;\n numAsideChildNodes++;\n } else {\n return true;\n }\n }\n }\n\n if (numAsideChildNodes > 1) {\n // No need to print more than one warning message if, for some bizarre reason, there was\n // an attempt to mount more than two components.\n console.warn(\n \"Invalid number of inside PaneledPage content\\n\" +\n \"No more than one component should be used simultaneously in a PaneledPage's content.\"\n );\n }\n }\n\n return asideFound;\n};\n\nconst refreshSectionFlagging = (\n currentSectionList: SectionListModel[],\n children?: React.ReactNode | React.ReactNode[]\n): SectionListModel[] => {\n if (children) {\n const updatedSectionList: SectionListModel[] = [...currentSectionList];\n let contentSectionCount = 0;\n React.Children.forEach(children, (node, index) => {\n if (\n isContentSectionTemplate(node) &&\n updatedSectionList[contentSectionCount]\n ) {\n updatedSectionList[contentSectionCount].sectionFlagged =\n node.props.flagged;\n contentSectionCount++;\n }\n });\n return updatedSectionList;\n } else return [] as SectionListModel[];\n};\n\nexport interface PageContentPanelTemplateProps\n extends PaneledPageExtendedProps {\n /** When set to true, closes an open filters panel when the user clicks inside the content. */\n hideFiltersOnContentClicked?: boolean;\n /** Automation testing id for the PaneledPage.Content component. Defaults to \"paneledpage-content\". */\n testId?: string;\n /** Regular HTML id for the Content.Main component. Defaults to \"paneledpage-content-main\". */\n mainContainerId?: string;\n /** Automation testing id for the Content.Main component. Defaults to \"paneledpage-content-main\". */\n mainContainerTestId?: string;\n /** Regular HTML id for the inner content wrapper, which sits inside the Content.Main component, and which contains the actual content.\n * Defaults to \"paneledpage-content-main-inner-wrapper-id\". */\n contentInnerWrapperId?: string;\n /** Automation testing id for the inner content wrapper, which sits inside the Content.Main component, and which contains the actual content.\n * Defaults to \"paneledpage-content-main-inner-wrapper\". */\n contentInnerWrapperTestId?: string;\n /** Child elements of the PaneledPage.Content component. These can be anything, including the\n * PaneledPage.Content.Section component and the PaneledPage.Content.Aside component.\n * When using the PaneledPage.Content.Aside component, be sure to use only one, and mount it as\n * the first child of the PaneledPage.Content. */\n children?: React.ReactNode | React.ReactNode[];\n\n flagSectionsOnScroll?: boolean;\n}\nexport default class PageContentPanelTemplate extends React.PureComponent<\n PageContentPanelTemplateProps\n> {\n static Section = ContentSectionTemplate;\n static Aside = ContentAsideTemplate;\n static TableOfContents = SectionTableOfContentsTemplate;\n\n render() {\n return (\n \n {(pageContext: PaneledPageContextState) => (\n \n )}\n \n );\n }\n}\n\nexport interface PageContentPanelProps extends PageContentPanelTemplateProps {\n pageContext: PaneledPageContextState;\n flagSectionsOnScroll?: boolean;\n}\nexport interface PageContentPanelState {\n allSections: SectionListModel[];\n sectionScrollOffsets: ScrollOffsetListModel[];\n currentSectionIndex: number | null;\n contentScrollPosition: number;\n contentResizingCalcInProgress: boolean;\n currentWidth: number;\n fillerHeight: number;\n fillerWasResized: boolean;\n userRequestedScrollToSection: boolean;\n hasContentAside: boolean;\n hasTableOfContents: boolean;\n}\n\nconst defaultScrollUpBuffer = 74;\nconst defaultScrollDownBuffer = 56;\n\nexport class PageContentPanel extends React.PureComponent<\n PageContentPanelProps,\n PageContentPanelState\n> {\n private mainContainerRef: React.RefObject = React.createRef();\n readonly state: PageContentPanelState = {\n allSections: getContentSectionListFromChildren(this.props.children),\n sectionScrollOffsets: [],\n currentSectionIndex: null,\n contentScrollPosition: 0,\n contentResizingCalcInProgress: false,\n currentWidth: 0,\n fillerHeight: 0,\n fillerWasResized: false,\n userRequestedScrollToSection: false,\n hasContentAside: checkForAside(this.props.children),\n hasTableOfContents: checkForTableOfContents(this.props.children)\n };\n\n componentDidMount() {\n const updatedScrollOffsets: ScrollOffsetListModel[] = this.getUpdatedSectionScrollOffsets(\n this.props.children,\n 0\n );\n const updatedWidth: number = this.calculateWidth();\n\n this.setState(\n {\n allSections: getContentSectionListFromChildren(this.props.children),\n contentScrollPosition: 0,\n currentWidth: updatedWidth,\n sectionScrollOffsets: updatedScrollOffsets,\n userRequestedScrollToSection: false,\n hasContentAside: checkForAside(this.props.children),\n hasTableOfContents: checkForTableOfContents(this.props.children)\n },\n () => {\n if (this.state.hasContentAside && this.state.hasTableOfContents) {\n console.warn(\n \"Invalid simultaneous use of children and \\n\" +\n \" and components should not be used simultaneously in a PaneledPage's content.\"\n );\n }\n this.setState(prevState => ({\n currentSectionIndex:\n prevState.allSections && prevState.allSections.length > 0\n ? prevState.allSections[0].sectionIndex\n : null\n }));\n }\n );\n\n window.addEventListener(\"resize\", this.handleWindowResize, true);\n }\n\n componentWillUnmount() {\n window.removeEventListener(\"resize\", this.handleWindowResize, true);\n }\n\n componentDidUpdate(prevProps: PageContentPanelProps) {\n const newAllSections = getContentSectionListFromChildren(\n this.props.children\n );\n if (!isEqual(this.state.allSections, newAllSections)) {\n this.setState({ allSections: newAllSections });\n } else if (!isEqual(prevProps.children, this.props.children)) {\n this.setState({\n allSections: refreshSectionFlagging(newAllSections, this.props.children)\n });\n }\n }\n\n handleMainContainerMounted = () => {\n const fillerHeight: number = this.calculateFillerHeight();\n const updatedScrollOffsets: ScrollOffsetListModel[] = this.getUpdatedSectionScrollOffsets(\n this.props.children,\n 0\n );\n\n this.setState(prevState => ({\n sectionScrollOffsets: updatedScrollOffsets,\n currentSectionIndex:\n prevState.allSections && prevState.allSections.length > 0\n ? prevState.allSections[0].sectionIndex\n : null,\n fillerHeight: fillerHeight\n }));\n };\n\n handleWindowResize = (event: any) => {\n this.setState({\n currentWidth: this.calculateWidth(),\n fillerHeight: this.calculateFillerHeight()\n });\n };\n\n calculateWidth = (): number => {\n const selfElement: Element = ReactDOM.findDOMNode(this) as Element;\n return selfElement ? selfElement.getBoundingClientRect().width : 0;\n };\n\n calculateFillerHeight = (): number => {\n const allSections: SectionListModel[] = this.state.allSections;\n if (allSections && allSections.length > 0) {\n const container: Element | Text | null = ReactDOM.findDOMNode(\n this.mainContainerRef.current\n );\n const lastSection: Element | null = (ReactDOM.findDOMNode(\n this\n ) as Element).querySelector(\n `.content-section[data-section-index=\"${\n allSections[allSections.length - 1].sectionIndex\n }\"]`\n );\n\n if (container && lastSection) {\n const containerHeight: number = (container as Element).getBoundingClientRect()\n .height;\n const lastSectionHeight: number = lastSection.getBoundingClientRect()\n .height;\n const baseMargin = 82; // Takes into account the 32px bottom margin underneath each section\n return lastSectionHeight + baseMargin <= containerHeight\n ? containerHeight - (lastSectionHeight + baseMargin)\n : 0;\n } else return 0;\n } else return 0;\n };\n\n calculateScrollUpBuffer = (): number => {\n const container: Element | Text | null = ReactDOM.findDOMNode(\n this.mainContainerRef.current\n );\n return container\n ? 0.68 * (container as Element).getBoundingClientRect().height\n : 0;\n };\n\n calculateScrollDownBuffer = (): number => {\n const container: Element | Text | null = ReactDOM.findDOMNode(\n this.mainContainerRef.current\n );\n return container\n ? 0.52 * (container as Element).getBoundingClientRect().height\n : 0;\n };\n\n getUpdatedSectionScrollOffsets = (\n childNodes: any,\n updatedScrollPosition: number\n ): ScrollOffsetListModel[] => {\n const sectionScrollOffsets: ScrollOffsetListModel[] = [];\n\n if (this.mainContainerRef) {\n const container: Element = ReactDOM.findDOMNode(\n this.mainContainerRef.current\n ) as Element;\n let contentSectionCount = 0;\n\n React.Children.forEach(childNodes, (node, index) => {\n if (isContentSectionTemplate(node)) {\n const section: Element | null = container\n ? (container.querySelector(\n `.content-section[data-section-index=\"${contentSectionCount}\"]`\n ) as Element)\n : null;\n const scrollOffset: number = section\n ? Math.abs(\n Math.round(\n section.getBoundingClientRect().top -\n (container.getBoundingClientRect().top +\n 12 -\n updatedScrollPosition)\n )\n )\n : -1;\n\n sectionScrollOffsets.push({\n sectionIndex: contentSectionCount,\n sectionScrollOffset: scrollOffset\n });\n\n contentSectionCount++;\n }\n });\n }\n return sectionScrollOffsets;\n };\n\n getCurrentSectionWithUpdatedPosition = (\n currentScrollPosition: number,\n updatedScrollOffsets: ScrollOffsetListModel[],\n scrollChange?: number\n ): number | null => {\n let lastPassedSectionIndex: number | null = null;\n const scrollUpBuffer: number = this.calculateScrollUpBuffer();\n const scrollDownBuffer: number = this.calculateScrollDownBuffer();\n\n const triggerInterferenceWithPreviousSections = (\n currentIndex: number,\n currentSectionOffset: number,\n calculatedBuffer: number,\n defaultBuffer: number\n ): boolean => {\n if (currentSectionOffset < calculatedBuffer) return true;\n else if (\n currentSectionOffset <\n 2 * calculatedBuffer - defaultBuffer + 100\n ) {\n const allSections: SectionListModel[] = this.state.allSections;\n const previousSection: Element | null =\n allSections && allSections.length > 0\n ? (ReactDOM.findDOMNode(this) as Element).querySelector(\n `.content-section[data-section-index=\"${currentIndex - 1}\"]`\n )\n : null;\n const previousSectionHeight: number = previousSection\n ? previousSection.getBoundingClientRect().height\n : -1;\n if (previousSectionHeight > 0)\n return calculatedBuffer > 0\n ? previousSectionHeight < calculatedBuffer\n : previousSectionHeight < defaultBuffer;\n else return true;\n } else return false;\n };\n\n if (updatedScrollOffsets && updatedScrollOffsets.length > 0) {\n let index = 0;\n let passedPreviousTrigger = true;\n while (index < updatedScrollOffsets.length && passedPreviousTrigger) {\n let lowTrigger: number;\n const sectionAtIndex: ScrollOffsetListModel =\n updatedScrollOffsets[index];\n\n if (index === 0) lowTrigger = 0;\n else {\n const sectionScrollOffset: number =\n sectionAtIndex.sectionScrollOffset;\n if (scrollChange && scrollChange < 0) {\n lowTrigger =\n scrollUpBuffer &&\n !triggerInterferenceWithPreviousSections(\n index,\n sectionScrollOffset,\n scrollUpBuffer,\n defaultScrollUpBuffer\n )\n ? sectionScrollOffset - scrollUpBuffer\n : sectionScrollOffset - defaultScrollUpBuffer;\n } else {\n lowTrigger =\n scrollDownBuffer &&\n !triggerInterferenceWithPreviousSections(\n index,\n sectionScrollOffset,\n scrollDownBuffer,\n defaultScrollDownBuffer\n )\n ? sectionScrollOffset - scrollDownBuffer\n : sectionScrollOffset - defaultScrollDownBuffer;\n }\n }\n\n if (lowTrigger <= currentScrollPosition)\n lastPassedSectionIndex = sectionAtIndex.sectionIndex;\n else passedPreviousTrigger = false;\n index++;\n }\n }\n\n return lastPassedSectionIndex !== null\n ? lastPassedSectionIndex\n : this.state.currentSectionIndex;\n };\n\n handleClickInside = (event: any) => {\n this.props.pageContext.onClickInsideContent(\n this.props.hideFiltersOnContentClicked || true\n );\n };\n\n handleScrollContent = (event: any, updatedScrollPosition: number) => {\n if (!this.props.flagSectionsOnScroll) {\n return;\n }\n if (!this.state.fillerWasResized) {\n this.setState(prevState => {\n const scrollChange: number = prevState.userRequestedScrollToSection\n ? 0\n : updatedScrollPosition - prevState.contentScrollPosition;\n const updatedSectionIndex:\n | number\n | null = !prevState.userRequestedScrollToSection\n ? this.getCurrentSectionWithUpdatedPosition(\n updatedScrollPosition,\n prevState.sectionScrollOffsets,\n scrollChange\n )\n : prevState.currentSectionIndex;\n return {\n contentScrollPosition: updatedScrollPosition,\n currentSectionIndex: updatedSectionIndex\n };\n });\n this.delayUserScrollRequestReset();\n }\n };\n\n delayUserScrollRequestReset = debounce(() => {\n this.setState({ userRequestedScrollToSection: false });\n }, 200);\n\n delayFillerResizeStatusReset = debounce(() => {\n this.setState({ fillerWasResized: false });\n }, 200);\n\n handleSectionChangedHeight = (isLastSection: boolean) => {\n if (isLastSection)\n this.setState(\n {\n fillerHeight: this.calculateFillerHeight(),\n fillerWasResized: true\n },\n this.delayFillerResizeStatusReset\n );\n else\n this.setState(prevState => ({\n sectionScrollOffsets: this.getUpdatedSectionScrollOffsets(\n this.props.children,\n prevState.contentScrollPosition\n )\n }));\n };\n\n handleSelectSection = debounce((selectedSectionIndex: number) => {\n if (this.state.sectionScrollOffsets) {\n const sectionPosition = this.state.sectionScrollOffsets[\n selectedSectionIndex\n ].sectionScrollOffset;\n this.mainContainerRef.current.scrollTop =\n sectionPosition > defaultScrollDownBuffer\n ? sectionPosition - defaultScrollDownBuffer\n : 0;\n this.setState({\n userRequestedScrollToSection: true,\n currentSectionIndex: selectedSectionIndex\n });\n }\n }, 250);\n\n render() {\n let contentSectionCount = 0;\n\n return (\n \n {React.Children.map(this.props.children, (node, index) => {\n // Render only ContentAside and TableOfContents child elements outside the main container\n if (isContentAsideTemplate(node)) {\n return (\n \n );\n } else if (isTableOfContentsTemplate(node)) {\n return (\n \n );\n }\n return null;\n })}\n \n {React.Children.map(this.props.children, (node, index) => {\n const numSections: number = this.state.allSections.length;\n if (node && isContentSectionTemplate(node)) {\n contentSectionCount++;\n const sectionIndex: number = contentSectionCount - 1;\n const isLast: boolean = sectionIndex === numSections - 1;\n return (\n \n );\n // prevent render of ContentAside and Table of Contents child elements inside the Main container\n } else if (\n !isContentAsideTemplate(node) &&\n !isTableOfContentsTemplate(node)\n )\n return node;\n\n return null;\n })}\n \n \n );\n }\n}\n\nexport const StyledPageContentPanel = styled.div<{\n maxpagewidth: number | null;\n containerwidth: number;\n asidewidth: number;\n fillerheight: number | null;\n}>`\n display: flex;\n flex: 1 0;\n flex-wrap: nowrap;\n align-items: stretch;\n position: relative;\n overflow: hidden;\n background: ${ConcreteColors.gray200};\n z-index: 0;\n\n @media print {\n height: auto;\n overflow: visible;\n }\n\n &[data-has-table-of-contents=\"true\"] .page-content-main {\n & > .content-inner-wrapper {\n padding-bottom: ${props =>\n props.fillerheight ? `${props.fillerheight}px` : 0};\n }\n }\n\n &:before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n opacity: 0.8;\n transition: 0.2s;\n }\n &[data-modal-overlay-active=\"true\"] {\n .page-content-main {\n overflow: hidden;\n }\n\n &:before {\n background: ${ConcreteColors.gray400};\n z-index: 5;\n }\n }\n &[data-modal-overlay-active=\"false\"] {\n .page-content-main {\n overflow: auto;\n }\n\n &:before {\n background: transparent;\n z-index: -5;\n }\n }\n\n &[data-has-content-aside=\"true\"],\n &[data-has-table-of-contents=\"true\"] {\n &[data-content-align=\"center\"] {\n .page-content-aside {\n left: ${props =>\n props.maxpagewidth && props.maxpagewidth < props.containerwidth\n ? `calc(50% - ${props.maxpagewidth * 0.5}px)`\n : \"0\"};\n }\n .page-content-main > .content-inner-wrapper {\n margin-left: ${props =>\n props.maxpagewidth && props.maxpagewidth < props.containerwidth\n ? `calc(50% - ${props.maxpagewidth * 0.5 - props.asidewidth}px)`\n : `${props.asidewidth}px`};\n margin-right: ${props =>\n props.maxpagewidth && props.maxpagewidth < props.containerwidth\n ? `calc(50% - ${props.maxpagewidth * 0.5}px)`\n : \"0\"};\n max-width: ${props =>\n props.maxpagewidth\n ? `${props.maxpagewidth - props.asidewidth}px`\n : \"none\"};\n }\n }\n\n &[data-content-align=\"left\"] {\n .page-content-aside {\n left: 0;\n }\n .page-content-main > .content-inner-wrapper {\n margin-left: ${props => `${props.asidewidth}px`};\n margin-right: auto;\n max-width: ${props =>\n props.maxpagewidth\n ? `${props.maxpagewidth - props.asidewidth}px`\n : \"none\"};\n }\n }\n }\n\n &[data-has-content-aside=\"false\"][data-has-table-of-contents=\"false\"] {\n .page-content-main > .content-inner-wrapper {\n max-width: ${props =>\n props.maxpagewidth ? `${props.maxpagewidth}px` : \"none\"};\n }\n\n &[data-content-align=\"center\"] {\n .page-content-main > .content-inner-wrapper {\n margin-left: auto;\n margin-right: auto;\n }\n }\n\n &[data-content-align=\"left\"] {\n .page-content-main > .content-inner-wrapper {\n margin-left: 0;\n margin-right: auto;\n }\n }\n }\n`;\n","import * as React from \"react\";\nimport {\n PaneledPageContext,\n PaneledPageContextState\n} from \"./PaneledPageContext\";\n\n// With the FiltersToggle, you can create custom components to toggle the filters panel open or closed,\n// and can place them anywhere within the PaneledPage's structure, when it becomes necessary. Examples include: an\n// 'Apply' button inside the filter panel's contents, or a link/button inside the PaneledPage's content area.\nexport interface FiltersToggleProps {\n /** Determines what event will actually toggle the filters panel. Default is \"click\"; i.e. clicking the FiltersToggle will toggle the filters panel. */\n toggleFiltersOnEvent: \"click\" | \"hover\";\n}\nexport default class FiltersToggle extends React.PureComponent<\n FiltersToggleProps,\n any\n> {\n handleClick = (event: any, pageContext: PaneledPageContextState) => {\n if (\n this.props.toggleFiltersOnEvent === \"click\" &&\n pageContext.onToggleFiltersPanel\n )\n pageContext.onToggleFiltersPanel(event);\n };\n\n handleMouseEnter = (event: any, pageContext: PaneledPageContextState) => {\n if (\n this.props.toggleFiltersOnEvent === \"hover\" &&\n pageContext.onToggleFiltersPanel\n )\n pageContext.onToggleFiltersPanel(event);\n };\n\n render() {\n return (\n \n {(pageContext: PaneledPageContextState) => (\n this.handleClick(event, pageContext)}\n onMouseDown={event => this.handleMouseEnter(event, pageContext)}\n >\n {this.props.children}\n \n )}\n \n );\n }\n}\n","import * as React from \"react\";\nimport styled from \"styled-components\";\nimport PageHeaderPanelTemplate from \"./PageHeaderPanel\";\nimport PageContentPanelTemplate from \"./PageContentPanel\";\nimport { defaultAsideWidth } from \"./ContentAside\";\nimport {\n PaneledPageContext,\n PaneledPageContextState\n} from \"./PaneledPageContext\";\nimport { PaneledPageExtendedProps } from \"./ExtendedProps\";\nimport FiltersToggle from \"./FiltersToggle\";\n\nexport interface PaneledPageProps extends PaneledPageExtendedProps {\n /** Optional property for fixing height fit issues when the PaneledPage is inside some kind of container or wrapper. Default: 'page'. */\n fitTo?: \"page\" | \"container\";\n /** Optional property to set a maximum width for PaneledPage content, beyond which the content is centered on the page. */\n maxWidth?: number;\n /** Alignment of content on the page, if maxWidth is supplied and once maximum width is reached. Defaults to \"center\" */\n contentAlign?: \"center\" | \"left\";\n /** Automation testing id for the PaneledPage container component. Defaults to \"paneledpage-container\". */\n testId?: string;\n /** Sub-components of PaneledPage. Only the PaneledPage.Header and PaneledPage.Content components should be used as immediate children of the PaneledPage.\n * The Header component should be used before the Content component.\n */\n children?: React.ReactNode | React.ReactNode[];\n}\nexport interface PaneledPageState {\n filtersPanelExpanded: boolean;\n filtersHasOpenDropdown: boolean;\n activeDropdownId: string | null;\n asideWidth: number;\n}\nexport default class PaneledPage extends React.PureComponent<\n PaneledPageProps,\n PaneledPageState\n> {\n static Header = PageHeaderPanelTemplate;\n static Content = PageContentPanelTemplate;\n static FiltersToggle = FiltersToggle;\n static defaultProps: PaneledPageProps = {\n testId: \"paneledpage-container\"\n };\n static componentType = \"PaneledPage\";\n\n private dropdownCheckTimeout: any;\n private mounted = true;\n\n readonly state: PaneledPageState = {\n filtersPanelExpanded: false,\n filtersHasOpenDropdown: false,\n activeDropdownId: null,\n asideWidth: 200\n };\n\n componentDidMount() {\n this.checkForInvalidNodes();\n }\n\n componentWillUnmount() {\n this.mounted = false;\n if (!!this.dropdownCheckTimeout) clearTimeout(this.dropdownCheckTimeout);\n }\n\n showFilters = () => this.setState({ filtersPanelExpanded: true });\n hideFilters = () => this.setState({ filtersPanelExpanded: false });\n\n handleClickInsidePage = (event?: any) => {\n this.dropdownCheckTimeout = setTimeout(() => {\n if (this.mounted) this.checkForOpenDropdowns();\n }, 50);\n };\n\n handleClickInsideFilters = (event?: any) => {\n if (!this.state.filtersPanelExpanded) this.showFilters();\n };\n\n handleFiltersPanelToggled = (event?: any) => {\n if (event) event.stopPropagation();\n if (!this.state.filtersPanelExpanded) this.showFilters();\n else this.hideFilters();\n };\n\n // The animation is a lot smoother and more effective when the default expansion of the filters is delayed somewhat.\n // It also catches a user's attention more readily when it occurs just a fraction of a second after the page loads.\n handleDefaultExpandFilters = () => setTimeout(this.showFilters, 450);\n\n checkForInvalidNodes = () => {\n if (process.env.NODE_ENV === \"development\" && this.props.children) {\n let numHeaderPanelNodes = 0;\n let numContentPanelNodes = 0;\n\n React.Children.forEach(\n this.props.children,\n (node: React.ReactNode, index) => {\n if (node && (node as any).type !== undefined) {\n const nodeComponentTypeName: string | null =\n (node as any).type.name || null;\n if (nodeComponentTypeName === \"PageHeaderPanelTemplate\")\n numHeaderPanelNodes++;\n else if (nodeComponentTypeName === \"PageContentPanelTemplate\")\n numContentPanelNodes++;\n else {\n console.warn(\n \"Invalid child node of \\n\" +\n `<${\n (node as any).type\n }> is not a valid immediate child of a component. ` +\n \"We recommend using only or as immediate children of a .\"\n );\n }\n }\n }\n );\n\n if (numHeaderPanelNodes > 1) {\n console.warn(\n \"Invalid duplicate children\\n\" +\n \" should not have more than one as a child component. \" +\n \"Duplicate nodes will be ignored\"\n );\n }\n\n if (numContentPanelNodes > 1) {\n console.warn(\n \"Invalid duplicate children\\n\" +\n \" should not have more than one as a child component. \" +\n \"Duplicate nodes will be ignored\"\n );\n }\n }\n };\n\n checkForOpenDropdowns = () => {\n const activeElementId: string | null = document.activeElement\n ? document.activeElement.id || \"unknown\"\n : null;\n if (activeElementId && activeElementId.indexOf(\"react-select\") !== -1) {\n if (this.state.filtersHasOpenDropdown) {\n // If there already was an open dropdown in the filters panel, check if it's the same one the user just focused.\n // If so, the dropdown will hide; otherwise, the user opened some other dropdown in that panel.\n this.setState(prevState => ({\n filtersHasOpenDropdown:\n activeElementId !== prevState.activeDropdownId,\n activeDropdownId: activeElementId\n }));\n } else\n this.setState({\n filtersHasOpenDropdown: true,\n activeDropdownId: activeElementId\n });\n } else\n this.setState({\n filtersHasOpenDropdown: false,\n activeDropdownId: null\n });\n };\n\n handleClickInsideContent = (filtersPanelShouldHide: boolean) => {\n if (this.mounted) {\n if (!this.state.filtersHasOpenDropdown)\n filtersPanelShouldHide && this.hideFilters();\n else this.setState({ filtersHasOpenDropdown: false });\n }\n };\n\n setAsideWidth = (updatedWidth: number | undefined) => {\n this.setState({ asideWidth: updatedWidth || defaultAsideWidth });\n };\n\n userExpandedAnyDropdown = (): boolean => {\n if (\n document.activeElement &&\n document.activeElement.id &&\n document.activeElement.id.indexOf(\"react-select\") !== -1\n )\n return true;\n else return false;\n };\n\n render() {\n const maxPageWidth: number | null =\n this.props.maxWidth && this.props.maxWidth > 0\n ? this.props.maxWidth\n : null;\n const contentAlign: \"center\" | \"left\" = this.props.contentAlign || \"center\";\n const contextState: PaneledPageContextState = {\n maxPageWidth: maxPageWidth,\n contentAlign: contentAlign,\n asideWidth: this.state.asideWidth,\n setAsideWidth: this.setAsideWidth,\n filtersPanelExpanded: this.state.filtersPanelExpanded,\n filtersHasOpenDropdown: this.state.filtersHasOpenDropdown,\n activeDropdownId: this.state.activeDropdownId,\n onToggleFiltersPanel: this.handleFiltersPanelToggled,\n onDefaultExpandFilters: this.handleDefaultExpandFilters,\n onClickInsideFilters: this.handleClickInsideFilters,\n onClickInsideContent: this.handleClickInsideContent\n };\n return (\n \n \n {this.props.children}\n \n \n );\n }\n}\n\nexport const StyledPaneledPage = styled(\"div\")`\n display: flex;\n flex-direction: column;\n position: relative;\n width: 100%;\n height: 100%;\n overflow-y: visible;\n overflow-x: hidden;\n\n @media print {\n display: inline;\n }\n\n &.fit-to-page {\n height: calc(100vh - 45px);\n }\n &.fit-to-container {\n height: 100%;\n }\n\n .filters-panel-toggle-listener {\n cursor: pointer;\n }\n`;\n","import { isNullOrWhitespace } from \"core\";\nimport { Subscription } from \"../state\";\nimport { strings } from \"localization\";\nimport { CredentialsUserDto } from \"api/GeneratedClients/precon\";\n\nexport type ValidationFieldKeys =\n | \"name\"\n | \"projectTemplateIds\"\n | \"settings\"\n | \"recipientIds\";\n\nexport type ValidationResult = Pick<\n SubscriptionValidationContext,\n \"isFieldValid\" | \"fieldErrorMessages\"\n>;\n\ntype IsSubscriptionValid = Record<\n keyof Pick,\n boolean\n>;\ntype ValidationMessage = Record;\nexport interface SubscriptionValidationContext {\n isFieldValid: IsSubscriptionValid;\n newSub: Subscription;\n otherSubs: Subscription[];\n fieldErrorMessages: ValidationMessage;\n isValid: boolean;\n}\n\nconst DAY_POSSIBLE_VALUES = [\n \"sunday\",\n \"monday\",\n \"tuesday\",\n \"wednesday\",\n \"thursday\",\n \"friday\",\n \"saturday\"\n];\nexport const validateSubscription = (\n newSub: Subscription,\n otherSubs: Subscription[],\n recipients: CredentialsUserDto[]\n): SubscriptionValidationContext => {\n const context: SubscriptionValidationContext = {\n isFieldValid: {\n name: true,\n projectTemplateIds: true,\n settings: true,\n recipientIds: true\n },\n newSub: newSub,\n otherSubs: otherSubs,\n fieldErrorMessages: {\n name: [],\n projectTemplateIds: [],\n settings: [],\n recipientIds: []\n },\n isValid: true\n };\n isValidName(context);\n isValidTemplates(context);\n isValidRecipients(context, recipients);\n isValidTime(context);\n isValidTimeZone(context);\n isValidDay(context);\n Object.values(context.isFieldValid).forEach(isFieldValid => {\n context.isValid = context.isValid && isFieldValid;\n });\n return context;\n};\n\nconst isValidName = (context: SubscriptionValidationContext) => {\n if (isNullOrWhitespace(context.newSub.name)) {\n context.isFieldValid.name = false;\n context.fieldErrorMessages.name.push(\n strings.emailSubscription.validation.name.hasAName\n );\n }\n const subHaveUniqueName =\n context.otherSubs.findIndex(\n otherSub =>\n otherSub.name?.toLowerCase() === context.newSub.name?.toLowerCase()\n ) === -1;\n if (!subHaveUniqueName) {\n context.isFieldValid.name = false;\n context.fieldErrorMessages.name.push(\n strings.emailSubscription.validation.name.hasUniqueName\n );\n }\n};\nconst isValidTemplates = (context: SubscriptionValidationContext) => {\n const subHaveAtLeastOneTemplate =\n context.newSub.viewIds && context.newSub.viewIds.length > 0;\n if (!subHaveAtLeastOneTemplate) {\n context.isFieldValid.projectTemplateIds = false;\n context.fieldErrorMessages.projectTemplateIds.push(\n strings.emailSubscription.validation.templates.hasOneTemplate\n );\n }\n};\nconst isValidRecipients = (\n context: SubscriptionValidationContext,\n recipients: CredentialsUserDto[]\n) => {\n const { recipientIds: subscriptionRecipientIds } = context.newSub;\n const subHaveAtLeastOneRecipient =\n subscriptionRecipientIds && subscriptionRecipientIds.length > 0;\n const subHasInvalidUsers = subscriptionRecipientIds.reduce((acc, curr) => {\n return recipients.find(r => r.id === curr) === undefined || acc;\n }, false);\n\n if (!subHaveAtLeastOneRecipient) {\n context.fieldErrorMessages.recipientIds.push(\n strings.emailSubscription.validation.recipients.hasOneRecipient\n );\n }\n if (subHasInvalidUsers) {\n context.fieldErrorMessages.recipientIds.push(\n strings.emailSubscription.validation.recipients.hasInvalidRecipients\n );\n }\n context.isFieldValid.recipientIds =\n subHaveAtLeastOneRecipient && !subHasInvalidUsers;\n};\nconst isValidTime = (context: SubscriptionValidationContext) => {\n const newSubTime = Object.values(context.newSub.settings.scheduledTimes)[0];\n const subHaveAtLeastOneTime = newSubTime && !isNullOrWhitespace(newSubTime);\n if (!subHaveAtLeastOneTime) {\n context.isFieldValid.settings = false;\n context.fieldErrorMessages.settings.push(\n strings.emailSubscription.validation.time.hasTime\n );\n }\n};\nconst isValidTimeZone = (context: SubscriptionValidationContext) => {\n const newSubTimeZone = context.newSub.settings.timeZoneId;\n const subHaveAtLeastOneTimeZone =\n newSubTimeZone && !isNullOrWhitespace(newSubTimeZone);\n if (!subHaveAtLeastOneTimeZone) {\n context.isFieldValid.settings = false;\n context.fieldErrorMessages.settings.push(\n strings.emailSubscription.validation.timeZone.hasTimeZone\n );\n }\n};\nconst isValidDay = (context: SubscriptionValidationContext) => {\n const newSubDays = Object.keys(context.newSub.settings.scheduledTimes);\n const subHaveAtLeastOneDay =\n newSubDays &&\n newSubDays.length > 0 &&\n newSubDays.reduce((acc, curr) => {\n return DAY_POSSIBLE_VALUES.includes(curr) && acc;\n }, true);\n if (!subHaveAtLeastOneDay) {\n context.isFieldValid.settings = false;\n context.fieldErrorMessages.settings.push(\n strings.emailSubscription.validation.day.hasDay\n );\n }\n};\n\nexport const initialValidationResult: ValidationResult = {\n isFieldValid: {\n name: true,\n projectTemplateIds: true,\n settings: true,\n recipientIds: true\n },\n fieldErrorMessages: {\n name: [],\n projectTemplateIds: [],\n settings: [],\n recipientIds: []\n }\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nexport const CodebooksIcon = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst StyledIcon = styled.svg`\n .st0 {\n fill: #ffffff;\n }\n .st1 {\n fill: #d4d4d4;\n }\n .st2 {\n fill: #14af80;\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { ConcreteColors, Button, Icon } from \"hcss-components\";\nimport { strings } from \"localization\";\nimport { CodebooksIcon } from \"./CodebooksIcon\";\nimport {\n PageWrapper,\n Jumbotron,\n ContentWrapper,\n ImageContainer,\n defaultIconStyle\n} from \"../../../../core/components/empty-state/index\";\n\nexport const CodebooksLimitedView = () => {\n return (\n \n \n \n \n
\n \n
\n
\n \n

\n {strings.layout.menu.estimating.codebookslimitedPlaceholder.title}\n

\n

\n {strings.layout.menu.estimating.codebookslimitedPlaceholder.text}\n

\n

\n {\n strings.layout.menu.estimating.codebookslimitedPlaceholder\n .fullFeaturesText\n }\n

\n \n window.open(\n \"https://help.hcss.com/s/article/What-Are-the-Differences-Between-a-Limited-Features-Account-and-a-Full-Features-Account-in-HeavyBid-Pre-Construction\",\n \"_blank\"\n )\n }\n >\n Click Here \n \n \n

\n {\n strings.layout.menu.estimating.codebookslimitedPlaceholder\n .moreInfoText\n }\n

\n \n window.open(\n \"https://help.hcss.com/s/article/What-is-the-HeavyBid-Pre-Construction-Codebooks-Dashboard\",\n \"_blank\"\n )\n }\n >\n Click Here \n \n \n
\n
\n
\n
\n );\n};\n\nconst Blurb = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n margin-top: 30px;\n align-items: center;\n text-align: center;\n\n h1 {\n color: ${ConcreteColors.gray700};\n font-size: 18px;\n font-weight: 600;\n line-height: 1.075;\n margin-bottom: 10px;\n padding: 0px 110px 0px 110px;\n }\n\n p {\n color: ${ConcreteColors.gray600};\n font-size: 14px;\n font-weight: 400;\n max-width: 600px;\n margin: 20px auto 10px auto;\n }\n\n div > button {\n display: flex;\n flex-direction: row;\n align-items: baseline;\n font-size: small;\n padding-top: 8px;\n padding-bottom: 6px;\n }\n`;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { Box } from \"hcss-core\";\nimport { TypedDataColumn, DataColumnType } from \"hcss-tables\";\nimport { strings } from \"localization\";\nimport { Grid as MuiGrid } from \"@mui/material\";\nimport { useCodebooksContext } from \"../../context/CodebooksContext\";\n\ninterface TimestampsProps {\n codebooksTimestamp: string;\n estimateTimestamp: string;\n}\n\nexport const Timestamps = () => {\n const { estimateTimestamp, codebooksTimestamp } = useCodebooksContext();\n return (\n \n {codebooksTimestamp && (\n \n \n {`${strings.estimates.codebooks.lastUpdateCodebook} ${codebooksTimestamp}`}\n \n \n )}\n {estimateTimestamp && (\n \n \n {`${strings.estimates.codebooks.lastUpdateEstimate} ${estimateTimestamp}`}\n \n \n )}\n \n );\n};\n\nexport const Section = styled(Box).attrs(() => ({ as: \"section\" }))`\n border-radius: 4px;\n padding: 5px 12px 10px 12px;\n margin-bottom: 32px;\n border-left: 4px solid transparent;\n height: calc(100vh - 185px);\n @media print {\n & {\n page-break-inside: avoid;\n }\n }\n`;\n\nexport const SectionHeader = styled.div`\n padding-bottom: 10px;\n`;\n\nexport const SectionTitle = styled.h2`\n display: inline-block;\n margin: 2px 0 0 0;\n font-size: 1em;\n font-weight: 500;\n vertical-align: middle;\n`;\n\nexport const SectionSubText = styled.div`\n float: right;\n font-size: 12.5px;\n`;\nconst activityColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.activityCode,\n type: DataColumnType.ShortText,\n name: \"code\"\n};\nconst codebookCodeColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.codebookCode,\n type: DataColumnType.ShortText,\n name: \"code\"\n};\nconst descColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.description,\n type: DataColumnType.ShortText,\n name: \"description\"\n};\nconst levelColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.level,\n type: DataColumnType.ShortText,\n name: \"level\"\n};\nconst unitColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.unit,\n type: DataColumnType.ShortText,\n name: \"units\"\n};\nconst estimateColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.estimateCode,\n type: DataColumnType.ShortText,\n name: \"estimate\"\n};\nconst biditemColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.biditemCode,\n type: DataColumnType.ShortText,\n name: \"biditem\"\n};\nconst lastUpdateColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.lastUpdate,\n type: DataColumnType.Date,\n groupingEnabled: false,\n name: \"lastUpdate\"\n};\nconst lastModifiedColumn: TypedDataColumn = {\n title: strings.estimates.codebooks.columnNames.lastModified,\n type: DataColumnType.DateTime,\n groupingEnabled: false,\n name: \"lastModified\"\n};\nconst timesUsedColumn: TypedDataColumn = {\n title: \"Times Used\",\n type: DataColumnType.Number,\n name: \"timesUsed\"\n};\nconst timesModifiedColumn: TypedDataColumn = {\n title: \"Times Modified\",\n type: DataColumnType.Number,\n name: \"timesModified\"\n};\nconst codebookValueColumn: TypedDataColumn = {\n title: \"Codebook Value\",\n type: DataColumnType.ShortText,\n name: \"codebookValue\"\n};\nconst modifiedValueColumn: TypedDataColumn = {\n title: \"Modified Value\",\n type: DataColumnType.ShortText,\n name: \"modifiedValue\"\n};\nconst modificationColumn: TypedDataColumn = {\n title: \"Modification\",\n type: DataColumnType.ShortText,\n name: \"modification\"\n};\nexport const unusedColumns = [\n codebookCodeColumn,\n descColumn,\n levelColumn,\n unitColumn,\n lastUpdateColumn\n];\nexport const missingColumns = [\n activityColumn,\n descColumn,\n unitColumn,\n estimateColumn,\n biditemColumn,\n lastModifiedColumn\n];\nexport const utilizedColumns = [\n codebookCodeColumn,\n descColumn,\n levelColumn,\n timesUsedColumn,\n timesModifiedColumn\n];\nexport const utilizedDetailsColumns = [\n modificationColumn,\n codebookValueColumn,\n modifiedValueColumn,\n estimateColumn,\n biditemColumn,\n lastModifiedColumn\n];\n","import React, { useEffect, useState, useRef, useCallback } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { strings } from \"localization\";\nimport { useCodebooksContext } from \"../../context/CodebooksContext\";\nimport styled from \"styled-components\";\nimport { selectors, actions, UtilizedActivityCodebookCode } from \"../../state\";\nimport {\n Grid,\n Toolbar,\n SearchPanel,\n DragDropProvider,\n TableSelection,\n VirtualTable,\n Table,\n TableHeaderRow as TableHeaderRowDx\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport { Box } from \"hcss-core\";\nimport {\n IntegratedSorting,\n GroupingState,\n IntegratedGrouping,\n SearchState,\n AllRows,\n GroupKeys,\n ColumnReordering,\n ColumnResizing,\n ColumnVisibility,\n SortingState,\n TableGroupRow,\n TableHeaderRow,\n Root,\n OtherOptionsButton,\n TableContainer\n} from \"hcss-tables\";\nimport { ExtendedIntegratedFiltering } from \"modules/tables/search\";\nimport { StyledSelectionRow } from \"modules/tables/selection-table\";\nimport { PanelLoadingOverlay } from \"core\";\nimport ExportRows from \"modules/tables/plugins/export-rows\";\nimport { CustomColumnChooserModal } from \"modules/tables/column-chooser-modal\";\nimport { DateFormatProvider } from \"modules/tables/columns/column-providers\";\nimport { Icon, Link } from \"hcss-components\";\nimport {\n SectionHeader,\n SectionTitle,\n utilizedColumns,\n utilizedDetailsColumns,\n Timestamps\n} from \"./CodebooksShared\";\nimport { SelectionState, IntegratedSelection } from \"@devexpress/dx-react-grid\";\nimport { useLocalStorage } from \"hcss-hooks\";\nimport { SchemaViewFilter, SchemaFieldType } from \"api\";\nimport { selectors as schemaSelectors } from \"modules/schemas\";\nimport {\n FiltersNoView,\n FiltersNoViewProvider\n} from \"core/components/filters-noview\";\nimport { get, isEqual } from \"lodash-es\";\nimport { filterField } from \"modules/schemas/filters\";\nimport { CircularProgress, Grid as MuiGrid } from \"@mui/material\";\nimport { EmptyState } from \"core/components/empty-state\";\nimport { CodebooksIcon } from \"./CodebooksIcon\";\nimport { useSelectedBusinessUnitId } from \"modules/account\";\nimport LegacyVirtualTable from \"core/components/bundle-fixes/LegacyVirtualTable\";\nimport { LegacyGroupingPanel } from \"core/components/bundle-fixes/LegacyGroupingPanel\";\n\nexport const CodebooksUtilizedPage = () => {\n const dispatch = useDispatch();\n const codebooksFields = useSelector(\n schemaSelectors.getActivityCodebooksSchemaFields\n );\n const utilized = useSelector(selectors.getActivityCodebookUtilized);\n const businessUnitId = useSelectedBusinessUnitId();\n const [filters, setFilters] = useLocalStorage<\n Record\n >(`${businessUnitId}-codebooks-utilized-active-filters`, {});\n const {\n currentDivisionId,\n utilizedLoaded,\n setSelectedUtilizedCode\n } = useCodebooksContext();\n const [utilizedTableData, setUtilizedTableData] = useState<\n UtilizedActivityCodebookCode[]\n >([]);\n const [selection, _setSelection] = useState>([]);\n\n useEffect(() => {\n const filteredUtilized = Object.values(utilized).filter(activity => {\n if (activity.partitionId !== currentDivisionId) return false;\n const filterArray = Object.values(filters);\n //Map codebook so that the field keys match the schema (i.e. codebook.code)\n const mappedCodebookCode = {\n codebook: {\n ...activity\n }\n };\n for (const filter of filterArray) {\n const field = codebooksFields[filter.columnName];\n let value = get(mappedCodebookCode, filter.columnName);\n if (field.type === SchemaFieldType.ShortText) {\n value = value.trim();\n }\n if (!filterField(field.type, filter, value)) {\n return false;\n }\n }\n return true;\n });\n if (!isEqual(filteredUtilized, utilizedTableData)) {\n setUtilizedTableData(filteredUtilized);\n }\n }, [\n filters,\n utilized,\n currentDivisionId,\n utilizedTableData,\n codebooksFields\n ]);\n\n useEffect(() => {\n _setSelection([]);\n }, []);\n\n useEffect(() => {\n if (selection.length > 0 && currentDivisionId) {\n const selectedCode = utilized[selection[0]];\n if (selectedCode && selectedCode.timesModified > 0) {\n dispatch(\n actions.loadActivityCodebookUtilizedDetails.request({\n partitionId: currentDivisionId,\n activityCode: selectedCode.code\n })\n );\n }\n }\n if (utilizedLoaded) {\n setSelectedUtilizedCode(\n selection.length > 0 ? utilized[selection[0]].code : \"\"\n );\n } else {\n _setSelection([]);\n setSelectedUtilizedCode(\"\");\n }\n }, [\n currentDivisionId,\n dispatch,\n selection,\n setSelectedUtilizedCode,\n utilized,\n utilizedLoaded\n ]);\n\n if (!utilizedLoaded) {\n return ;\n }\n return (\n
\n \n \n \n \n {strings.estimates.codebooks.utilized.pageTitle}\n \n \n \n
\n {strings.estimates.codebooks.utilized.tip}\n
\n
\n \n \n \n
\n
\n \n \n \n
\n );\n};\ninterface CodebooksUtilizedTableProps {\n tableData: UtilizedActivityCodebookCode[];\n selection: (string | number)[];\n _setSelection: (s: (string | number)[]) => void;\n utilized: Record;\n}\nexport const CodebooksUtilizedTable = ({\n tableData,\n selection,\n _setSelection,\n utilized\n}: CodebooksUtilizedTableProps) => {\n const vtRef = useRef();\n const businessUnitId = useSelectedBusinessUnitId();\n\n const setSelection = (codes: Array) => {\n const prevSelected = codes.length > 1;\n const lastSelected = codes.find(\n selected => selection.indexOf(selected) === -1\n );\n if (lastSelected !== undefined) {\n _setSelection([lastSelected]);\n if (!prevSelected) {\n scrollToRow(lastSelected);\n }\n } else {\n _setSelection([]);\n }\n };\n\n const scrollToRow = useCallback(\n rowId => {\n vtRef.current.scrollToRow(rowId);\n },\n [vtRef]\n );\n\n const getPlaceholderText = () => {\n if (Object.values(utilized).length === 0) {\n return strings.estimates.codebooks.utilized.noUtilized;\n }\n return strings.estimates.codebooks.utilized.noMatchingFilters;\n };\n\n return (\n <>\n \n = 1 ? \"calc(25vh)\" : \"calc(100vh - 260px)\"}\n >\n {tableData.length <= 0 ? (\n \n \n \n }\n />\n ) : (\n \n r.id}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n {selection.length > 0 && utilized[selection[0]] && (\n \n )}\n \n );\n};\n\ninterface CodebooksUtilizedDetailsTableProps {\n utilizedCode: UtilizedActivityCodebookCode;\n _setSelection: (s: (string | number)[]) => void;\n}\n\nexport const CodebooksUtilizedDetailsTable = ({\n utilizedCode,\n _setSelection\n}: CodebooksUtilizedDetailsTableProps) => {\n const { utilizedDetailsLoaded } = useCodebooksContext();\n let utilizedDetails = useSelector(\n selectors.getActivityCodebookUtilizedDetails\n );\n if (!localStorage.getItem(\"Utilized Activity Details Table.sorting\")) {\n utilizedDetails = utilizedDetails.sort((a, b) => {\n if (!a.lastModified) return -1;\n if (!b.lastModified) return 1;\n if (a.lastModified < b.lastModified) return -1;\n if (a.lastModified > b.lastModified) return 1;\n if (a.estimate < b.estimate) return -1;\n if (a.estimate > b.estimate) return 1;\n return 0;\n });\n }\n\n const getNoDataMessage = () => {\n if (utilizedCode.timesModified === 0) {\n return strings.estimates.codebooks.utilized.noModifications;\n } else if (!utilizedDetailsLoaded) {\n return ;\n }\n return strings.estimates.codebooks.utilized.noMatchingSearch;\n };\n\n const noDataComponent = (rowProps: Table.RowProps) => {\n return (\n \n
\n \n );\n };\n\n return (\n \n \n _setSelection([])}>\n \n \n \n {`${strings.estimates.codebooks.utilized.pageTitle2} ${utilizedCode.code}`}\n \n \n \n 0 ? utilizedDetails : []}\n columns={utilizedDetailsColumns}\n rootComponent={Root}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst BackIcon = styled(Icon)`\n color: black;\n margin-right: 10px;\n`;\n\nexport const Section = styled(Box).attrs(() => ({ as: \"section\" }))`\n margin-bottom: 10px;\n @media print {\n & {\n page-break-inside: avoid;\n }\n }\n`;\n\nexport const BottomSection = styled(Section).attrs(() => ({ as: \"section\" }))`\n height: calc(60vh - 170px);\n`;\n","import React, { memo, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { strings } from \"localization\";\nimport { useCodebooksContext } from \"../../context/CodebooksContext\";\nimport { UnusedActivity } from \"../../state\";\nimport {\n Section,\n SectionHeader,\n SectionTitle,\n unusedColumns,\n Timestamps\n} from \"./CodebooksShared\";\n\nimport {\n Grid,\n Toolbar,\n SearchPanel,\n DragDropProvider\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport {\n IntegratedSorting,\n GroupingState,\n IntegratedGrouping,\n SearchState,\n AllRows,\n GroupKeys,\n ColumnReordering,\n ColumnResizing,\n ColumnVisibility,\n SortingState,\n TableGroupRow,\n TableHeaderRow,\n Root,\n OtherOptionsButton,\n TableContainer,\n TableWrapper\n} from \"hcss-tables\";\nimport { Grid as MuiGrid } from \"@mui/material\";\nimport { ExtendedIntegratedFiltering } from \"modules/tables/search\";\nimport { PanelLoadingOverlay } from \"core\";\nimport ExportRows from \"modules/tables/plugins/export-rows\";\nimport { CustomColumnChooserModal } from \"modules/tables/column-chooser-modal\";\nimport { DateFormatProvider } from \"modules/tables/columns/column-providers\";\nimport { useLocalStorage } from \"hcss-hooks\";\nimport { SchemaFieldType, SchemaViewFilter } from \"api\";\nimport { selectors as schemaSelectors } from \"modules/schemas\";\nimport {\n FiltersNoView,\n FiltersNoViewProvider\n} from \"core/components/filters-noview\";\nimport { get, isEqual } from \"lodash-es\";\nimport { filterField } from \"modules/schemas/filters\";\nimport { EmptyState } from \"core/components/empty-state\";\nimport { CodebooksIcon } from \"./CodebooksIcon\";\nimport { useSelectedBusinessUnitId } from \"modules/account\";\nimport LegacyVirtualTable from \"core/components/bundle-fixes/LegacyVirtualTable\";\nimport { LegacyGroupingPanel } from \"core/components/bundle-fixes/LegacyGroupingPanel\";\n\ninterface CodebooksUnusedPageProps {\n data: UnusedActivity[];\n}\n\nexport const CodebooksUnusedPage = memo(\n ({ data }: CodebooksUnusedPageProps) => {\n const businessUnitId = useSelectedBusinessUnitId();\n const { unusedLoaded } = useCodebooksContext();\n const codebooksFields = useSelector(\n schemaSelectors.getActivityCodebooksSchemaFields\n );\n\n const [unusedTableData, setUnusedTableData] = useState([\n ...data\n ]);\n const [filters, setFilters] = useLocalStorage<\n Record\n >(`${businessUnitId}-codebooks-unused-active-filters`, {});\n\n useEffect(() => {\n const filterArray = Object.values(filters);\n\n const filteredUnused = Object.values(data).filter(activity => {\n const mappedActivity = {\n codebook: {\n ...activity\n }\n };\n\n for (const filter of filterArray) {\n const field = codebooksFields[filter.columnName];\n let value = get(mappedActivity, filter.columnName);\n\n if (field.type === SchemaFieldType.ShortText) {\n value = value.trim();\n }\n\n if (!filterField(field.type, filter, value)) {\n return false;\n }\n }\n return true;\n });\n\n if (!isEqual(filteredUnused, unusedTableData)) {\n setUnusedTableData(filteredUnused);\n }\n }, [filters, data, unusedTableData, codebooksFields]);\n\n const getPlaceholderText = () => {\n if (data.length <= 0)\n return strings.estimates.codebooks.unused.noUnusedCodes;\n return strings.estimates.codebooks.unused.noMatchingFilters;\n };\n\n if (!unusedLoaded) {\n return ;\n }\n\n return (\n
\n
\n \n \n \n \n {strings.estimates.codebooks.unused.pageTitle}\n \n \n \n \n \n \n \n \n \n {unusedTableData.length <= 0 ? (\n \n \n
\n }\n />\n ) : (\n \n )}\n \n \n \n );\n }\n);\n\ninterface CodebooksUnusedTableProps {\n tableData: UnusedActivity[];\n}\n\nconst CodebooksUnusedTable = memo(\n ({ tableData }: CodebooksUnusedTableProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n);\n","import React, { memo, useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { strings } from \"localization\";\nimport { useCodebooksContext } from \"../../context/CodebooksContext\";\nimport { MissingActivity } from \"../../state\";\nimport {\n Section,\n SectionHeader,\n SectionTitle,\n missingColumns,\n Timestamps\n} from \"./CodebooksShared\";\n\nimport {\n Grid,\n Toolbar,\n SearchPanel,\n DragDropProvider\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport {\n IntegratedSorting,\n GroupingState,\n IntegratedGrouping,\n SearchState,\n AllRows,\n GroupKeys,\n ColumnReordering,\n ColumnResizing,\n ColumnVisibility,\n SortingState,\n TableGroupRow,\n TableHeaderRow,\n Root,\n OtherOptionsButton,\n TableContainer,\n TableWrapper\n} from \"hcss-tables\";\nimport { ExtendedIntegratedFiltering } from \"modules/tables/search\";\nimport { PanelLoadingOverlay } from \"core\";\nimport ExportRows from \"modules/tables/plugins/export-rows\";\nimport { CustomColumnChooserModal } from \"modules/tables/column-chooser-modal\";\nimport { DateFormatProvider } from \"modules/tables/columns/column-providers\";\nimport { useLocalStorage } from \"hcss-hooks\";\nimport { SchemaFieldType, SchemaViewFilter } from \"api\";\nimport { selectors as schemaSelectors } from \"modules/schemas\";\nimport {\n FiltersNoView,\n FiltersNoViewProvider\n} from \"core/components/filters-noview\";\nimport { get, isEqual } from \"lodash-es\";\nimport { filterField } from \"modules/schemas/filters\";\nimport { EmptyState } from \"core/components/empty-state\";\nimport { CodebooksIcon } from \"./CodebooksIcon\";\nimport { Grid as MuiGrid } from \"@mui/material\";\nimport { useSelectedBusinessUnitId } from \"modules/account\";\nimport LegacyVirtualTable from \"core/components/bundle-fixes/LegacyVirtualTable\";\nimport { LegacyGroupingPanel } from \"core/components/bundle-fixes/LegacyGroupingPanel\";\n\ninterface CodebooksMissingPageProps {\n data: MissingActivity[];\n}\n\nexport const CodebooksMissingPage = memo(\n ({ data }: CodebooksMissingPageProps) => {\n const { missingLoaded } = useCodebooksContext();\n const codebooksFields = useSelector(\n schemaSelectors.getActivityCodebooksSchemaFields\n );\n const [missingTableData, setMissingTableData] = useState(\n [...data]\n );\n const businessUnitId = useSelectedBusinessUnitId();\n const [filters, setFilters] = useLocalStorage<\n Record\n >(`${businessUnitId}-codebooks-missing-active-filters`, {});\n\n useEffect(() => {\n const filteredMissing = data.filter(activity => {\n const filterArray = Object.values(filters);\n //Map activity so that the field keys match the schema (i.e. activity.code)\n const mappedActivity = {\n activity: {\n ...activity\n }\n };\n\n for (const filter of filterArray) {\n const field = codebooksFields[filter.columnName];\n let value = get(mappedActivity, filter.columnName);\n\n if (field.type === SchemaFieldType.ShortText) {\n value = value.trim();\n }\n\n if (!filterField(field.type, filter, value)) {\n return false;\n }\n }\n return true;\n });\n\n if (!isEqual(filteredMissing, missingTableData)) {\n setMissingTableData(filteredMissing);\n }\n }, [filters, data, missingTableData, codebooksFields]);\n\n const getPlaceholderText = () => {\n if (data.length <= 0)\n return strings.estimates.codebooks.missing.noMissingActivities;\n return strings.estimates.codebooks.missing.noMatchingFilters;\n };\n\n if (!missingLoaded) {\n return ;\n }\n\n return (\n
\n
\n \n \n \n \n {strings.estimates.codebooks.missing.pageTitle}\n \n \n \n \n \n \n \n \n \n {missingTableData.length <= 0 ? (\n \n \n
\n }\n />\n ) : (\n \n )}\n \n \n \n );\n }\n);\n\ninterface CodebooksMissingTableProps {\n tableData: MissingActivity[];\n}\n\nconst CodebooksMissingTable = memo(\n ({ tableData }: CodebooksMissingTableProps) => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }\n);\n","import React, { useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport { strings } from \"localization\";\nimport {\n Button,\n Card,\n Grid as MuiGrid,\n Popover,\n Typography,\n styled\n} from \"@mui/material\";\nimport moment from \"moment\";\nimport { filterConstants } from \"modules/schemas/components/filters/common\";\nimport {\n ConcreteColors,\n OverlayTrigger,\n Select,\n Tooltip\n} from \"hcss-components\";\nimport { DateTimePicker } from \"core\";\nimport { actions } from \"../state\";\nimport { useCodebooksContext } from \"../context/CodebooksContext\";\nimport {\n CodebooksDateRange,\n GetDateValues\n} from \"../hooks/use-codebooks-daterange\";\nimport WarningAmberOutlinedIcon from \"@mui/icons-material/WarningAmberOutlined\";\nimport { createGlobalStyle } from \"styled-components\";\n\ninterface DateRangeDisplayProps {\n settings: CodebooksDateRange;\n onChange: (settings: CodebooksDateRange) => void;\n showOverflowIcon: boolean;\n}\nexport interface DateRangePickerProps {\n settings: CodebooksDateRange;\n onChange: (settings: CodebooksDateRange) => void;\n}\n\nconst rangeOptions: Array<{ label: string; value: string }> = [\n {\n label: strings.estimates.codebooks.datePicker.last3Months,\n value: filterConstants.dates.nowM3month\n },\n {\n label: strings.estimates.codebooks.datePicker.last6Months,\n value: filterConstants.dates.nowM6month\n },\n {\n label: strings.estimates.codebooks.datePicker.lastYear,\n value: filterConstants.dates.nowM365\n },\n {\n label: strings.estimates.codebooks.datePicker.custom,\n value: filterConstants.dates.custom\n }\n];\n\nexport const CodebooksDateRangeDisplay = ({\n settings,\n onChange,\n showOverflowIcon\n}: DateRangeDisplayProps) => {\n const [anchorEl, setAnchorEl] = useState(null);\n const [showPopover, setShowPopover] = useState(false);\n const [dateTouched, setDateTouched] = useState(false);\n const { currentDivisionId, selectedUtilizedCode } = useCodebooksContext();\n\n const dispatch = useDispatch();\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n setAnchorEl(e.currentTarget);\n setShowPopover(!showPopover);\n };\n\n const handleClose = (e: React.MouseEvent) => {\n e.stopPropagation();\n setAnchorEl(null);\n setShowPopover(false);\n if (dateTouched) {\n dispatch(actions.loadActivityCodebookMissing.request());\n dispatch(actions.loadActivityCodebookUtilized.request());\n if (currentDivisionId && selectedUtilizedCode !== \"\") {\n dispatch(\n actions.loadActivityCodebookUtilizedDetails.request({\n partitionId: currentDivisionId,\n activityCode: selectedUtilizedCode\n })\n );\n }\n dispatch(actions.loadActivityCodebookUnused.request());\n }\n setDateTouched(false);\n };\n\n const handleChange = (value: CodebooksDateRange) => {\n setDateTouched(true);\n onChange(value);\n };\n\n const dateValues = GetDateValues(settings);\n\n return (\n
\n \n \n \n {strings.estimates.codebooks.datePicker.title}\n \n \n \n \n \n \n {moment(dateValues.from).format(\"L\") ?? \"\"}\n {\" - \"}\n {moment(dateValues.to).format(\"L\") ?? \"\"}\n \n \n \n \n {showOverflowIcon && (\n \n \n \n \n \n )}\n \n ) =>\n handleClose(e)\n }\n anchorOrigin={{\n vertical: \"bottom\",\n horizontal: \"center\"\n }}\n transformOrigin={{\n vertical: \"top\",\n horizontal: \"center\"\n }}\n disableRestoreFocus\n >\n \n \n
\n );\n};\n\nconst DateRangePicker = ({ settings, onChange }: DateRangePickerProps) => {\n const options = rangeOptions;\n\n const setSelectedRangeOption = (value?: string) => {\n if (value && value in filterConstants.dates) {\n onChange({ ...settings, range: value });\n } else {\n onChange({ ...settings, range: filterConstants.dates.nowM6month });\n }\n };\n\n const includeTime = false;\n\n const updateLowerValue = (value: Date | undefined) => {\n onChange({\n ...settings,\n range: filterConstants.dates.custom,\n from: value?.toISOString()\n });\n };\n\n const updateUpperValue = (value: Date | undefined) => {\n onChange({\n ...settings,\n range: filterConstants.dates.custom,\n to: value?.toISOString()\n });\n };\n\n const values = GetDateValues(settings);\n\n return (\n \n \n o.value === settings.range)}\n onChange={opt => {\n const selectedOption = opt as {\n label: string;\n value: string;\n } | null;\n setSelectedRangeOption(selectedOption?.value ?? undefined);\n }}\n inputId=\"codebooks-datepicker-dropdown\"\n />\n \n \n \n \n \n -\n \n \n \n \n \n );\n};\n\nconst OverflowErrorIcon = () => {\n const tooltip = (\n \n \n {strings.estimates.codebooks.reportOverflow}\n \n );\n\n return (\n \n \n \n );\n};\n\nconst DateRangeDisplayButtonContainer = styled(Card)(\n ({ theme: { palette } }) => ({\n backgroundColor: palette.background.paper\n })\n);\n\nconst DateRangePickerPopover = styled(Popover)(() => ({\n \"& .MuiPopover-paper\": {\n overflow: \"initial\",\n borderRadius: \"12px\"\n }\n}));\n\nconst DateRangePickerContainer = styled(\"div\")`\n padding: 1rem 1.5rem;\n margin: 0.7rem;\n background-color: ${ConcreteColors.blue100};\n border-radius: 12px;\n`;\n\nconst RangeOptionsContainer = styled(\"div\")`\n margin: 8px 4px;\n`;\n\nconst DateTimeContainer = styled(\"div\")`\n display: flex;\n align-items: center;\n`;\n\nconst DateTimePickerContainer = styled(\"div\")`\n width: 150px;\n margin: 4px;\n`;\nconst DropdownLabel = styled(\"div\")`\n font-size: 14px;\n font-weight: 700;\n margin-right: 1rem;\n`;\nconst OverflowIconContainer = styled(\"div\")`\n margin-left: 1rem;\n display: flex;\n align-items: center;\n`;\nconst TooltipStyling = createGlobalStyle`\n .tooltip {\n background-color: ${ConcreteColors.gray600};\n margin: 0;\n border-radius: 7px;\n pointer-events:none;\n left:100;\n margin-left:50px;\n .tooltip-arrow {\n display: none;\n }\n \n .tooltip-inner {\n background-color: transparent;\n font-weight: 500;\n font-size: 13px;\n }\n }\n`;\n","import React, { useEffect } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { strings } from \"localization\";\nimport {\n PaneledPage,\n OverlayTrigger,\n Tooltip,\n ConcreteColors\n} from \"hcss-components\";\nimport styled, { createGlobalStyle } from \"styled-components\";\nimport { DropdownList } from \"react-widgets\";\nimport { selectors, HeavybidDivision } from \"../state\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\nimport { Grid as MuiGrid } from \"@mui/material\";\nimport { EmptyState } from \"core/components/empty-state\";\nimport { CodebooksLimitedView } from \"./codebooks/CodebooksLimitedView\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faBooks } from \"@fortawesome/pro-light-svg-icons\";\nimport { useCodebooksContext } from \"../context/CodebooksContext\";\nimport { CodebooksUtilizedPage } from \"./codebooks/CodebooksUtilizedTable\";\nimport { CodebooksUnusedPage } from \"./codebooks/CodebooksUnusedTable\";\nimport { CodebooksMissingPage } from \"./codebooks/CodebooksMissingTable\";\nimport { getExpertChatAvailability } from \"../../layout/components/navigation/top-navigation\";\nimport { CodebooksDateRangeDisplay } from \"./CodebooksDateRangeDisplay\";\nimport { useCodebooksDateRange } from \"../hooks/use-codebooks-daterange\";\nimport { useAuthorization } from \"modules/account\";\nimport { TextOverflow } from \"core\";\n\nexport enum ReportTypeEnum {\n Unused,\n Missing,\n Utilized\n}\nexport interface ReportTypeOption {\n name: string;\n type: ReportTypeEnum;\n description: string;\n}\nexport interface ReportTypeOptions {\n [key: string]: ReportTypeOption;\n}\nexport const reportTypeOptions: ReportTypeOptions = {\n Unused: {\n name: strings.estimates.codebooks.unused.subtitle,\n type: ReportTypeEnum.Unused,\n description: strings.estimates.codebooks.unused.text\n },\n Missing: {\n name: strings.estimates.codebooks.missing.subtitle,\n type: ReportTypeEnum.Missing,\n description: strings.estimates.codebooks.missing.text\n },\n Utilized: {\n name: strings.estimates.codebooks.utilized.subtitle,\n type: ReportTypeEnum.Utilized,\n description: strings.estimates.codebooks.utilized.text\n }\n};\n\nexport const CodebooksPage = () => {\n const auth = useAuthorization();\n const divisions = useSelector(selectors.getHeavybidDivisions);\n const divisionsLoaded = useSelector(selectors.getHeavybidDivisionsLoaded);\n const {\n currentDivisionId,\n setCurrentDivisionId,\n reportType,\n unusedData,\n missingData,\n setReportType,\n isCurrentReportOverflow,\n hasNoCodebooksData,\n unusedLoaded,\n utilizedLoaded\n } = useCodebooksContext();\n const { dateRange, setDateRange } = useCodebooksDateRange();\n const isFreeCompany =\n auth.canAccessLimitedPrecon && !auth.canAccessFullPrecon;\n useEffect(() => {\n let defaultDiv = divisions.find(\n d => d.partitionId === localStorage.getItem(\"codebooksSelectedDivision\")\n );\n defaultDiv = defaultDiv\n ? defaultDiv\n : divisions.length > 0\n ? divisions[0]\n : undefined;\n setCurrentDivisionId(defaultDiv?.partitionId);\n }, [divisions, setCurrentDivisionId]);\n\n const handleChange = (division: HeavybidDivision) => {\n setCurrentDivisionId(division.partitionId);\n localStorage.setItem(\"codebooksSelectedDivision\", division.partitionId);\n };\n const handleReportChange = (report: ReportTypeOption) =>\n setReportType(report);\n\n if (isFreeCompany) {\n return ;\n }\n if (!divisionsLoaded) {\n return ;\n }\n\n if (divisions.length === 0) {\n const chatAvailable = getExpertChatAvailability();\n return (\n window?.embedded_svc?.bootstrapEmbeddedService?.()}\n mainIcon={}\n />\n );\n }\n const renderTable = () => {\n if (utilizedLoaded && unusedLoaded && hasNoCodebooksData) {\n return (\n \n window.open(\n \"https://help.hcss.com/s/article/How-to-Send-HeavyBid-Data-to-Insights-for-KPIs\",\n \"_blank\",\n \"noopener,noreferrer\"\n )\n }\n mainIcon={}\n />\n );\n } else if (reportType.type === ReportTypeEnum.Unused) {\n return ;\n } else if (reportType.type === ReportTypeEnum.Missing) {\n return ;\n } else if (reportType.type === ReportTypeEnum.Utilized) {\n return ;\n }\n };\n const renderReportTypeOption = ({ item }: any) => (\n \n );\n const renderDivisionOption = ({ item }: any) => (\n \n );\n return (\n \n \n \n {strings.estimates.codebooks.title}\n \n \n \n \n \n \n \n \n \n {strings.estimates.codebooks.reportTitle}\n \n \n \n \n \n \n \n \n \n {strings.estimates.codebooks.division}\n \n \n d.partitionId === currentDivisionId\n )}\n data={divisions}\n textField=\"code\"\n valueField=\"divisionId\"\n onChange={handleChange}\n itemComponent={renderDivisionOption}\n disabled={divisions.length <= 1}\n />\n \n \n \n \n \n \n {renderTable()}\n \n );\n};\n\nexport const ReportTypeOptionItem = (props: ReportTypeOption) => {\n const { name, description } = props;\n const tool = (\n \n \n {description}\n \n );\n return (\n
\n \n
{name}
\n
\n
\n );\n};\n\nconst DivisionOptionItem = (props: HeavybidDivision) => {\n const { code, description } = props;\n\n const tooltip = (\n \n \n {description}\n \n );\n\n return (\n
\n \n
{code}
\n
\n
\n );\n};\n\nconst TooltipStyling = createGlobalStyle`\n .tooltip {\n background-color: ${ConcreteColors.gray600};\n margin: 0;\n border-radius: 7px;\n pointer-events:none;\n left:100;\n margin-left:50px;\n .tooltip-arrow {\n display: none;\n }\n \n .tooltip-inner {\n background-color: transparent;\n font-weight: 500;\n font-size: 13px;\n }\n }\n`;\n\nconst DropdownLabel = styled.div`\n font-size: 14px;\n font-weight: 700;\n margin-right: 1rem;\n`;\nconst StyledDropdownButtonContainer = styled.div`\n max-width: 20rem;\n min-width: 20rem;\n font-weight: normal;\n`;\nexport default CodebooksPage;\n","import { notify } from \"hcss-components\";\nimport React from \"react\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\nimport { isSandboxEnabled } from \"core/util/sandbox\";\n\nexport const save = (name: string) => {\n notify(\n \"success\",\n strings.formatString(strings.core.notifications.saved, name) as string\n );\n};\n\nexport const success = (name: string) => {\n notify(\"success\", name);\n};\n\nexport const add = (name: string) => {\n notify(\n \"success\",\n strings.formatString(strings.core.notifications.added, name) as string\n );\n};\n\nexport const error = (headline: string, description?: React.ReactChild) => {\n const body = isSandboxEnabled() ? (\n <>\n
{description}
\n \n Some features are disabled in sandbox mode.\n \n \n ) : (\n
\n {description}\n
\n );\n // @ts-ignore\n notify(\"danger\", headline, body);\n};\n\nexport const warning = (title: string, body: React.ReactChild) => {\n // @ts-ignore\n notify(\"warning\", title, body);\n};\n\nexport const remove = (name: string) => {\n notify(\n \"warning\",\n strings.formatString(strings.core.notifications.removed, name) as string\n );\n};\n\nexport default (\n type: \"success\" | \"info\" | \"warning\" | \"danger\",\n title: string,\n body?: string | string[] | React.ReactChild\n) => {\n if (Array.isArray(body)) {\n const Body = (\n <>\n {body.map((text: string, index) => (\n

\n {text}\n

\n ))}\n \n );\n // @ts-ignore\n notify(type, title, );\n }\n // @ts-ignore\n notify(type, title, body);\n};\n\nexport const NotificationBody = styled.div`\n display: flex;\n width: 300px;\n flex-direction: column;\n`;\n\nexport const NotificationFooter = styled.div`\n display: flex;\n justify-content: flex-start;\n margin-top: 20px;\n`;\n","import { Button, ConcreteColors, Icon } from \"hcss-components\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport Modal from \".\";\nimport { strings } from \"localization\";\n\nexport interface ConfirmBackProps {\n title?: string;\n children?: React.ReactNode;\n show: boolean;\n disabled?: boolean;\n handleSave?: () => void;\n handleClose: () => void;\n handleBack?: () => void;\n}\n\nexport default class ConfirmBack extends React.PureComponent {\n render() {\n const props = this.props;\n return (\n \n {props.children}\n \n );\n }\n footer = () => {\n return (\n
\n \n \n {strings.core.modals.confirmBack.discardButton}\n \n {this.props.handleSave && (\n \n \n {strings.core.modals.confirmBack.saveButton}\n \n )}\n \n
\n );\n };\n}\n\nconst CancelButton = styled(Button)`\n &.cancel {\n color: ${ConcreteColors.red200};\n background-color: #fff;\n border-color: ${ConcreteColors.red200};\n }\n &.cancel:hover,\n &.cancel:active,\n &.cancel:focus {\n color: ${ConcreteColors.red300};\n border-color: ${ConcreteColors.red300};\n background-color: ${ConcreteColors.red100};\n }\n`;\n","/* eslint-disable no-unexpected-multiline */\nimport styled from \"styled-components\";\nimport React, { FC, ComponentProps, useState, ReactNode } from \"react\";\nimport { Icon, ConcreteColors } from \"hcss-components\";\nimport { Box, BoxProps } from \"hcss-core\";\n\nexport const Section = styled(Box).attrs(() => ({ as: \"section\" }))`\n background-color: #fff;\n border-radius: 4px;\n padding: 20px 24px 24px 24px;\n margin-bottom: 32px;\n border-left: 4px solid transparent;\n\n @media print {\n & {\n page-break-inside: avoid;\n }\n }\n`;\n\nexport const SectionHeader = styled.div`\n padding-bottom: 20px;\n`;\n\nexport const SectionTitle = styled.h2`\n display: inline-block;\n margin: 2px 0 0 0;\n font-size: 1.2em;\n font-weight: 500;\n vertical-align: middle;\n`;\n\nexport const CollapsibleSectionHeader = styled(SectionHeader)<{\n expanded?: boolean;\n}>`\n display: flex;\n align-items: center;\n cursor: pointer;\n ${props => !props.expanded && \"padding-bottom: 0;\"}\n`;\n\nexport const CollapseIcon = styled(Icon).attrs(_ => ({\n name: \"chevron-right\"\n}))<{\n expanded: boolean;\n}>`\n transform: rotate(${props => (props.expanded ? \"90\" : \"0\")}deg);\n transition: all 0.2s ease 0s;\n align-self: center;\n margin-right: 12px;\n ${CollapsibleSectionHeader}:hover & {\n color: ${ConcreteColors.blue200};\n }\n`;\n\n// TODO: Update styled-components and styled-system so that we can get cleaner defs\nexport type CollapsibleSectionProps = {\n initialExpanded?: boolean;\n header: ReactNode;\n onToggle?: (isExpanded: boolean) => void;\n expanded?: boolean;\n} & Omit, \"ref\"> &\n BoxProps;\n\nexport const CollapsibleSection: FC = ({\n children,\n initialExpanded,\n onToggle,\n header,\n expanded,\n ...other\n}) => {\n const [_isExpanded, _setIsExpanded] = useState(initialExpanded ?? false);\n\n const isExpanded = expanded ?? _isExpanded;\n\n const setIsExpanded = () => {\n if (expanded === undefined) {\n _setIsExpanded(!isExpanded);\n }\n if (onToggle) onToggle(!isExpanded);\n };\n\n return (\n
\n \n \n {header}\n \n {isExpanded && (\n \n {children}\n \n )}\n
\n );\n};\n\nexport const CollapsibleSectionBody = styled.div<{ isExpanded?: boolean }>`\n display: ${props => (props.isExpanded ? \"block\" : \"none\")};\n height: 100%;\n\n @media print {\n & {\n display: block;\n }\n }\n`;\n\nexport const SectionList = styled.div`\n padding: 12px 16px;\n min-height: 100%;\n`;\n","import styled from \"styled-components\";\nimport { Box } from \"hcss-core\";\n\nexport const TextOverflow = styled(Box)`\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n`;\nexport const TextOverflowVertically = styled(Box)`\n overflow: hidden;\n text-overflow: ellipsis;\n flex: 1;\n display: -webkit-box;\n -webkit-box-orient: vertical;\n -webkit-line-clamp: 3;\n font-size: 1.05em;\n`;\n","import { SchemaField } from \"api\";\nimport { getFieldValueAsArray, sortValues } from \"core\";\nimport { strings } from \"localization\";\nimport { sortBy } from \"lodash-es\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport { Multiselect } from \"react-widgets\";\nimport styled from \"styled-components\";\nimport { SchemaFormFieldInputProps } from \"./common\";\n\nconst CLEAR_TEXT = strings.core.dropdown.clear;\ninterface MultiSelectListOption {\n display: string;\n value?: string;\n}\nexport interface MultiSelectFieldInputProps {\n schemaField: SchemaField;\n value?: string | string[];\n options?: MultiSelectListOption[];\n allowCreate?: boolean;\n autoFocus?: boolean;\n handleBlur?: React.FocusEventHandler;\n hasErrors?: boolean;\n handleChange: (data: string[]) => void;\n addFieldValue?: (value: string) => void;\n disabled?: boolean;\n keepInvalidValues?: boolean;\n}\n\nexport const MultiSelectFieldInput = (props: MultiSelectFieldInputProps) => {\n const options =\n props.options ??\n (props.schemaField.config.listValues as MultiSelectListOption[]);\n const {\n schemaField,\n value,\n allowCreate,\n handleBlur,\n handleChange,\n addFieldValue,\n autoFocus,\n disabled,\n hasErrors,\n keepInvalidValues\n } = props;\n\n const sortedValue = useMemo(\n () =>\n sortValues(\n getFieldValueAsArray(value ?? []),\n options,\n schemaField.config.customSort\n ),\n [options, schemaField.config.customSort, value]\n );\n\n const displayOptions = useMemo(() => {\n let data = options;\n if (!schemaField.config.customSort) {\n data = sortBy(data, opt => opt.display.toLocaleLowerCase());\n }\n\n if (value?.length) {\n data = data.concat([{ display: CLEAR_TEXT }]);\n }\n\n return data;\n }, [options, schemaField.config.customSort, value]);\n\n useEffect(() => {\n if (keepInvalidValues || allowCreate || !value?.length) {\n return;\n }\n\n const selectedValues: string[] = [];\n\n if (Array.isArray(value)) {\n selectedValues.push(...value);\n } else {\n selectedValues.push(value);\n }\n\n const existSelectedOptions = selectedValues.filter(v =>\n options.find(o => o.value === v)\n );\n\n if (existSelectedOptions.length !== selectedValues.length) {\n handleChange(existSelectedOptions);\n }\n }, [options, allowCreate, value, handleChange, keepInvalidValues]);\n\n const onChange = useCallback(\n (dataItems: (MultiSelectListOption | string)[]) => {\n // display property can be undefined if user changed List Values in project setups\n let selectedValues = dataItems.map(item =>\n typeof item === \"string\" ? item : item.display\n );\n if (selectedValues.includes(CLEAR_TEXT)) {\n handleChange([]);\n return;\n }\n\n selectedValues = sortValues(\n selectedValues,\n options,\n schemaField.config.customSort\n );\n\n handleChange(selectedValues);\n },\n [handleChange]\n );\n\n return (\n \n \n \n );\n};\n\nexport interface MultiSelectListInputState {\n readonly options: MultiSelectListOption[];\n}\n\nexport const MultiSelectListInput: React.FC = ({\n form,\n field,\n schemaField,\n autoFocus\n}) => {\n const [options, setOptions] = useState(\n schemaField.config.listValues\n );\n\n const allowCreate = schemaField.config?.dynamic ?? false;\n\n const handleBlur = () => {\n form.setFieldTouched(field.name, true);\n };\n\n const handleChange = (selectedValues: string[]) => {\n form.setFieldValue(field.name, selectedValues);\n };\n\n const addFieldValue = (newValue: string) => {\n if (newValue && newValue.trim() !== \"\") {\n newValue = newValue.trimEnd();\n const includesValue = options.some(option => {\n return option.value?.toLowerCase() === newValue.toLowerCase();\n });\n const selectedValues = options.some(value => {\n return newValue.toLowerCase() === value.display.toLowerCase();\n });\n if (includesValue && selectedValues) return;\n\n const newOptions = [...options, { display: newValue, newValue }];\n if (!includesValue) setOptions(newOptions);\n if (!selectedValues) {\n let newFieldValue = [\n ...getFieldValueAsArray(form.values[field.name]),\n newValue\n ];\n newFieldValue = sortValues(\n newFieldValue,\n newOptions,\n schemaField.config.customSort\n );\n form.setFieldValue(field.name, newFieldValue);\n }\n }\n };\n\n return (\n \n );\n};\n\nexport default MultiSelectListInput;\n\nexport const DropdownContainer = styled.div<{ hasErrors?: boolean }>`\n & .rw-widget-input {\n height: 34px;\n ${props => (props.hasErrors ? \"border: 1px solid #a94442;\" : \"\")};\n }\n & .rw-multiselect-taglist {\n display:inline;\n }\n & .rw-input-reset {\n display: inline-block;\n }\n & .rw-widget-container {\n & div {\n display: inline-block;\n }\n }\n}\n\n`;\n","import constate from \"constate\";\nimport { useState, useEffect, useMemo } from \"react\";\nimport { useCurrentEstimateContext } from \"../../estimates/context/CurrentEstimateContext\";\nimport { useHcssToken, useHcssUser } from \"modules/account\";\nimport { VendorSolicitationRepo } from \"../repository/vendor-solicitation-repo\";\nimport { MasterSolicitationRepo } from \"../repository/master-solicitation-repo\";\nimport { onSnapshot } from \"firebase/firestore\";\n\nimport {\n VendorSolicitationStatus,\n VendorSolicitationEntity,\n MasterSolicitationEntity\n} from \"core\";\nimport { EstimateHistoryApi } from \"api/EstimateHistoryApi\";\nimport { EstimateSyncStatusDto } from \"api/GeneratedClients/EstimateHistoryClient\";\n\nexport interface SolicitationContext {\n outboundVendorSolicitations: VendorSolicitationEntity[];\n inboundVendorSolicitations: VendorSolicitationEntity[];\n masterSolicitations: MasterSolicitationEntity[];\n outboundNewSolicitationCount: number;\n loading: boolean;\n estimatesSyncStatus: EstimateSyncStatusDto[];\n}\nconst useSolicitations = (): SolicitationContext => {\n const master = useMasterSolicitations();\n const outbound = useOutboundSolicitations();\n const inbound = useInboundSolicitations();\n const accessToken = useHcssToken();\n const [estimatesSyncStatus, setEstimatesSyncStatus] = useState<\n EstimateSyncStatusDto[]\n >([]);\n\n async function getEstimatesSyncStatus() {\n const api = new EstimateHistoryApi(accessToken);\n try {\n const syncStatus = await api.quoteMasters_GetEstimatesPriceSyncStatus();\n setEstimatesSyncStatus(syncStatus);\n return syncStatus;\n } catch (error) {\n console.error(error);\n }\n }\n\n useEffect(() => {\n void getEstimatesSyncStatus();\n }, []);\n\n const outboundNewSolicitationCount = useMemo(\n () =>\n outbound.solicitations.filter(\n v => v.status === VendorSolicitationStatus.SentToGC\n ).length,\n [outbound.solicitations]\n );\n\n return {\n outboundNewSolicitationCount,\n estimatesSyncStatus,\n outboundVendorSolicitations: outbound.solicitations,\n inboundVendorSolicitations: inbound.solicitations,\n masterSolicitations: master.solicitations,\n loading: outbound.loading || inbound.loading || master.loading\n };\n};\n\nconst useMasterSolicitations = () => {\n const { companyId } = useHcssUser();\n const { currentEstimateId } = useCurrentEstimateContext();\n const [loading, setLoading] = useState(false);\n const [solicitations, setSolicitations] = useState<\n MasterSolicitationEntity[]\n >([]);\n\n useEffect(() => {\n const subscribe = () => {\n setLoading(true);\n\n const q = MasterSolicitationRepo.subscribe(companyId, currentEstimateId);\n const unsubscribe = onSnapshot(\n q,\n snapshots => {\n const results: any[] = [];\n snapshots.forEach(doc => results.push({ ...doc.data(), id: doc.id }));\n setSolicitations(results);\n setLoading(false);\n },\n error => {\n console.error(error);\n setLoading(false);\n }\n );\n\n return () => unsubscribe();\n };\n\n if (companyId) return subscribe();\n }, [companyId, currentEstimateId]);\n\n return {\n loading,\n solicitations\n };\n};\n\nconst useOutboundSolicitations = () => {\n const { companyId } = useHcssUser();\n const { currentEstimateId } = useCurrentEstimateContext();\n const [loading, setLoading] = useState(false);\n const [solicitations, setSolicitations] = useState<\n VendorSolicitationEntity[]\n >([]);\n\n useEffect(() => {\n const subscribe = () => {\n setLoading(true);\n\n const q = VendorSolicitationRepo.getOutboundSubscription(\n companyId,\n currentEstimateId\n );\n const unsubscribe = onSnapshot(\n q,\n snapshots => {\n const results: any[] = [];\n snapshots.forEach(doc => results.push({ ...doc.data(), id: doc.id }));\n setSolicitations(results);\n setLoading(false);\n },\n error => {\n console.error(error);\n setLoading(false);\n }\n );\n\n return () => unsubscribe();\n };\n\n if (companyId) return subscribe();\n }, [companyId, currentEstimateId]);\n\n return {\n loading,\n solicitations\n };\n};\n\nconst useInboundSolicitations = () => {\n const { companyId } = useHcssUser();\n const { currentEstimateId } = useCurrentEstimateContext();\n const [loading, setLoading] = useState(false);\n const [solicitations, setSolicitations] = useState<\n VendorSolicitationEntity[]\n >([]);\n\n useEffect(() => {\n const subscribe = () => {\n setLoading(true);\n\n const q = VendorSolicitationRepo.getInboundSubscription(companyId);\n const unsubscribe = onSnapshot(\n q,\n snapshots => {\n const results: any[] = [];\n snapshots.forEach(doc => results.push({ ...doc.data(), id: doc.id }));\n setSolicitations(results);\n setLoading(false);\n },\n error => {\n console.error(error);\n setLoading(false);\n }\n );\n\n return () => unsubscribe();\n };\n\n if (companyId) return subscribe();\n }, [companyId, currentEstimateId]);\n\n return {\n loading,\n solicitations\n };\n};\n\nconst [provider, context] = constate(useSolicitations);\nexport const SolcitationProvider = provider;\nexport const useSolicitationContext = context;\n","import { Button, Icon } from \"hcss-components\";\nimport * as React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { paths } from \"../views/paths\";\nimport { strings } from \"localization\";\n\n// this is for creating an \"empty\" id new project (that is only used for front-end local) when clicking on the ADD PROJECT button\n// on the projects table page. The reason we need this is because the field metadata (used for lockable field)\n// required the project to have an ID to work properly\n\nexport const LOCAL_PROJECT_ID = \"local-new-project\";\nexport const AddProjectButton = () => {\n return (\n \n \n \n );\n};\n","import { Select } from \"hcss-components\";\nimport { keyBy } from \"lodash-es\"\nimport * as React from \"react\";\nimport { FilterControlProps } from \"./common\";\n\nconst booleanOptions: any[] = [\n { label: \"Checked\", value: \"true\" },\n { label: \"Not Checked\", value: \"false\" }\n];\nconst booleanOptionsLookup = keyBy(booleanOptions, \"value\");\n\nexport const BooleanFilter: React.FunctionComponent = ({\n field,\n filter,\n onChange\n}) => {\n const currentValue =\n filter.value !== undefined ? booleanOptionsLookup[filter.value] : null;\n return (\n
\n {\n let value: boolean | undefined;\n if (option) {\n value = option.value === \"true\";\n }\n onChange({\n ...filter,\n value\n });\n }}\n options={booleanOptions}\n />\n
\n );\n};\n","import { Select } from \"hcss-components\";\nimport { keyBy } from \"lodash-es\"\nimport * as React from \"react\";\nimport { FilterControlProps } from \"./common\";\n\nconst checklistFilterOptions: any[] = [\n { label: \"Complete\", value: \"true\" },\n { label: \"Incomplete\", value: \"false\" }\n];\nconst checklistFilterLookup = keyBy(checklistFilterOptions, \"value\");\n\nexport const ChecklistFilter: React.FunctionComponent = ({\n field,\n filter,\n onChange\n}) => {\n const currentValue =\n filter.value !== undefined ? checklistFilterLookup[filter.value] : null;\n return (\n
\n {\n let value: boolean | undefined;\n if (option) {\n value = option.value === \"true\";\n }\n onChange({\n ...filter,\n value\n });\n }}\n options={checklistFilterOptions}\n />\n
\n );\n};\n","import React, { useMemo } from \"react\";\nimport moment from \"moment\";\nimport styled from \"styled-components\";\nimport { Select } from \"hcss-components\";\nimport { keyBy } from \"lodash-es\";\nimport { DateTimePicker } from \"core\";\nimport { filterConstants, FilterControlProps } from \"./common\";\nimport { calculateValuesFromRange } from \"./dateTimeUtils\";\n\nconst rangeOptions: Array<{ label: string; value: string }> = [\n { label: \"Last 7 Days\", value: filterConstants.dates.nowM7 },\n { label: \"Next 7 Days\", value: filterConstants.dates.nowP7 },\n { label: \"Last 30 Days\", value: filterConstants.dates.nowM30 },\n { label: \"Next 30 Days\", value: filterConstants.dates.nowP30 },\n { label: \"Last Year\", value: filterConstants.dates.nowM365 },\n { label: \"Next Year\", value: filterConstants.dates.nowP365 },\n { label: \"Custom\", value: filterConstants.dates.custom }\n];\nconst rangeOptionsLookup = keyBy(rangeOptions, \"value\") as {\n [key: string]: { label: string; value: string };\n};\n\nexport const DateTimeFilter = ({ filter, onChange }: FilterControlProps) => {\n const options = useMemo(\n () =>\n rangeOptions.filter(\n opt => filter.config?.allowedOptions.includes(opt.value) ?? true\n ),\n [filter.config]\n );\n const allowCustom =\n options.find(opt => opt.value === filterConstants.dates.custom) !==\n undefined;\n\n const setSelectedRangeOption = (value?: string) => {\n if (value && value in filterConstants.dates) {\n onChange({\n ...filter,\n value: { range: filterConstants.dates[value] }\n });\n } else {\n onChange({\n ...filter,\n value: undefined\n });\n }\n };\n\n const includeTime = false;\n\n const normalizeDate = (\n value: Date | undefined,\n start: boolean\n ): string | undefined => {\n if (!value) {\n return undefined;\n }\n const date = moment(value);\n const unit = includeTime ? \"minute\" : \"day\";\n\n if (start) {\n date.startOf(unit);\n } else {\n date.endOf(unit);\n }\n\n return value.toISOString();\n };\n\n const updateLowerValue = (value: any) => {\n onChange({\n ...filter,\n value: {\n ...filter.value,\n range: filterConstants.dates.custom,\n from: normalizeDate(value, true)\n }\n });\n };\n\n const updateUpperValue = (value: any) => {\n onChange({\n ...filter,\n value: {\n ...filter.value,\n range: filterConstants.dates.custom,\n to: normalizeDate(value, false)\n }\n });\n };\n\n const values = {\n range:\n filter.value && filter.value.range && filter.value.range\n ? rangeOptionsLookup[filter.value.range]\n : undefined,\n from:\n filter.value && filter.value.from\n ? moment(filter.value.from).toDate()\n : undefined,\n to:\n filter.value && filter.value.to\n ? moment(filter.value.to).toDate()\n : undefined\n };\n\n const calcValuesFromRange =\n values.range?.value !== filterConstants.dates.custom;\n\n if (calcValuesFromRange && values.range) {\n const calculatedValues = calculateValuesFromRange(values.range.value);\n values.from = calculatedValues?.from.toDate();\n values.to = calculatedValues?.to.toDate();\n }\n\n return (\n
\n \n {\n const selectedOption = opt as {\n label: string;\n value: string;\n } | null;\n setSelectedRangeOption(selectedOption?.value ?? undefined);\n }}\n />\n \n\n {allowCustom && (\n \n \n \n \n -\n \n \n \n \n )}\n
\n );\n};\n\nconst RangeOptionsContainer = styled.div<{ allowCustom?: boolean }>`\n margin: ${props => (props.allowCustom ? \"8px 4px\" : 0)};\n`;\n\nconst DateTimeContainer = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst DateTimePickerContainer = styled.div`\n width: 150px;\n margin: 4px;\n`;\n","import { Select } from \"hcss-components\";\nimport * as React from \"react\";\nimport {\n FilterOperation,\n SchemaFieldType,\n SchemaViewFilter\n} from \"../../../../api\";\nimport {\n allFilterOperations,\n defaultFilterOperation,\n filterOptionLookup\n} from \"./common\";\n\nexport interface FilterTypeSelectProps {\n type: SchemaFieldType;\n filter: SchemaViewFilter;\n onChange: (filterOperation: FilterOperation) => any;\n}\n\nexport const FilterTypeSelect: React.FunctionComponent = ({\n type,\n filter,\n onChange\n}) => {\n const options = React.useMemo(\n () => allFilterOperations.filter(option => option.types.includes(type)),\n [type]\n );\n\n const value =\n filter.filterOperation || filter.filterOperation === 0\n ? filter.filterOperation\n : defaultFilterOperation[type];\n\n return (\n
\n {\n onChange(Number(value));\n }}\n options={options}\n />\n
\n );\n};\n","import { Select } from \"hcss-components\";\nimport * as React from \"react\";\nimport { SchemaFieldType } from \"../../../../api\";\nimport { statesObjectList } from \"../../../../core/util/states\";\nimport { FilterControlProps } from \"./common\";\nimport { intersection, sortBy } from \"lodash-es\";\nimport styled from \"styled-components\";\nimport { useSelector } from \"react-redux\";\nimport { selectors as contactsSelector } from \"modules/contacts\";\n\nexport const ListFilter: React.FunctionComponent = ({\n field,\n filter,\n onChange\n}) => {\n const vendorList = useSelector(contactsSelector.getVendorListSortedByCode);\n const vendorDataOptions = useSelector(\n contactsSelector.getVendorListSortedByCode\n );\n let options: any[] = [];\n if (field.type === SchemaFieldType.States) {\n options = statesObjectList;\n } else if (field.type === SchemaFieldType.Company) {\n const allOptions = vendorList.map(vendor => {\n return { value: vendor.code, display: vendor.code, type: vendor.type };\n });\n if (field.config.filterEnabled && field.config.filters.length > 0) {\n options = allOptions.filter(op => {\n return field.config.filters.includes(op.type?.code);\n });\n } else {\n options = allOptions;\n }\n } else if (field.type === SchemaFieldType.Contact) {\n options = [];\n vendorDataOptions.forEach(vendor => {\n const contacts = vendor.contacts.map(contact => {\n return {\n display: `${contact.firstName} ${contact.lastName} [${vendor.name}]`,\n value: contact.id,\n products: contact.products\n };\n });\n options = options.concat(contacts);\n });\n if (field.config.filterEnabled && field.config.filters.length > 0) {\n options = options.filter(op => {\n if (!op.products || op.products.length === 0) return false;\n return (\n intersection(\n field.config.filters,\n op.products.map((p: any) => p.productTypeId)\n ).length > 0\n );\n });\n }\n } else {\n options = field.config.listValues;\n if (!field.config.customSort) {\n options = sortBy(options, opt => opt.display.toLocaleLowerCase());\n }\n }\n\n return (\n \n {\n onChange({\n ...filter,\n value: value && value.length ? value : undefined\n });\n }}\n getOptionLabel={(option: any) => option.display}\n options={options}\n />\n \n );\n};\n\nconst SelectContainer = styled.div`\n width: 400px;\n max-width: 500px;\n flex-grow: 1;\n`;\n","import numeral from \"numeral\";\nimport * as React from \"react\";\nimport MaskedInput from \"react-text-mask\";\nimport styled from \"styled-components\";\nimport createNumberMask from \"text-mask-addons/dist/createNumberMask\";\nimport { SchemaFieldType } from \"../../../../api\";\nimport { FilterControlProps } from \"./common\";\nimport { strings } from \"../../../../localization\";\nimport { formatPercent } from \"core\";\n\nexport const NumberFilter: React.FunctionComponent = ({\n field,\n filter,\n onChange\n}) => {\n const isCurrency = field.type === SchemaFieldType.Currency;\n const isPercentage = field.config?.showAsPercent;\n\n const numberMask = React.useMemo(\n () =>\n createNumberMask({\n allowDecimal: true,\n allowNegative: true,\n prefix: isCurrency ? \"$\" : \"\",\n suffix: isPercentage ? \"%\" : \"\",\n decimalLimit: isCurrency || isPercentage ? 2 : 5,\n integerLimit: 10,\n allowLeadingZeroes: true\n }),\n [isCurrency]\n );\n\n const handleInputChange = (e: any) => {\n e.persist();\n const value: string = e.target.value;\n const numberValue = numeral(value).value();\n return value.trim() !== \"\" && !isNaN(numberValue) ? numberValue : undefined;\n };\n\n const updateLowerValue = (value: number | undefined) => {\n onChange({\n ...filter,\n value: { ...filter.value, from: value }\n });\n };\n\n const updateUpperValue = (value: number | undefined) => {\n onChange({\n ...filter,\n value: { ...filter.value, to: value }\n });\n };\n\n const values = {\n from:\n filter.value && (filter.value.from || filter.value.from === 0)\n ? filter.value.from\n : \"\",\n to:\n filter.value && (filter.value.to || filter.value.to === 0)\n ? filter.value.to\n : \"\"\n };\n if (isPercentage) {\n values.from = formatPercent(values.from);\n values.to = formatPercent(values.to);\n }\n\n return (\n
\n \n \n {\n const value = handleInputChange(e);\n updateLowerValue(value);\n }}\n mask={numberMask}\n placeholder={strings.core.filters.numMin}\n />\n \n\n -\n\n \n {\n const value = handleInputChange(e);\n updateUpperValue(value);\n }}\n mask={numberMask}\n placeholder={strings.core.filters.numMax}\n />\n \n \n
\n );\n};\n\nconst NumberFilterContainer = styled.div`\n display: flex;\n align-items: center;\n`;\n\nconst NumberInputContainer = styled.div`\n width: 150px;\n margin: 4px;\n`;\n","import * as React from \"react\";\nimport { Creatable } from \"hcss-components\";\nimport { FilterControlProps } from \"./common\";\nimport { strings } from \"localization\";\nimport styled from \"styled-components\";\n\nconst components = {\n DropdownIndicator: null\n};\n\nconst createOption = (label: string) => ({\n label,\n value: label\n});\n\nexport interface CreatableSelectProps {\n onChange: any;\n value: any;\n placeholder?: string;\n}\n\nexport const CreatableSelect: React.FunctionComponent = ({\n onChange,\n value,\n placeholder = strings.core.filters.textPlaceholder\n}) => {\n const [inputValue, setInputValue] = React.useState(\"\");\n // const [value, setValue] = React.useState<\n // Array<{ label: string; value: string }>\n // >([]);\n\n const handleKeyDown = (event: any) => {\n if (!inputValue) return;\n switch (event.key) {\n case \"Enter\":\n case \"Tab\":\n handleChange([...value, createOption(inputValue)]);\n setInputValue(\"\");\n event.preventDefault();\n }\n };\n\n const handleChange = (value: any) => {\n onChange(value);\n };\n\n return (\n
\n setInputValue(newValue)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n value={value}\n />\n
\n );\n};\n\nexport const TextFilter: React.FunctionComponent = ({\n filter,\n onChange\n}) => {\n const value = filter.value && Array.isArray(filter.value) ? filter.value : [];\n return (\n \n {\n onChange({\n ...filter,\n value: value && value.length ? value : undefined\n });\n }}\n />\n \n );\n};\n\nconst SelectContainer = styled.div`\n width: 400px;\n max-width: 800px;\n flex-grow: 1;\n word-wrap: break-word;\n`;\n","import * as React from \"react\";\nimport { FilterControlProps } from \"./common\";\nimport styled from \"styled-components\";\nimport { parsePreConId, preconIdToString } from \"modules/projects\";\nimport { CreatableSelect } from \"./TextFilter\";\n\nexport const ProjectIdFilter: React.FunctionComponent = ({\n filter,\n onChange\n}) => {\n const value =\n filter.value?.map((filter: any) => ({\n label: filter.label,\n value: preconIdToString(filter.value)\n })) ?? [];\n return (\n \n {\n const value = val.map((item: any) => ({\n label: item.label,\n value: parsePreConId(item.value)\n }));\n onChange({\n ...filter,\n value: value && value.length ? value : undefined\n });\n }}\n />\n \n );\n};\n\nconst SelectContainer = styled.div`\n width: 400px;\n max-width: 800px;\n flex-grow: 1;\n word-wrap: break-word;\n`;\n","import React, { useCallback, ElementType } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport styled from \"styled-components\";\nimport { SchemaFieldType } from \"../../../../api\";\nimport { BooleanFilter } from \"./BooleanFilter\";\nimport { ChecklistFilter } from \"./ChecklistFilter\";\nimport { FilterControlProps } from \"./common\";\nimport { DateTimeFilter } from \"./DateTimeFilter\";\nimport { FilterTypeSelect } from \"./FilterTypeSelect\";\nimport { ListFilter } from \"./ListFilter\";\nimport { NumberFilter } from \"./NumberFilter\";\nimport { TextFilter } from \"./TextFilter\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { isFilterActive } from \"../../filters\";\nimport { selectors as accountSelectors } from \"modules/account\";\nimport { ProjectIdFilter } from \"./ProjectIdFilter\";\nimport { calculatedFieldService } from \"modules/schemas/services/calculated-field.service\";\n\nexport const SchemaFieldFilter = (props: FilterControlProps) => {\n const hasEstimateInsightsAccess = useSelector(accountSelectors.getPermissions)\n ?.estimateInsights;\n const {\n filter,\n field: { type, name, id },\n onChange\n } = props;\n const onChangeFilter = useCallback(\n selectedValue => {\n onChange({\n ...filter,\n filterOperation: selectedValue\n });\n },\n [filter, onChange]\n );\n const calculatedFieldsWithEstimates =\n type === SchemaFieldType.Calculated &&\n calculatedFieldService.hasEstimatesVariables(\n calculatedFieldService.getConfig(props.field)\n );\n const canUseFilter =\n hasEstimateInsightsAccess ||\n (!id.includes(\"values.totals\") &&\n !id.includes(\"values.customTotals\") &&\n !calculatedFieldsWithEstimates);\n const showFilterTypeSelect =\n type !== SchemaFieldType.Boolean &&\n type !== SchemaFieldType.Date &&\n type !== SchemaFieldType.DateTime &&\n type !== SchemaFieldType.Number &&\n type !== SchemaFieldType.Checklist &&\n type !== SchemaFieldType.Currency &&\n type !== SchemaFieldType.Calculated;\n\n return (\n e.stopPropagation()}\n isActive={isFilterActive({ ...filter, fieldType: type })}\n canUseFilter={canUseFilter}\n data-testid={`schema-field-filter-${name}`}\n >\n \n \n \n {showFilterTypeSelect && (\n \n )}\n \n \n \n \n );\n};\n\nexport interface SchemaFieldFilterControlProps extends FilterControlProps {\n overrides?: Record>;\n}\n\nexport const SchemaFieldFilterControl = (\n props: SchemaFieldFilterControlProps\n) => {\n const { field, overrides } = props;\n\n if (overrides && field.id in overrides) {\n const Component = overrides[field.id];\n return ;\n }\n\n switch (field.type) {\n case SchemaFieldType.ShortText:\n case SchemaFieldType.LongText:\n case SchemaFieldType.Links:\n return ;\n case SchemaFieldType.Checklist:\n return ;\n case SchemaFieldType.Number:\n case SchemaFieldType.Currency:\n case SchemaFieldType.Calculated:\n return ;\n case SchemaFieldType.List:\n case SchemaFieldType.MultiSelectList:\n case SchemaFieldType.States:\n case SchemaFieldType.Company:\n case SchemaFieldType.Contact:\n return ;\n case SchemaFieldType.Boolean:\n return ;\n case SchemaFieldType.Date:\n case SchemaFieldType.DateTime:\n return ;\n case SchemaFieldType.PreConId:\n return ;\n default:\n return null;\n }\n};\n\nconst FilterContainer = styled.div<{\n isActive?: boolean;\n canUseFilter?: boolean;\n}>`\n padding: 1rem 1.5rem;\n margin: 0.7rem;\n background-color: ${props =>\n !props.canUseFilter\n ? \"#DB1010\"\n : props.isActive\n ? ConcreteColors.blue100\n : \"#f6f6f6\"};\n border-radius: 12px;\n`;\n\nconst FilterHeader = styled.div`\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 16px;\n`;\n\nconst FilterOptionsContainer = styled.div`\n width: 160px;\n margin-left: 24px;\n`;\n","import { ProjectPayItem } from \"modules/projects/models\";\nimport { FilterOperation } from \"api\";\n\nexport interface PayItemFilter {\n fieldName: string;\n filterOperation: FilterOperation;\n values: string[];\n}\n\nexport interface PayItemSource {\n type: QuickPricingSourceOptions;\n payItemLibraryId: string;\n filters?: PayItemFilter[];\n}\nexport interface PayItemAverages {\n unitPrice: number;\n unitCost?: number;\n lowUnitPrice?: number;\n highUnitPrice?: number;\n lowUnitCost?: number;\n highUnitCost?: number;\n}\n\nexport interface PayItemInfo {\n code: string;\n description: string;\n unit: string;\n averages: PayItemAverages;\n}\nexport interface QuickPriceSheetCreateDto {\n payItemSource: PayItemSource;\n projectPayItems: ProjectPayItem[];\n linkedProjectId: string;\n}\nexport interface QuickPriceSheetReadDto {\n id: string;\n payItemSource: PayItemSource;\n projectPayItems: ProjectPayItem[];\n linkedProjectId: string;\n lastModifiedByUserId: string;\n lastModified: Date;\n dateCreated: Date;\n businessUnitId: string;\n deleted: boolean;\n}\n\nexport enum QuickPricingSourceOptions {\n None = 0,\n PayItemLibrary = 1,\n EstimateHistory = 2\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { CompanyAvatar, UserAvatar } from \"../../../core/components/avatar\";\nimport { PhoneNumber, WebAddress } from \"./vendor-details\";\n\ninterface ContactPopoverProps {\n name: string;\n email?: string;\n id?: string;\n companyName?: string;\n className: string;\n style: React.CSSProperties;\n setShow?: React.Dispatch>;\n}\n//props come from parents without className and style, cannot assign ContactPopoverProps directly\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const ContactPopover = (props: any) => {\n const {\n name,\n email,\n className,\n style,\n id,\n companyName,\n setShow\n } = props as ContactPopoverProps;\n const classes = email ? \"\" : \"email-danger\";\n\n return (\n {\n if (setShow) {\n setShow(false);\n e.stopPropagation();\n }\n }}\n >\n
\n
\n \n
\n
\n
{name}
\n {companyName &&
{companyName}
}\n
{email ?? \"(No Email)\"}
\n
\n
\n {/*
coming soon
*/}\n \n );\n};\n\ninterface CompanyPopoverProps {\n id: string;\n code: string;\n name: string | undefined;\n webAddress: string | undefined;\n phoneNumber: string | undefined;\n className: string;\n style: React.CSSProperties;\n setShow: React.Dispatch>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const CompanyPopover = (props: any) => {\n const {\n id,\n name,\n code,\n webAddress,\n phoneNumber,\n className,\n style,\n setShow\n } = props as CompanyPopoverProps;\n return (\n {\n setShow(false);\n e.stopPropagation();\n }}\n >\n
\n
\n \n
\n
\n
\n {code}\n {name ? \" - \" + name : \"\"}\n
\n \n \n
\n
\n \n );\n};\n\nexport const PopoverContainer = styled.div`\n display: flex;\n flex-direction: column;\n position: absolute;\n background-color: white;\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n border: 1px solid #ccc;\n border-radius: 3px;\n min-width: 250px;\n z-index: 2000;\n\n .main-info {\n display: flex;\n flex-direction: row;\n padding: 10px 10px 10px 10px;\n border-bottom: 1px solid ${ConcreteColors.gray300};\n\n .info {\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n line-height: 1.5rem;\n }\n\n .hb-avatar {\n margin-right: 15px;\n }\n\n .info > .name,\n .info > .code {\n font-size: 20px;\n font-weight: 600;\n color: ${ConcreteColors.gray600};\n }\n\n .info > .email {\n font-size: 12px;\n font-weight: 500;\n color: ${ConcreteColors.gray500};\n\n &.email-danger {\n color: ${ConcreteColors.red400};\n }\n }\n }\n\n .footer {\n display: flex;\n flex-direction: row;\n padding: 10px 20px;\n }\n`;\n","import { IntegratedSelection } from \"@devexpress/dx-react-grid\";\nimport {\n Grid,\n SearchPanel,\n TableHeaderRow,\n TableSelection,\n Toolbar\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport {\n TypedDataColumn,\n SearchState,\n SelectionState,\n IntegratedSorting,\n FilteringState,\n ColumnVisibility,\n ColumnResizing,\n BooleanFormatProvider,\n DateFormatProvider,\n LinkProvider,\n NumberFormatProvider,\n SortingState,\n getRowId,\n Root,\n TableWrapper\n} from \"hcss-tables\";\nimport { strings } from \"localization\";\nimport { ExtendedIntegratedFiltering } from \"./search\";\nimport LegacyVirtualTable from \"core/components/bundle-fixes/LegacyVirtualTable\";\n\nexport interface SelectionTableProps {\n columns: TypedDataColumn[];\n rows: any[];\n}\n\nexport const SelectionTable = ({ columns, rows }: SelectionTableProps) => {\n if (rows.length <= 0) {\n return (\n
\n \n {strings.projects.details.estimateSelectionTable.noEstimates}\n \n \n {strings.projects.details.estimateSelectionTable.noEstimatesLink}\n \n \n \n
\n );\n }\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\n// @ts-ignore\n// https://github.com/DevExpress/devextreme-reactive/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+rowcomponent\nexport const StyledSelectionRow = styled(TableSelection.Row)`\n cursor: pointer;\n\n &:hover,\n &:hover td {\n background-color: #eee !important;\n }\n\n &.active,\n &.active td {\n background-color: #e3f1f8 !important;\n }\n`;\n","export const isNullOrWhitespace = (input: string | undefined | null) => {\n return !input || !input.trim();\n};\n\nexport const isValidEmail = (email: string | undefined | null) => {\n if (!email) return false;\n // eslint-disable-next-line no-useless-escape\n const regex = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n return regex.test(String(email).toLowerCase());\n};\n\nexport const isValidString = (\n input: string | undefined | null\n): input is string => {\n if (input === undefined) return false;\n if (input === null) return false;\n return typeof input === \"string\" && input.trim().length > 0;\n};\n","// this is implicitly testing for browser compatibility using the srcdoc attribute\n// see list of supporting browsers here https://www.w3schools.com/tags/att_iframe_srcdoc.asp\nexport const isSupportedBrowser = () =>\n !!(\"srcdoc\" in document.createElement(\"iframe\"));\n","import * as React from \"react\";\nimport { Route, Switch, withRouter, useParams } from \"react-router-dom\";\nimport FullPageLoading from \"../../layout/components/FullPageLoading\";\nimport { paths } from \"./paths\";\nimport { ProtectedRoute } from \"../../account/components/protected-route\";\nimport { useSelector } from \"react-redux\";\nimport * as schemas from \"modules/schemas\";\nimport { useAuthorization } from \"modules/account\";\nimport { FeatureFlag } from \"core\";\nimport { useFeatureFlags } from \"modules/configurationSettings/use-feature-flags\";\nimport { QuickPricingSourceOptions } from \"../components/quick-pricing/models/quick-price-sheet.model\";\n\nconst ProjectsPage = React.lazy(() =>\n import(/* webpackChunkName: \"project-list\" */ \"../components/ProjectsPage\")\n);\n\nconst ProjectsSetupPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-setup\" */ \"../components/ProjectsSetupPage\"\n )\n);\n\nconst HBIntegrationSetupPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"hb-integration-setup\" */ \"../components/HBIntegrationSetupPage\"\n )\n);\n\nconst ProjectsEmailSubscriptionSetupPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-subscription-setup\" */ \"../../email-subscriptions/components/ProjectsEmailSubscriptionSetupPage\"\n )\n);\n\nconst ProjectsDetailPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-details\" */ \"../components/ProjectsDetailPage\"\n )\n);\n\nconst ProjectsImportPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-import\" */ \"../components/ProjectsImportPage\"\n )\n);\n\nconst ProjectsImportProjectsPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-import\" */ \"../components/ProjectsImportProjectsPage\"\n )\n);\n\nconst ProjectsImportBidResultsPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-import\" */ \"../components/ProjectsImportBidResultsPage\"\n )\n);\n\nconst EstimateMappingPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-import\" */ \"../components/estimate-mapping/EstimateMappingPage\"\n )\n);\nconst ProposalSetupPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-import\" */ \"../../quote-management/components/quote-proposal/setup/index\"\n )\n);\nconst QuickPricingWrapper = React.lazy(() =>\n import(\n /* webpackChunkName: \"project-import\" */ \"../components/quick-pricing/QuickPricingPage\"\n )\n);\n\nconst PayItemLibraryPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"payitem-library\" */ \"../../quick-pricing/components/PayItemLibraryPage\"\n )\n);\n\nexport const ProjectsRouter = withRouter(() => {\n const isBidResultsAdminOnly = useSelector(\n schemas.selectors.getAllProjectSchemaFields\n )?.find(x => x.id === \"bidResults\")?.adminOnly;\n\n const auth = useAuthorization();\n\n const isFreeCompany =\n auth.canAccessLimitedPrecon && !auth.canAccessFullPrecon;\n\n const {\n isFeatureEnabled: isFrontEndEmailSubscriptionEnabled\n } = useFeatureFlags(FeatureFlag.FrontEndEmailSubscription);\n\n const { isFeatureEnabled: isQuickPricingEnabledPhase1 } = useFeatureFlags(\n FeatureFlag.QuickPricingPhase1\n );\n\n const { isFeatureEnabled: isQuickPricingEnabledPhase2 } = useFeatureFlags(\n FeatureFlag.QuickPricingPhase2\n );\n\n return (\n }>\n \n } />\n }\n />\n }\n />\n }\n />\n }\n />\n {isFrontEndEmailSubscriptionEnabled && (\n }\n />\n )}\n {isQuickPricingEnabledPhase1 && (\n }\n />\n )}\n } />\n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n {\n return isQuickPricingEnabledPhase1 ? (\n \n ) : (\n \n );\n }}\n />\n {\n return isQuickPricingEnabledPhase1 &&\n isQuickPricingEnabledPhase2 ? (\n \n ) : (\n \n );\n }}\n />\n {\n return isQuickPricingEnabledPhase1 ? (\n \n ) : (\n \n );\n }}\n />\n }\n />\n \n \n );\n});\n\ninterface ProjectsDetailPageWrapperProps {\n isCopy?: boolean;\n}\nconst ProjectsDetailPageWrapper = ({\n isCopy\n}: ProjectsDetailPageWrapperProps) => {\n const { id: projectId } = useParams<{ id: string }>();\n\n return ;\n};\n\nexport const Views = () => (\n \n);\n\nexport const basePath = paths.base;\n","import { keyBy, sortBy } from \"lodash-es\";\nimport { createSelector } from \"reselect\";\nimport produce from \"immer\";\nimport {\n ActionType,\n createAction,\n createAsyncAction,\n getType\n} from \"typesafe-actions\";\nimport {\n ContactDto,\n ICompanyTypeDto,\n IContactDto,\n IMinorityStatusDto,\n IMinorityTypeDto,\n IProductTypeDto,\n IVendorDtoV1Response,\n MinorityStatusDto,\n VendorDtoV1Response,\n IGetContactSearchDto,\n CompanyTypeDto\n} from \"api/GeneratedClients/ContactsClient\";\nimport { CompanyFieldData } from \"modules/schemas/components/fields/CompanyInput\";\nimport { CreateCompanyMode } from \"./components/vendor-list-modal\";\nimport { RouterChildContext } from \"react-router-dom\";\nimport FileSaver from \"file-saver\";\nexport const STATE_KEY = \"contacts\";\n\n// Models\nexport interface State {\n vendorList: IVendorDtoV1Response[];\n minorityTypes: IMinorityTypeDto[];\n productTypes: IProductTypeDto[];\n companyTypes: ICompanyTypeDto[];\n searchResults: IGetContactSearchDto[];\n loading: boolean;\n loaded: boolean;\n searching: boolean;\n searched: boolean;\n showSearchModal: boolean;\n errors: string[];\n showModal: boolean;\n showMoveContactModal: boolean;\n}\n\nexport type ContactPayLoadState = Omit<\n State,\n | \"loading\"\n | \"loaded\"\n | \"searchResults\"\n | \"searching\"\n | \"searched\"\n | \"showModal\"\n | \"showSearchModal\"\n | \"showMoveContactModal\"\n | \"errors\"\n>;\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n loadContactsState: createAsyncAction(\n \"CONTACTS/LOAD_REQUEST\",\n \"CONTACTS/LOAD_SUCCESS\",\n \"CONTACTS/LOAD_FAILURE\"\n )(),\n\n loadVendorsState: createAsyncAction(\n \"CONTACTS/LOAD_VENDORS_REQUEST\",\n \"CONTACTS/LOAD_VENDORS_SUCCESS\",\n \"CONTACTS/LOAD_VENDORS_FAILURE\"\n )(),\n\n loadMinorityTypes: createAsyncAction(\n \"CONTACTS/LOAD_MINORITY_TYPES_REQUEST\",\n \"CONTACTS/LOAD_MINORITY_TYPES_SUCCESS\",\n \"CONTACTS/LOAD_MINORITY_TYPES_FAILURE\"\n )(),\n\n loadProductTypes: createAsyncAction(\n \"CONTACTS/LOAD_PRODUCT_TYPES_REQUEST\",\n \"CONTACTS/LOAD_PRODUCT_TYPES_SUCCESS\",\n \"CONTACTS/LOAD_PRODUCT_TYPES_FAILURE\"\n )(),\n\n loadCompanyTypes: createAsyncAction(\n \"CONTACTS/LOAD_COMPANY_TYPES_REQUEST\",\n \"CONTACTS/LOAD_COMPANY_TYPES_SUCCESS\",\n \"CONTACTS/LOAD_COMPANY_TYPES_FAILURE\"\n )(),\n\n loadVendorsReport: createAsyncAction(\n \"CONTACTS/LOAD_VENDORS_REPORT_REQUEST\",\n \"CONTACTS/LOAD_VENDORS_REPORT_SUCCESS\",\n \"CONTACTS/LOAD_VENDORS_REPORT_FAILURE\"\n )<\n {\n fileSaver: {\n default: typeof FileSaver;\n saveAs(\n data: string | Blob,\n filename?: string | undefined,\n options?: FileSaver.FileSaverOptions | undefined\n ): void;\n saveAs(\n data: string | Blob,\n filename?: string | undefined,\n disableAutoBOM?: boolean | undefined\n ): void;\n };\n reportType: string;\n },\n void,\n Error\n >(),\n\n setSelectedVendor: createAction(\"CONTACTS/SET_SELECTED_VENDOR\", resolve => {\n return (vendorId: string) => resolve({ vendorId });\n }),\n\n setShowModal: createAction(\"CONTACT/SET_SHOW_MODAL\", resolve => {\n return (modalState: boolean) => resolve({ modalState });\n }),\n\n createVendor: createAsyncAction(\n \"CONTACTS/SAVE_VENDOR_REQUEST\",\n \"CONTACTS/SAVE_VENDOR_SUCCESS\",\n \"CONTACTS/SAVE_VENDOR_FAILURE\"\n )<\n { vendor: IVendorDtoV1Response; history: History; mode: CreateCompanyMode },\n VendorDtoV1Response,\n Error\n >(),\n\n updateVendor: createAsyncAction(\n \"CONTACTS/UPDATE_VENDOR_REQUEST\",\n \"CONTACTS/UPDATE_VENDOR_SUCCESS\",\n \"CONTACTS/UPDATE_VENDOR_FAILURE\"\n )<\n {\n vendor: IVendorDtoV1Response;\n history: RouterChildContext[\"router\"][\"history\"];\n },\n VendorDtoV1Response,\n Error\n >(),\n\n deleteVendor: createAsyncAction(\n \"CONTACTS/DELETE_VENDOR_REQUEST\",\n \"CONTACTS/DELETE_VENDOR_SUCCESS\",\n \"CONTACTS/DELETE_VENDOR_FAILURE\"\n )(),\n\n addContact: createAsyncAction(\n \"CONTACTS/ADD_CONTACT_REQUEST\",\n \"CONTACTS/ADD_CONTACT_SUCCESS\",\n \"CONTACTS/ADD_CONTACT_FAILURE\"\n )<\n { contact: IContactDto; vendor: IVendorDtoV1Response },\n { contact: IContactDto; vendor: IVendorDtoV1Response },\n Error\n >(),\n\n addContactFromProject: createAsyncAction(\n \"CONTACTS/ADD_CONTACT_FROM_PROJECT_REQUEST\",\n \"CONTACTS/ADD_CONTACT_FROM_PROJECT_SUCCESS\",\n \"CONTACTS/ADD_CONTACT_FROM_PROJECT_FAILURE\"\n )<\n {\n contact: IContactDto;\n vendor: IVendorDtoV1Response;\n updateInput: (contact: IContactDto, vendor: IVendorDtoV1Response) => void;\n setShowCreateContactModal: (showModal: boolean) => void;\n setSelectedCompany: React.Dispatch<\n React.SetStateAction\n >;\n },\n { contact: IContactDto; vendor: IVendorDtoV1Response },\n Error\n >(),\n\n updateContact: createAsyncAction(\n \"CONTACTS/UPDATE_CONTACT_REQUEST\",\n \"CONTACTS/UPDATE_CONTACT_SUCCESS\",\n \"CONTACTS/UPDATE_CONTACT_FAILURE\"\n )<\n { contact: IContactDto; vendor: IVendorDtoV1Response },\n { contact: IContactDto; vendor: IVendorDtoV1Response },\n Error\n >(),\n\n deleteContact: createAsyncAction(\n \"CONTACTS/DELETE_CONTACT_REQUEST\",\n \"CONTACTS/DELETE_CONTACT_SUCCESS\",\n \"CONTACTS/DELETE_CONTACT_FAILURE\"\n )<\n { contact: IContactDto; vendorId: string },\n { contact: IContactDto; vendorId: string },\n Error\n >(),\n\n moveContact: createAsyncAction(\n \"CONTACTS/MOVE_CONTACT_REQUEST\",\n \"CONTACTS/MOVE_CONTACT_SUCCESS\",\n \"CONTACTS/MOVE_CONTACT_FAILURE\"\n )<\n {\n contact: ContactDto;\n oldVendorId: string;\n newVendorId: string;\n history: History;\n },\n {\n contact: IContactDto;\n oldVendorId: string;\n newVendorId: string;\n },\n Error\n >(),\n updateProductTypes: createAsyncAction(\n \"CONTACTS/UPDATE_PRODUCT_TYPES_REQUEST\",\n \"CONTACTS/UPDATE_PRODUCT_TYPES_SUCCESS\",\n \"CONTACTS/UPDATE_PRODUCT_TYPES_FAILURE\"\n )(),\n\n addMinorityStatus: createAsyncAction(\n \"CONTACTS/ADD_MINORITY_STATUS_REQUEST\",\n \"CONTACTS/ADD_MINORITY_STATUS_SUCCESS\",\n \"CONTACTS/ADD_MINORITY_STATUS_FAILURE\"\n )<\n { minorityStatus: IMinorityStatusDto; vendorId: string },\n { minorityStatus: MinorityStatusDto; vendorId: string },\n Error\n >(),\n\n updateMinorityStatus: createAsyncAction(\n \"CONTACTS/UPDATE_MINORITY_STATUS_REQUEST\",\n \"CONTACTS/UPDATE_MINORITY_STATUS_SUCCESS\",\n \"CONTACTS/UPDATE_MINORITY_STATUS_FAILURE\"\n )<\n { minorityStatus: IMinorityStatusDto; vendorId: string; statusId: string },\n {\n minorityStatus: IMinorityStatusDto;\n vendorId: string;\n statusId: string;\n },\n Error\n >(),\n\n deleteMinorityStatus: createAsyncAction(\n \"CONTACTS/DELETE_MINORITY_STATUS_REQUEST\",\n \"CONTACTS/DELETE_MINORITY_STATUS_SUCCESS\",\n \"CONTACTS/DELETE_MINORITY_STATUS_FAILURE\"\n )<\n { minorityStatus: IMinorityStatusDto; vendorId: string },\n { vendorId: string; statusId: string },\n Error\n >(),\n\n updateCompanyTypes: createAsyncAction(\n \"CONTACTS/UPDATE_COMPANY_TYPES_REQUEST\",\n \"CONTACTS/UPDATE_COMPANY_TYPES_SUCCESS\",\n \"CONTACTS/UPDATE_COMPANY_TYPES_FAILURE\"\n )(),\n\n searchContacts: createAsyncAction(\n \"CONTACTS/SEARCH_CONTACT_REQUEST\",\n \"CONTACTS/SEARCH_CONTACT_SUCCESS\",\n \"CONTACTS/SEARCH_CONTACT_FAILURE\"\n )(),\n\n setShowSearchModal: createAction(\"CONTACTS/SEARCH_MODAL_TOGGLE\", resolve => {\n return (isOpen: boolean) => resolve({ isOpen });\n }),\n\n setShowMoveContactModal: createAction(\n \"CONTACTS/MOVE_MODAL_TOGGLE\",\n resolve => {\n return (isOpen: boolean) => resolve({ isOpen });\n }\n ),\n\n addMinorityType: createAsyncAction(\n \"CONTACTS/ADD_MINORITYTYPE_REQUEST\",\n \"CONTACTS/ADD_MINORITYTYPE_SUCCESS\",\n \"CONTACTS/ADD_MINORITYTYPE_FAILURE\"\n )(),\n\n updateMinorityType: createAsyncAction(\n \"CONTACTS/UPDATE_MINORITYTYPE_REQUEST\",\n \"CONTACTS/UPDATE_MINORITYTYPE_SUCCESS\",\n \"CONTACTS/UPDATE_MINORITYTYPE_FAILURE\"\n )<\n { minorityType: IMinorityTypeDto; minorityTypeId: string },\n { minorityType: IMinorityTypeDto; minorityTypeId: string },\n Error\n >(),\n\n addProductType: createAsyncAction(\n \"CONTACTS/ADD_PRODUCTTYPE_REQUEST\",\n \"CONTACTS/ADD_PRODUCTTYPE_SUCCESS\",\n \"CONTACTS/ADD_PRODUCTTYPE_FAILURE\"\n )(),\n\n updateProductType: createAsyncAction(\n \"CONTACTS/UPDATE_PRODUCTTYPE_REQUEST\",\n \"CONTACTS/UPDATE_PRODUCTTYPE_SUCCESS\",\n \"CONTACTS/UPDATE_PRODUCTTYPE_FAILURE\"\n )<\n { productType: IProductTypeDto; productTypeId: string },\n { productType: IProductTypeDto; productTypeId: string },\n Error\n >(),\n\n syncContactToProjects: createAsyncAction(\n \"CONTACTS/SYNC_CONTACT_TO_PROJECT_REQUEST\",\n \"CONTACTS/SYNC_CONTACT_TO_PROJECT_SUCCESS\",\n \"CONTACTS/SYNC_CONTACT_TO_PROJECT_FAILURE\"\n )()\n};\n\nexport type ContactActions = ActionType;\n\nconst initialState: State = {\n vendorList: [],\n minorityTypes: [],\n productTypes: [],\n companyTypes: [],\n searchResults: [],\n loading: false,\n loaded: false,\n searching: false,\n searched: false,\n showSearchModal: false,\n showModal: false,\n showMoveContactModal: false,\n errors: []\n};\n\n// Reducer\nexport const reducer = (state = initialState, action: ContactActions) => {\n return produce(state, draft => {\n switch (action.type) {\n case getType(actions.loadContactsState.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.loadContactsState.success): {\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.loadContactsState.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error loading contacts: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.loadVendorsState.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.loadVendorsState.success): {\n draft.loading = false;\n draft.loaded = true;\n const vendorList = action.payload;\n draft.vendorList = filterDuplicateProducts(vendorList);\n break;\n }\n\n case getType(actions.loadVendorsState.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error loading vendors: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.loadProductTypes.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.loadProductTypes.success): {\n const productTypes = action.payload;\n draft.productTypes = productTypes;\n break;\n }\n\n case getType(actions.loadProductTypes.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error loading scopes of work: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.loadMinorityTypes.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.loadMinorityTypes.success): {\n const payload = action.payload;\n draft.minorityTypes = payload;\n break;\n }\n\n case getType(actions.loadMinorityTypes.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error loading minority types: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.loadCompanyTypes.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.loadCompanyTypes.success): {\n const payload = action.payload;\n draft.companyTypes = payload;\n break;\n }\n\n case getType(actions.loadCompanyTypes.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error loading company types: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.loadVendorsReport.request): {\n break;\n }\n case getType(actions.loadVendorsReport.success): {\n break;\n }\n case getType(actions.loadVendorsReport.failure): {\n draft.errors.push(\n `Error loading vendors report: ${action.payload.message}`\n );\n break;\n }\n case getType(actions.setShowModal): {\n const { modalState } = action.payload;\n draft.showModal = modalState;\n break;\n }\n\n case getType(actions.setShowMoveContactModal): {\n const { isOpen } = action.payload;\n draft.showMoveContactModal = isOpen;\n break;\n }\n\n case getType(actions.updateProductTypes.success): {\n const productTypes = action.payload;\n draft.productTypes = productTypes;\n break;\n }\n case getType(actions.createVendor.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.createVendor.success): {\n draft.vendorList.push(action.payload);\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.createVendor.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error updating vendor: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.updateVendor.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.updateVendor.success): {\n const updatedVendor = action.payload;\n const vendors = draft.vendorList.filter(v => v.id !== updatedVendor.id);\n draft.vendorList = [...vendors, updatedVendor];\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.updateVendor.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error updating vendor: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.deleteVendor.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.deleteVendor.success): {\n const deletedId = action.payload;\n const vendors = draft.vendorList.filter(v => v.id !== deletedId);\n draft.vendorList = vendors;\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.deleteVendor.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error deleting vendor: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.addContact.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.addContact.success): {\n const { vendor, contact } = action.payload;\n const vendorId = vendor.id;\n const foundVendor = draft.vendorList.find(v => v.id === vendorId);\n if (contact.isMainContact && foundVendor) {\n if (foundVendor.contacts) {\n const currentMainContactIndex = foundVendor.contacts.findIndex(\n c => c.isMainContact\n );\n let vendorHasMainContact = false;\n if (currentMainContactIndex !== -1) vendorHasMainContact = true;\n if (vendorHasMainContact)\n foundVendor.contacts[\n currentMainContactIndex\n ].isMainContact = false;\n }\n }\n if (foundVendor) {\n foundVendor.contacts.push(contact);\n }\n\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.addContact.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error adding contact: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.addContactFromProject.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.addContactFromProject.success): {\n const { vendor, contact } = action.payload;\n const vendorId = vendor.id;\n const foundVendor = draft.vendorList.find(v => v.id === vendorId);\n if (contact.isMainContact && foundVendor) {\n if (foundVendor.contacts) {\n const currentMainContactIndex = foundVendor.contacts.findIndex(\n c => c.isMainContact\n );\n let vendorHasMainContact = false;\n if (currentMainContactIndex !== -1) vendorHasMainContact = true;\n if (vendorHasMainContact)\n foundVendor.contacts[\n currentMainContactIndex\n ].isMainContact = false;\n }\n }\n if (foundVendor) {\n foundVendor.contacts.push(contact);\n }\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.addContactFromProject.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error adding contact from project: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.updateContact.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.updateContact.success): {\n const { vendor, contact: c } = action.payload;\n const vendorId = vendor.id;\n const contactId = c.id;\n const foundVendor = draft.vendorList.find(v => v.id === vendorId);\n if (!foundVendor) break;\n const index = foundVendor.contacts.findIndex(c => c.id === contactId);\n if (index === -1) break;\n const contact = new ContactDto({ ...c });\n if (contact.isMainContact) {\n const currentMainContactIndex = foundVendor.contacts.findIndex(\n c => c.isMainContact\n );\n let vendorHasMainContact = false;\n if (currentMainContactIndex !== -1) vendorHasMainContact = true;\n if (vendorHasMainContact)\n foundVendor.contacts[currentMainContactIndex].isMainContact = false;\n }\n foundVendor.contacts[index] = contact;\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.updateContact.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error updating contact: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.deleteContact.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.deleteContact.success): {\n const { vendorId, contact: c } = action.payload;\n const vendor = draft.vendorList.find(v => v.id === vendorId);\n if (vendor) {\n const contacts = vendor?.contacts?.filter(vc => vc.id !== c.id);\n vendor.contacts = contacts;\n }\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.deleteContact.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error deleting contact: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.moveContact.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n case getType(actions.moveContact.success): {\n const { oldVendorId, newVendorId, contact: c } = action.payload;\n // Remove Offices and Scope of Work if we are moving the contact\n if (oldVendorId !== newVendorId) {\n c.vendorLocationId = \"\";\n }\n // Handle contact removal\n const vendorToDeleteFrom = draft.vendorList.find(\n v => v.id === oldVendorId\n );\n\n if (vendorToDeleteFrom) {\n const updatedContacts = vendorToDeleteFrom?.contacts.filter(\n vc => vc.id !== c.id\n );\n vendorToDeleteFrom.contacts = updatedContacts;\n }\n\n // Handle contact addition\n const vendorToAddIn = draft.vendorList.find(v => v.id === newVendorId);\n\n if (vendorToAddIn) {\n // Change VendorProductId to match with the product id of the new vendor.\n const vendorToAddInProductsLookup = keyBy(\n vendorToAddIn?.products,\n p => p.product?.id\n );\n c.products?.forEach(p => {\n if (!p.productTypeId) return;\n p.vendorProductId = vendorToAddInProductsLookup[p.productTypeId].id;\n });\n\n // add the contact to the new vendor\n vendorToAddIn.contacts.push(c);\n }\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.moveContact.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error moving contact: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.searchContacts.request): {\n draft.searched = false;\n draft.searching = true;\n break;\n }\n\n case getType(actions.searchContacts.success): {\n const contacts = action.payload;\n draft.searchResults = contacts;\n draft.searched = true;\n draft.searching = false;\n break;\n }\n\n case getType(actions.searchContacts.failure): {\n draft.searching = false;\n draft.searched = false;\n draft.errors.push(\n `Error searching contacts: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.setShowSearchModal): {\n draft.showSearchModal = action.payload.isOpen;\n break;\n }\n\n case getType(actions.addMinorityStatus.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.addMinorityStatus.success): {\n const { minorityStatus, vendorId } = action.payload;\n draft.minorityTypes.push(action.payload.minorityStatus);\n const vendor = draft.vendorList.find(v => v.id === vendorId);\n if (vendor) {\n vendor.minorityStatuses = [\n ...vendor.minorityStatuses,\n minorityStatus\n ];\n }\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.addMinorityStatus.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error adding Minority Status: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.updateMinorityStatus.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.updateMinorityStatus.success): {\n const { minorityStatus: ms, vendorId, statusId } = action.payload;\n const vendor = draft.vendorList.find(v => v.id === vendorId);\n if (!vendor) break;\n const index = vendor.minorityStatuses.findIndex(\n ms => ms.id === statusId\n );\n if (index === -1) break;\n const minorityStatus = new MinorityStatusDto({ ...ms });\n const minorityStatuses = [...vendor.minorityStatuses];\n minorityStatuses[index] = minorityStatus;\n vendor.minorityStatuses = [...minorityStatuses];\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.updateMinorityStatus.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error updating Minority Status: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.deleteMinorityStatus.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.deleteMinorityStatus.success): {\n const { vendorId, statusId } = action.payload;\n const vendor = draft.vendorList.find(v => v.id === vendorId);\n if (!vendor) break;\n const minorityStatuses = vendor.minorityStatuses.filter(\n m => m.id !== statusId\n );\n vendor.minorityStatuses = [...minorityStatuses];\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.deleteMinorityStatus.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error deleting Minority Status: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.updateCompanyTypes.success): {\n const companyTypes = action.payload;\n draft.companyTypes = companyTypes;\n break;\n }\n\n case getType(actions.addMinorityType.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.addMinorityType.success): {\n draft.minorityTypes.push(action.payload);\n draft.minorityTypes.sort(\n (a, b) => a.code?.localeCompare(b.code ?? \"\") ?? 0\n );\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.addMinorityType.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error adding Minority Type: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.updateMinorityType.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.updateMinorityType.success): {\n const { minorityType, minorityTypeId } = action.payload;\n const index = draft.minorityTypes.findIndex(\n t => t.id === minorityTypeId\n );\n if (index === -1) break;\n const updatedMinorityType: IMinorityTypeDto = { ...minorityType };\n const minorityTypes = [...draft.minorityTypes];\n minorityTypes[index] = updatedMinorityType;\n draft.minorityTypes = [...minorityTypes].sort(\n (a, b) => a.code?.localeCompare(b.code ?? \"\") ?? 0\n );\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.updateMinorityType.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error updating Minority Type: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.addProductType.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.addProductType.success): {\n draft.productTypes.push(action.payload);\n draft.productTypes.sort(\n (a, b) => a.code?.localeCompare(b.code ?? \"\") ?? 0\n );\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.addProductType.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error adding Product Type: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.updateProductType.request): {\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n\n case getType(actions.updateProductType.success): {\n const { productType, productTypeId } = action.payload;\n const index = draft.productTypes.findIndex(t => t.id === productTypeId);\n if (index === -1) break;\n const productTypes = [...draft.productTypes];\n productTypes[index] = productType;\n draft.productTypes = [...productTypes].sort(\n (a, b) => a.code?.localeCompare(b.code ?? \"\") ?? 0\n );\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.updateProductType.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(\n `Error updating Product Type: ${action.payload.message}`\n );\n break;\n }\n\n case getType(actions.syncContactToProjects.request): {\n draft.loading = true;\n draft.loaded = false;\n break;\n }\n\n case getType(actions.syncContactToProjects.success): {\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n\n case getType(actions.syncContactToProjects.failure): {\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n }\n });\n};\n\nexport type SelectorState = StateSlice;\n\n// Selectors\nconst getVendorList = ({ contacts }: SelectorState) => contacts.vendorList;\nconst geDetailedVendor = ({ contacts }: SelectorState) => contacts.vendorList;\nconst getMinorityTypes = ({ contacts }: SelectorState) =>\n contacts.minorityTypes;\nconst getProductTypes = ({ contacts }: SelectorState) => contacts.productTypes;\nconst getErrors = ({ contacts }: SelectorState) => contacts.errors;\nconst getLoading = ({ contacts }: SelectorState) => contacts.loading;\nconst getLoaded = ({ contacts }: SelectorState) => contacts.loaded;\nconst getShowModal = ({ contacts }: SelectorState) => contacts.showModal;\nconst getShowMoveContactModal = ({ contacts }: SelectorState) =>\n contacts.showMoveContactModal;\nconst getCompanyTypes = ({ contacts }: SelectorState) => contacts.companyTypes;\nconst getSearchResults = ({ contacts }: SelectorState) =>\n contacts.searchResults;\nconst getIsSearching = ({ contacts }: SelectorState) => contacts.searching;\nconst getShowSearchModal = ({ contacts }: SelectorState) =>\n contacts.showSearchModal;\n\nconst getVendorListSortedByCode = createSelector(\n [getVendorList],\n vendorList => {\n return sortBy(vendorList, [\"code\"]);\n }\n);\n\nconst getVendorCodeList = createSelector([getVendorList], vendorList => {\n return vendorList.map(vendor => vendor.code);\n});\n\nconst getVendorCodeIdDict = createSelector([getVendorList], vendorList =>\n Object.assign({}, ...vendorList.map(v => ({ [v.code]: v.id })))\n);\n\nconst getVendorDataOptions = createSelector(\n [getVendorListSortedByCode],\n vendorList => {\n return vendorList.map(vendor => {\n const firstLocation = getVendorFirstLocation(vendor);\n return {\n id: vendor.id,\n code: vendor.code,\n name: vendor.name,\n phoneNumber: firstLocation?.phoneNumber,\n webAddress: vendor.webAddress,\n type: vendor.type,\n products: vendor.products,\n offices: vendor.locations\n };\n });\n }\n);\n\nconst getMinorityStatusOptions = createSelector(\n [getMinorityTypes],\n minorityTypes => {\n return minorityTypes.map(mt => ({\n code: mt.code,\n display: mt.code ?? \"\",\n value: mt\n }));\n }\n);\nconst getSearchResultsSorted = createSelector(\n [getSearchResults],\n searchResults => {\n return sortBy(\n searchResults,\n result =>\n `${result.firstName?.toLocaleUpperCase()} ${result.lastName?.toLocaleUpperCase()}`\n );\n }\n);\n\nconst getVendorIdCompanyTypeDict = createSelector([getVendorList], vendors => {\n const reducer = (prev: any, { id, type }: IVendorDtoV1Response) => ({\n ...prev,\n [`${id}`]: type\n });\n const result = vendors.reduce>(\n reducer,\n {}\n );\n return result;\n});\n\nconst getContactIdProductTypeDict = createSelector([getVendorList], vendors => {\n const contactList = vendors.map(v => v.contacts).flat();\n const reducer = (prev: any, { id, products }: IContactDto) => ({\n ...prev,\n [`${id}`]: products ?? []\n });\n const result = contactList.reduce>(\n reducer,\n {}\n );\n return result;\n});\n\nexport const selectors = {\n getVendorList,\n geDetailedVendor,\n getMinorityTypes,\n getProductTypes,\n getErrors,\n getLoading,\n getLoaded,\n getShowModal,\n getShowMoveContactModal,\n getVendorListSortedByCode,\n getVendorDataOptions,\n getMinorityStatusOptions,\n getCompanyTypes,\n getSearchResults,\n getSearchResultsSorted,\n getIsSearching,\n getShowSearchModal,\n getVendorCodeList,\n getVendorCodeIdDict,\n getVendorIdCompanyTypeDict,\n getContactIdProductTypeDict\n};\n\nconst filterDuplicateProducts = (vendorList: IVendorDtoV1Response[]) => {\n return vendorList.map(vendor => {\n const filtered = vendor.products.filter((value, index, self) => {\n return (\n self.findIndex(p => p.product?.code === value.product?.code) === index\n );\n });\n return { ...vendor, products: filtered };\n });\n};\n\nconst getVendorFirstLocation = (vendor: IVendorDtoV1Response) => {\n if (!vendor || !vendor.locations) return;\n const sortedLocations = sortBy(vendor?.locations, function (loc) {\n return loc.nickname.toLowerCase();\n });\n return sortedLocations[0];\n};\n","import React from \"react\";\nimport FullPageLoading from \"../../layout/components/FullPageLoading\";\nimport { ProtectedRoute } from \"../../account/components/protected-route\";\n\nimport { Route, withRouter, Switch } from \"react-router-dom\";\n\nconst SMTPSettingsPage = React.lazy(() =>\n import(\n /* webpackChunkName: \"settings-smtp\" */ \"../components/SMTPSettingsPage\"\n )\n);\n\nconst AdminSettingsPage = React.lazy(() =>\n import(/* webpackChunkName: \"settings-admin\" */ \"../Admin/AdminSettingsPage\")\n);\n\nconst ProfilePage = React.lazy(() =>\n import(\n /* webpackChunkName: \"settings-profile\" */ \"../../profile/components/profile-details\"\n )\n);\nconst paths = {\n profile: \"/settings/profile\",\n permissions: \"/settings/permissions\",\n smtp: \"/settings/smtp\",\n base: \"/settings\"\n};\n\nconst SettingsRouter = withRouter(() => {\n return (\n }>\n \n }\n />\n } />\n } />\n \n \n );\n});\n\nexport const Views: React.FC = () => (\n \n);\n","import rfdc from \"rfdc\";\nimport produce from \"immer\";\nimport { keyBy, values, flatten, isEqual } from \"lodash-es\";\nimport { createSelector } from \"reselect\";\nimport {\n ActionType,\n createAction,\n createAsyncAction,\n getType\n} from \"typesafe-actions\";\nimport {\n Project,\n SchemaFieldType,\n EstimateEntity,\n SchemaField,\n JobDto,\n FieldMetadata,\n PreConPermissions,\n JobCostTypeCostDto\n} from \"api\";\nimport { CurrentUser, WithId } from \"core\";\nimport { filterField } from \"modules/schemas/filters\";\nimport * as views from \"modules/views\";\nimport * as schemas from \"modules/schemas\";\nimport * as config from \"modules/configurationSettings\";\nimport * as account from \"modules/account\";\nimport * as calendars from \"modules/calendars\";\nimport * as estimates from \"modules/estimates\";\nimport {\n constantSections,\n populateHJJobFieldsWithValues,\n populateProjectWithBidResults,\n populateProjectWithEstimateValues,\n populateProjectWithLastModifiedBy,\n PreConId,\n selectEstimatesFields\n} from \"./common\";\nimport { createUserDictFromUserList } from \"modules/account\";\nimport {\n CredentialsUserDto,\n IdentityClientsDto\n} from \"api/GeneratedClients/precon\";\nimport { ProjectEstimate } from \"api/GeneratedClients/precon\";\nimport { calculatedFieldService } from \"modules/schemas/services/calculated-field.service\";\n\nconst fastDeepClone = rfdc();\nexport const STATE_KEY = \"projects\";\n\n// Models\nexport enum UndoEstimateLinkingStatus {\n InProgress = \"InProgress\",\n Fails = \"Fails\",\n Success = \"Success\",\n Ready = \"Ready\",\n OptimisticallyReady = \"OptimisticallyReady\"\n}\n\nexport interface UndoEstimateLinkingState {\n status?: UndoEstimateLinkingStatus;\n projectId?: string;\n linkedEstimatesIds?: string[];\n error?: Error;\n}\nexport interface State {\n allIds: string[];\n workingCopy: { [key: string]: WithId };\n original: { [key: string]: WithId };\n loading: boolean;\n loaded: boolean;\n allLoaded: boolean;\n //this flag is meant to handle our current approach of loading projects\n // load the first 100, then load the rest. we need a flag to enable users to\n // see their 100 most recent projects to make the site \"feel\" much faster\n loadedFirstPage: boolean;\n errors: string[];\n selectedViewId?: string;\n hJJobs: JobDto[];\n undoEstimateLinkingState: UndoEstimateLinkingState;\n hJJobCostTypeCosts: Record;\n hJJobCostTypeCostsLoading: boolean;\n hJJobCostTypeCostsLoadingError?: Error;\n}\n\nexport interface StateSlice {\n [STATE_KEY]: State;\n}\n\n// Actions\nexport const actions = {\n loadProjects: createAsyncAction(\n \"PROJECTS/LOAD_REQUEST\",\n \"PROJECTS/LOAD_SUCCESS\",\n \"PROJECTS/LOAD_FAILURE\"\n )[], Error>(),\n\n loadPreConID: createAsyncAction(\n \"PROJECTS/LOAD_PRECONID_REQUEST\",\n \"PROJECTS/LOAD_PRECONID_REQUEST\",\n \"PROJECTS/LOAD_PRECONID_REQUEST\"\n )(),\n\n saveProject: createAsyncAction(\n \"PROJECTS/SAVE_REQUEST\",\n \"PROJECTS/SAVE_SUCCESS\",\n \"PROJECTS/SAVE_FAILURE\"\n )<\n {\n project: Project;\n meta?: { silent: boolean };\n setGoToProject?: (value: React.SetStateAction) => void;\n resetForm?: (value: any) => void;\n },\n WithId,\n { error: Error; project: Project }\n >(),\n\n saveNewProject: createAsyncAction(\n \"PROJECTS/SAVENEW_REQUEST\",\n \"PROJECTS/SAVENEW_SUCCESS\",\n \"PROJECTS/SAVENEW_FAILURE\"\n )<\n {\n project: WithId;\n meta?: { silent: boolean };\n setGoToProject?: (value: React.SetStateAction) => void;\n resetForm?: (value: any) => void;\n },\n WithId,\n { error: Error; project: Project }\n >(),\n\n deleteProject: createAsyncAction(\n \"PROJECTS/DELETE_REQUEST\",\n \"PROJECTS/DELETE_SUCCESS\",\n \"PROJECTS/DELETE_FAILURE\"\n )(),\n\n deleteProjects: createAsyncAction(\n \"PROJECTS/DELETE_MULTIPLE_REQUEST\",\n \"PROJECTS/DELETE_MULTIPLE_SUCCESS\",\n \"PROJECTS/DELETE_MULTIPLE_FAILURE\"\n )(),\n updateProjects: createAction(\"PROJECTS/UPDATE\", resolve => {\n return (projects: WithId[]) => resolve({ projects });\n }),\n\n setSelectedViewId: createAction(\"PROJECTS/SET_VIEW_ID\", resolve => {\n return (selectedViewId: string) => resolve({ selectedViewId });\n }),\n\n loadedAllRecords: createAction(\"PROJECTS/LOAD_ALL_COMPLETE\", resolve => {\n return () => resolve();\n }),\n\n loadedFirstPage: createAction(\n \"PROJECTS/LOAD_MOST_RECENT_COMPLETE\",\n resolve => {\n return () => resolve();\n }\n ),\n\n linkEstimateToProject: createAsyncAction(\n \"PROJECTS/LINK_ESTIMATE_REQUEST\",\n \"PROJECTS/LINK_ESTIMATE_SUCCESS\",\n \"PROJECTS/LINK_ESTIMATE_FAILURE\"\n )<\n {\n projectId: string;\n estimateId: string;\n meta?: {\n silent: boolean;\n };\n },\n WithId,\n { error: Error; projectId: string }\n >(),\n\n unlinkEstimateFromProject: createAsyncAction(\n \"PROJECTS/UNLINK_ESTIMATE_REQUEST\",\n \"PROJECTS/UNLINK_ESTIMATE_SUCCESS\",\n \"PROJECTS/UNLINK_ESTIMATE_FAILURE\"\n )<\n {\n projectId: string;\n estimateId: string;\n projectName: string;\n meta?: {\n silent: boolean;\n };\n },\n WithId,\n { error: Error; projectId: string }\n >(),\n\n undoEstimatesLinking: createAction(\"PROJECTS/UNDO_ESTIMATES_LINKING\"),\n\n resetUndoEstimatesLinking: createAction(\n \"PROJECTS/RESET_UNDO_ESTIMATES_LINKING\"\n ),\n\n unlinkEstimatesFromProject: createAsyncAction(\n \"PROJECTS/UNLINK_ESTIMATES_REQUEST\",\n \"PROJECTS/UNLINK_ESTIMATES_SUCCESS\",\n \"PROJECTS/UNLINK_ESTIMATES_FAILURE\"\n )<\n {\n projectId: string;\n estimateIds: string[];\n meta?: {\n errorNotification: string;\n };\n },\n WithId,\n { error: Error; projectId: string }\n >(),\n\n linkEstimatesToProject: createAsyncAction(\n \"PROJECTS/LINK_ESTIMATES_TO_PROJECT_REQUEST\",\n \"PROJECTS/LINK_ESTIMATES_TO_PROJECT_SUCCESS\",\n \"PROJECTS/LINK_ESTIMATES_TO_PROJECT_FAILURE\"\n )<\n {\n projectId: string;\n projectEstimates: LinkedEstimate[];\n meta?: {\n silent: boolean;\n };\n },\n WithId,\n { error: Error; projectId: string }\n >(),\n\n loadHJJobs: createAsyncAction(\n \"HJJob/LOAD_REQUEST\",\n \"HJJob/LOAD_SUCCESS\",\n \"HJJob/LOAD_FAILURE\"\n )(),\n\n loadHJJobCostTypeCosts: createAsyncAction(\n \"HJJobCostTypeCost/LOAD_REQUEST\",\n \"HJJobCostTypeCost/LOAD_SUCCESS\",\n \"HJJobCostTypeCost/LOAD_FAILURE\"\n )<{ jobIds?: string[] }, JobCostTypeCostDto[], Error>(),\n\n updateProjectFieldMetadata: createAction(\n \"PROJECTS/UPDATE_PROJECT_FIELD_METADATA\",\n resolve => {\n return (\n projectId: string,\n fieldId: string,\n projectFieldMetadata: FieldMetadata\n ) => resolve({ projectId, fieldId, projectFieldMetadata });\n }\n ),\n\n updateProjectMetadata: createAction(\n \"PROJECTS/UPDATE_PROJECT_METADATA\",\n resolve => {\n return (\n projectId: string,\n projectMetadata: { [key: string]: FieldMetadata }\n ) => resolve({ projectId, projectMetadata });\n }\n ),\n createNewProjectLocally: createAction(\n \"PROJECTS/CREATE_LOCAL_PROJECT\",\n resolve => {\n return (newLocalProject: WithId) => resolve({ newLocalProject });\n }\n ),\n deleteLocallyCreatedProject: createAction(\n \"PROJECTS/DELETE_LOCAL_PROJECT\",\n resolve => {\n return (deletingProjectID: string) => resolve({ deletingProjectID });\n }\n )\n};\n\nexport type ProjectsActions = ActionType;\n\nconst initialState: State = {\n allIds: [],\n workingCopy: {},\n original: {},\n loading: false,\n loaded: false,\n allLoaded: false,\n loadedFirstPage: false,\n errors: [],\n hJJobs: [],\n undoEstimateLinkingState: {},\n hJJobCostTypeCosts: {},\n hJJobCostTypeCostsLoading: false\n};\n\n// Reducer\nexport const reducer = (state = initialState, action: ProjectsActions) => {\n return produce(state, draft => {\n const enableUndoEstimateLinking = (\n projectId: string,\n linkedEstimate: string[]\n ) => {\n const originalProject = draft.original[projectId];\n\n const originalEstimatesIds = (\n (originalProject &&\n (originalProject.fields[\"estimates\"] as ProjectEstimate[])) ||\n []\n ).map(e => e.id);\n\n draft.undoEstimateLinkingState = {\n projectId: projectId,\n linkedEstimatesIds: linkedEstimate.filter(\n id => !originalEstimatesIds.includes(id)\n ),\n error: undefined,\n status: UndoEstimateLinkingStatus.OptimisticallyReady\n };\n };\n\n const updateUndoEstimateLinkingStatus = (\n projectId: string,\n status: UndoEstimateLinkingStatus,\n error: Error | undefined = undefined\n ) => {\n if (draft.undoEstimateLinkingState.projectId !== projectId) {\n return;\n }\n\n draft.undoEstimateLinkingState = {\n ...draft.undoEstimateLinkingState,\n error: error,\n status: status\n };\n };\n\n const saveProjectSuccess = (updatedProject: WithId) => {\n const project = moveLastModifiedDate(updatedProject);\n draft.original[project.id] = project;\n draft.workingCopy[project.id] = project;\n const currentIndex = draft.allIds.indexOf(project.id);\n if (currentIndex === -1) {\n draft.allIds.push(project.id);\n }\n };\n\n const saveProjectFailure = (projectId: string | undefined) => {\n if (projectId) {\n draft.workingCopy[projectId] = draft.original[projectId];\n }\n };\n\n const unlinkEstimateFromProject = (\n projectId: string,\n projectEstimateId: string\n ) => {\n const currentProject = draft.workingCopy[projectId];\n const currentLinkedEstimates = currentProject.fields?.[\"estimates\"];\n if (!currentLinkedEstimates) return;\n draft.workingCopy[projectId].fields[\n \"estimates\"\n ] = currentLinkedEstimates.filter((e: any) => e.id !== projectEstimateId);\n };\n\n const unlinkEstimatesFromProject = (\n projectId: string,\n projectEstimateId: string[]\n ) => {\n const currentProject = draft.workingCopy[projectId];\n const currentLinkedEstimates = currentProject.fields?.[\"estimates\"];\n if (!currentLinkedEstimates) return;\n draft.workingCopy[projectId].fields[\n \"estimates\"\n ] = currentLinkedEstimates.filter(\n (e: any) => !projectEstimateId.includes(e.id)\n );\n };\n\n const linkEstimatesToProjectRequest = (\n projectId: string,\n projectEstimates: LinkedEstimate[]\n ) => {\n const currentProject = draft.workingCopy[projectId];\n const currentLinkedEstimates = currentProject.fields?.[\"estimates\"];\n if (!currentLinkedEstimates) {\n draft.workingCopy[projectId].fields[\"estimates\"] = [];\n }\n if (projectEstimates) {\n draft.workingCopy[projectId].fields[\"estimates\"] = projectEstimates;\n }\n };\n\n switch (action.type) {\n case getType(actions.loadProjects.request): {\n draft.allLoaded = false;\n draft.loaded = false;\n draft.loading = true;\n break;\n }\n case getType(actions.loadProjects.success): {\n action.payload.forEach(project => {\n project = moveLastModifiedDate(project);\n if (!(project.id in draft.original)) {\n draft.allIds.push(project.id);\n }\n draft.workingCopy[project.id] = project;\n draft.original[project.id] = project;\n });\n draft.loading = false;\n draft.loaded = true;\n break;\n }\n case getType(actions.loadProjects.failure): {\n draft.loading = false;\n draft.loaded = true;\n draft.errors.push(`Error loading projects: ${action.payload.message}`);\n break;\n }\n\n case getType(actions.loadedAllRecords): {\n draft.loading = false;\n draft.loaded = true;\n draft.allLoaded = true;\n break;\n }\n\n case getType(actions.loadedFirstPage): {\n draft.loadedFirstPage = true;\n break;\n }\n\n case getType(actions.loadPreConID.failure): {\n draft.errors.push(`Error fetching PreCon Id`);\n break;\n }\n\n case getType(actions.saveProject.request): {\n draft.loading = true;\n break;\n }\n //TODO: Make me distinct from saveProject\n case getType(actions.saveNewProject.request): {\n const estimates: ProjectEstimate[] =\n action.payload.project.fields[\"estimates\"] || [];\n enableUndoEstimateLinking(\n action.payload.project.id,\n estimates.map(e => e.id)\n );\n\n const id = action.payload.project.id;\n if (!draft.workingCopy[id])\n draft.workingCopy[id] = { ...action.payload.project, id };\n break;\n }\n case getType(actions.saveProject.success): {\n draft.loading = false;\n updateUndoEstimateLinkingStatus(\n action.payload.id,\n UndoEstimateLinkingStatus.Ready\n );\n saveProjectSuccess(action.payload);\n break;\n }\n case getType(actions.saveProject.failure): {\n draft.loading = false;\n saveProjectFailure(action.payload.project.id);\n break;\n }\n case getType(actions.deleteProject.success): {\n delete draft.workingCopy[action.payload];\n delete draft.original[action.payload];\n draft.allIds = Object.keys(draft.original).map(\n key => draft.original[key].id\n );\n break;\n }\n case getType(actions.deleteProjects.success): {\n action.payload.forEach(id => {\n delete draft.workingCopy[id];\n delete draft.original[id];\n });\n draft.allIds = Object.keys(draft.original).map(\n key => draft.original[key].id\n );\n break;\n }\n case getType(actions.updateProjects): {\n const { projects } = action.payload;\n //if a single project changes, the state will be updated anyway\n // so lets run the isEqual check below until we found a single project change.\n let noProjectsChanged = true;\n projects.forEach(project => {\n project = moveLastModifiedDate(project);\n const currentIndex = draft.allIds.indexOf(project.id);\n if (project.deleted || project.archived) {\n if (currentIndex > -1) {\n draft.allIds.splice(currentIndex, 1);\n }\n if (project.id in draft.workingCopy) {\n delete draft.workingCopy[project.id];\n }\n if (project.id in draft.original) {\n delete draft.original[project.id];\n }\n } else {\n //this is an optimization to prevent some expensive selectors from refiring unnecessarily\n // Right now, a given client is receiving its own signalR updates, so state is being updated twice\n const currProjectAlreadyUpdated = noProjectsChanged\n ? isEqual(project, draft.workingCopy[project.id])\n : false;\n if (!currProjectAlreadyUpdated) {\n draft.workingCopy[project.id] = project;\n draft.original[project.id] = project;\n if (currentIndex === -1) {\n draft.allIds.push(project.id);\n }\n noProjectsChanged = false;\n }\n }\n });\n break;\n }\n case getType(actions.setSelectedViewId): {\n draft.selectedViewId = action.payload.selectedViewId;\n break;\n }\n case getType(actions.linkEstimateToProject.request): {\n enableUndoEstimateLinking(action.payload.projectId, [\n action.payload.estimateId\n ]);\n const currentProject = draft.workingCopy[action.payload.projectId];\n const currentLinkedEstimates = currentProject.fields?.[\"estimates\"];\n\n let projectEstimates: LinkedEstimate[] = [];\n const newProjectEstimate: LinkedEstimate = {\n id: action.payload.estimateId,\n selectedEstimate: true\n };\n if (!currentLinkedEstimates) {\n projectEstimates.push(newProjectEstimate);\n } else {\n if (\n !currentLinkedEstimates.find(\n (x: any) => x.id === action.payload.estimateId\n )\n ) {\n projectEstimates = currentLinkedEstimates;\n projectEstimates.push(newProjectEstimate);\n }\n }\n\n linkEstimatesToProjectRequest(\n action.payload.projectId,\n projectEstimates\n );\n break;\n }\n case getType(actions.linkEstimateToProject.success): {\n updateUndoEstimateLinkingStatus(\n action.payload.id,\n UndoEstimateLinkingStatus.Ready\n );\n saveProjectSuccess(action.payload);\n break;\n }\n case getType(actions.linkEstimateToProject.failure): {\n draft.undoEstimateLinkingState = {};\n saveProjectFailure(action.payload.projectId);\n break;\n }\n\n case getType(actions.unlinkEstimateFromProject.request): {\n unlinkEstimateFromProject(\n action.payload.projectId,\n action.payload.estimateId\n );\n break;\n }\n case getType(actions.unlinkEstimateFromProject.success): {\n saveProjectSuccess(action.payload);\n break;\n }\n case getType(actions.unlinkEstimateFromProject.failure): {\n saveProjectFailure(action.payload.projectId);\n break;\n }\n\n case getType(actions.unlinkEstimatesFromProject.request): {\n updateUndoEstimateLinkingStatus(\n action.payload.projectId,\n UndoEstimateLinkingStatus.InProgress\n );\n unlinkEstimatesFromProject(\n action.payload.projectId,\n action.payload.estimateIds\n );\n break;\n }\n case getType(actions.unlinkEstimatesFromProject.success): {\n updateUndoEstimateLinkingStatus(\n action.payload.id,\n UndoEstimateLinkingStatus.Success\n );\n saveProjectSuccess(action.payload);\n break;\n }\n case getType(actions.unlinkEstimatesFromProject.failure): {\n updateUndoEstimateLinkingStatus(\n action.payload.projectId,\n UndoEstimateLinkingStatus.Fails,\n action.payload.error\n );\n saveProjectFailure(action.payload.projectId);\n break;\n }\n\n case getType(actions.linkEstimatesToProject.request): {\n const estimateIds = action.payload.projectEstimates.map(e => e.id);\n enableUndoEstimateLinking(action.payload.projectId, estimateIds);\n\n linkEstimatesToProjectRequest(\n action.payload.projectId,\n action.payload.projectEstimates\n );\n break;\n }\n case getType(actions.linkEstimatesToProject.success): {\n updateUndoEstimateLinkingStatus(\n action.payload.id,\n UndoEstimateLinkingStatus.Ready\n );\n saveProjectSuccess(action.payload);\n break;\n }\n case getType(actions.linkEstimatesToProject.failure): {\n draft.undoEstimateLinkingState = {};\n saveProjectFailure(action.payload.projectId);\n break;\n }\n case getType(actions.loadHJJobs.success): {\n const jobs = action.payload;\n draft.hJJobs = jobs;\n break;\n }\n case getType(actions.loadHJJobs.failure): {\n draft.hJJobs = [];\n break;\n }\n case getType(actions.resetUndoEstimatesLinking): {\n draft.undoEstimateLinkingState = {};\n break;\n }\n case getType(actions.updateProjectFieldMetadata): {\n const projectId = action.payload.projectId;\n const fieldId = action.payload.fieldId;\n const newFieldMetadata = action.payload.projectFieldMetadata;\n\n if (!draft.workingCopy[projectId].fieldsMetadata) {\n draft.workingCopy[projectId].fieldsMetadata = {};\n }\n draft.workingCopy[projectId].fieldsMetadata[fieldId] = newFieldMetadata;\n break;\n }\n case getType(actions.updateProjectMetadata): {\n const projectId = action.payload.projectId;\n const newProjectMetadata = action.payload.projectMetadata;\n if (!draft.workingCopy[projectId].fieldsMetadata) {\n draft.workingCopy[projectId].fieldsMetadata = {};\n }\n draft.workingCopy[projectId].fieldsMetadata = newProjectMetadata;\n break;\n }\n case getType(actions.createNewProjectLocally): {\n const newLocalProject = action.payload.newLocalProject;\n draft.workingCopy[newLocalProject.id] = newLocalProject;\n break;\n }\n case getType(actions.deleteLocallyCreatedProject): {\n const deletingProjectId = action.payload.deletingProjectID;\n delete draft.workingCopy[deletingProjectId];\n delete draft.original[deletingProjectId];\n break;\n }\n case getType(actions.loadHJJobCostTypeCosts.request): {\n draft.hJJobCostTypeCostsLoading = true;\n break;\n }\n case getType(actions.loadHJJobCostTypeCosts.success): {\n const jobs = action.payload;\n\n for (const job of jobs) {\n draft.hJJobCostTypeCosts[job.jobId] = job;\n }\n\n draft.hJJobCostTypeCostsLoading = false;\n break;\n }\n case getType(actions.loadHJJobCostTypeCosts.failure): {\n draft.hJJobCostTypeCostsLoadingError = action.payload;\n draft.hJJobCostTypeCostsLoading = false;\n break;\n }\n }\n });\n};\n\nconst moveLastModifiedDate = (project: WithId) => {\n project.fields.lastModified = project.lastModified;\n project.fields.lastModifiedByUserId = project.lastModifiedByUserId;\n return project;\n};\n\nexport type SelectorState = StateSlice &\n views.SelectorState &\n schemas.StateSlice &\n config.StateSlice &\n account.StateSlice &\n estimates.StateSlice;\n\n// Selectors\nconst getAllIds = ({ projects }: SelectorState) => projects.allIds;\nconst getLoaded = ({ projects }: SelectorState) => projects.loaded;\nconst getProjectHash = ({ projects }: SelectorState) => projects.workingCopy;\nconst getLoading = ({ projects }: SelectorState) => projects.loading;\nconst getProjectHashPristine = ({ projects }: SelectorState) =>\n projects.original;\nconst getEstimateHash = ({ estimates }: SelectorState) => estimates.workingCopy;\nconst getAllEstimatesLoaded = ({ estimates }: SelectorState) =>\n estimates.allLoaded;\nconst getAllProjectsLoaded = ({ projects }: SelectorState) =>\n projects.allLoaded;\nconst getFirstPageLoaded = ({ projects }: SelectorState) =>\n projects.loadedFirstPage;\nconst getErrors = ({ projects }: SelectorState) => projects.errors;\nconst getHJJobs = ({ projects }: SelectorState) => projects.hJJobs;\nconst getUndoEstimatesLinkingState = ({ projects }: SelectorState) =>\n projects.undoEstimateLinkingState;\nconst getHJJobCostTypeCosts = ({ projects }: SelectorState) =>\n projects.hJJobCostTypeCosts;\nconst getHJJobCostTypeCostsLoading = ({ projects }: SelectorState) =>\n projects.hJJobCostTypeCostsLoading;\n\nconst getProjectFieldsLookup = createSelector(\n [schemas.selectors.getCompleteProjectSchema],\n schema => {\n if (schema) {\n return schema.fields;\n }\n return {};\n }\n);\n\nconst getProjectSectionsList = createSelector(\n [schemas.selectors.getProjectSchema],\n schema => {\n if (schema) {\n return schema.orderedSections;\n }\n return [];\n }\n);\n\nconst getProjectSectionsLookup = createSelector(\n [schemas.selectors.getProjectSchema],\n schema => {\n if (schema) {\n return schema.sections;\n }\n return {};\n }\n);\n\nconst getOrderedProjectSections = createSelector(\n [getProjectSectionsLookup, getProjectSectionsList],\n (sectionLookup, sectionList) => {\n return sectionList.map(sectionId => sectionLookup[sectionId]);\n }\n);\n\nconst getProjectFields = createSelector(\n [getProjectFieldsLookup],\n fieldsLookup => {\n return values(fieldsLookup);\n }\n);\n\nconst getFilterableProjectFields = createSelector([getProjectFields], fields =>\n fields.filter(field => !field.hiddenInTable)\n);\n\nconst getFilterableProjectFieldsLookup = createSelector(\n [getFilterableProjectFields],\n fields => keyBy(fields, \"id\")\n);\n\nconst getProjectFieldsBySection = createSelector(\n [getOrderedProjectSections, getProjectFieldsLookup],\n (sections, fieldsLookup) => {\n return sections.map(section => {\n return {\n ...section,\n fields: section.fields.map(fieldId => fieldsLookup[fieldId])\n };\n });\n }\n);\n\nconst getFilterableProjectFieldsBySection = createSelector(\n [getOrderedProjectSections, getFilterableProjectFieldsLookup],\n (sections, fieldsLookup) => {\n return sections.map(section => {\n return {\n ...section,\n fields: section.fields\n .filter(fieldId => fieldId in fieldsLookup)\n .map(fieldId => fieldsLookup[fieldId])\n };\n });\n }\n);\n\nconst getFilterableProjectFieldsOrdered = createSelector(\n [getFilterableProjectFieldsBySection],\n\n sections => {\n return flatten(sections.map(section => section.fields));\n }\n);\n\nexport const getEstimateFields = createSelector(\n [getProjectFields],\n selectEstimatesFields\n);\n\nconst getEstimateTotalRelatedFieldIds = createSelector(\n [getProjectFields],\n fields => {\n return fields\n .filter(field => {\n const isEstimateField =\n field.lookup &&\n (field.id.includes(\"values.totals\") ||\n field.id.includes(\"values.customTotals\"));\n\n const calculatedFieldConfig = calculatedFieldService.getConfig(field);\n const isCalculatedFieldWithEstimates =\n field.type === SchemaFieldType.Calculated &&\n calculatedFieldService.hasEstimatesVariables(calculatedFieldConfig);\n\n return isEstimateField || isCalculatedFieldWithEstimates;\n })\n .map(field => field.id);\n }\n);\nconst getFilterableFields = createSelector([getProjectFields], fields => {\n return fields.filter(field => {\n if (field.hiddenInTable) {\n return false;\n }\n\n switch (field.type) {\n case SchemaFieldType.ShortText:\n return true;\n case SchemaFieldType.Boolean:\n return true;\n case SchemaFieldType.Number:\n return true;\n case SchemaFieldType.Currency:\n return true;\n case SchemaFieldType.Date:\n return true;\n case SchemaFieldType.DateTime:\n return true;\n case SchemaFieldType.List:\n return true;\n case SchemaFieldType.PreConId:\n return true;\n default:\n return false;\n }\n });\n});\n\nconst getSelectableFields = createSelector([getFilterableFields], fields => {\n return fields.filter(\n field =>\n field.type !== SchemaFieldType.Number &&\n field.type !== SchemaFieldType.Currency\n );\n});\n\nexport const getProjectsLookup = createSelector(\n [getAllProjectsLoaded, getFirstPageLoaded, getProjectHash],\n (loaded, firstPageLoaded, hash) => {\n if (loaded || firstPageLoaded) return hash;\n else return false;\n }\n);\n\nexport const getEstimatesLookup = createSelector(\n [getAllEstimatesLoaded, getEstimateHash],\n (loaded, hash) => {\n if (loaded) return hash;\n else return false;\n }\n);\n\nexport interface LinkedEstimate {\n selectedEstimate?: boolean;\n id: string;\n}\n\nconst getLinkedEstimates = createSelector(getProjectHash, projectsHash => {\n const result = new Map();\n\n if (!projectsHash) {\n return result;\n }\n\n const projects = Object.values(projectsHash).filter(\n p => p.fields?.estimates?.length\n );\n\n for (const project of projects) {\n const projectEstimates = project.fields.estimates;\n\n for (const estimate of projectEstimates as LinkedEstimate[]) {\n const linkedEstimates = result.get(estimate.id);\n\n if (linkedEstimates) {\n linkedEstimates.push(estimate);\n } else {\n result.set(estimate.id, [estimate]);\n }\n }\n }\n\n return result;\n});\n\nexport const enrichProjectWithEstimates = (\n project: Pick,\n estimateLookup: Record>,\n projectFields: SchemaField[]\n) => {\n //get selectedEstimates for project as list of estimates\n const selectedEstimates: WithId[] =\n project.fields.estimates\n ?.filter((estimate: LinkedEstimate) => {\n if (estimate.selectedEstimate && estimate.id in estimateLookup) {\n const selectedEstimate = estimateLookup[estimate.id];\n if (selectedEstimate?.values?.code) {\n return true;\n }\n }\n\n return false;\n })\n .map((estimate: LinkedEstimate) => estimateLookup[estimate.id]) ?? [];\n project.fields.estimates = project.fields.estimates?.map(\n (est: { id: string; selected?: boolean }) => ({\n ...est,\n code: estimateLookup[est.id]?.values?.code\n })\n );\n const estimateFields = selectEstimatesFields(projectFields);\n\n estimateFields.forEach(estimateField => {\n populateProjectWithEstimateValues(\n project,\n estimateField,\n selectedEstimates\n );\n });\n};\n\nexport const enrichProjectWithTableLookupFields = (\n project: Pick,\n projectFields: SchemaField[]\n) => {\n const tableLookupFields = projectFields.filter(\n f => f.config.tableLookupField\n );\n\n for (const field of tableLookupFields) {\n const columnId = field.config.columnId;\n\n const value: Record[] =\n project.fields[field.config.tableFieldId];\n\n if (!value) {\n continue;\n }\n\n project.fields[field.id] = value.reduce(\n (acc, curr) => acc + +(curr[columnId as string] || 0),\n 0\n );\n }\n};\n\nexport const enrichProject = (\n project: WithId,\n [\n users,\n clients,\n permissions,\n currentUser,\n estimateLookup,\n jobs,\n projectFields\n ]: [\n Record,\n Record,\n PreConPermissions,\n Readonly,\n Record>,\n JobDto[],\n SchemaField[]\n ]\n) => {\n const projectCopy = fastDeepClone(project);\n\n //get last modified by\n populateProjectWithLastModifiedBy(projectCopy, users, clients);\n\n //get bid results\n populateProjectWithBidResults(projectCopy, currentUser);\n\n //get job code/description\n populateHJJobFieldsWithValues(projectCopy, jobs);\n\n enrichProjectWithEstimates(projectCopy, estimateLookup, projectFields);\n\n enrichProjectWithTableLookupFields(projectCopy, projectFields);\n\n const calculatedFields = projectFields.filter(\n p => p.type === SchemaFieldType.Calculated\n );\n calculatedFieldService.setCalculateFields(\n calculatedFields,\n projectCopy,\n permissions.estimateInsights\n );\n\n return projectCopy;\n};\n\nconst selectAccountProjectData = createSelector(\n [\n account.selectors.getPermissions,\n account.selectors.getHcssUser,\n account.selectors.getCompanyUsers,\n account.selectors.getCompanyClients\n ],\n (permissions, currentUser, companyUsers, identityClients) => ({\n permissions,\n currentUser,\n companyUsers,\n identityClients\n })\n);\n\nexport const getAllProjectsWithEstimates = createSelector(\n [\n getProjectsLookup,\n getEstimatesLookup,\n getProjectFields,\n selectAccountProjectData,\n getHJJobs\n ],\n (\n projectHash,\n estimateLookup,\n projectFields,\n { permissions, currentUser, companyUsers, identityClients },\n jobs\n ) => {\n if (!permissions || !currentUser || companyUsers.length < 1) {\n return [];\n }\n if (!projectHash || !estimateLookup) {\n return Object.values(projectHash);\n }\n const users = createUserDictFromUserList(companyUsers);\n const clients: Record = identityClients.reduce(\n (acc, client) => ({ ...acc, [client.clientId]: { ...client } }),\n {}\n );\n\n return Object.values(projectHash).map(originalProject =>\n enrichProject(originalProject, [\n users,\n clients,\n permissions,\n currentUser,\n estimateLookup,\n jobs,\n projectFields\n ])\n );\n }\n);\n\nconst getProjectEstimateMapping = createSelector(\n [getAllProjectsWithEstimates],\n projects => {\n const mapping: Record[]> = {};\n projects.forEach(project => {\n const linkedEstimates = project.fields?.estimates ?? [];\n linkedEstimates.forEach((linkedEstimate: LinkedEstimate) => {\n if (linkedEstimate.id) {\n if (!mapping[linkedEstimate.id]) {\n mapping[linkedEstimate.id] = [];\n }\n mapping[linkedEstimate.id].push(project);\n }\n });\n });\n return mapping;\n }\n);\n\nconst getCurrentProjectViewFiltersLookup = createSelector(\n [views.selectors.getCurrentProjectView],\n view => {\n return view?.filters ?? [];\n }\n);\n\nconst getCurrentProjectViewFiltersList = createSelector(\n [\n getCurrentProjectViewFiltersLookup,\n getProjectFieldsLookup,\n schemas.selectors.isPreConIdEnabled\n ],\n (filters, fields, isPreConIdEnabled) => {\n return values(filters)\n .filter(filter => {\n if (filter.columnName === \"preconId\" && !isPreConIdEnabled)\n return false;\n return filter.columnName in fields && filter.value !== null;\n })\n .map(filter => ({\n ...filter,\n fieldType: fields[filter.columnName].type\n }));\n }\n);\n\nconst getIsProjectsFilteredByEstimateTotals = createSelector(\n [getCurrentProjectViewFiltersList, getEstimateTotalRelatedFieldIds],\n (filters, fieldIds) => {\n for (const filter of filters) {\n const isFilterValueEmpty =\n filter.value?.from === undefined && filter.value?.to === undefined;\n\n if (fieldIds.includes(filter.columnName) && !isFilterValueEmpty)\n return true;\n }\n return false;\n }\n);\n\nconst getCurrentProjectViewFields = createSelector(\n [views.selectors.getCurrentProjectView, getProjectFields],\n (view, fields) => {\n if (view && fields) {\n return fields.filter(field => view.displayedColumns.includes(field.id));\n }\n return [];\n }\n);\n\nconst getFilteredProjects = createSelector(\n [\n getAllProjectsWithEstimates,\n getCurrentProjectViewFiltersList,\n getProjectFieldsLookup\n ],\n (projects, filters, fields) => {\n if (projects && filters) {\n return projects.filter(project => {\n // tslint:disable-next-line: prefer-for-of\n for (let i = 0; i < filters.length; i++) {\n const filter = filters[i];\n const field = fields[filter.columnName];\n const value = project.fields[filter.columnName];\n if (!filterField(field.type, filter, value)) {\n return false;\n }\n }\n return true;\n });\n }\n\n return [];\n }\n);\n\nconst getSelectableFieldList = createSelector([getSelectableFields], fields => {\n return fields\n .map(column => ({ display: column.name, value: column.id }))\n .sort((a, b) =>\n a.display.localeCompare(b.display, undefined, { sensitivity: \"base\" })\n );\n});\n\nconst getShareableFieldsFromProjectSection = createSelector(\n [getProjectFieldsBySection],\n sections => {\n const firstSection = sections.filter(\n s => !constantSections.includes(s.id)\n )[0];\n\n if (!firstSection) {\n return [];\n }\n\n return firstSection.fields\n .reduce((result: SchemaField[], curr) => {\n if (\n curr.type !== SchemaFieldType.Estimates &&\n curr.type !== SchemaFieldType.BidResults &&\n curr.type !== SchemaFieldType.Links &&\n curr.type !== SchemaFieldType.Checklist\n ) {\n result.push(curr);\n }\n return result;\n }, [])\n .filter(field => !field.hiddenInTable);\n }\n);\n\nexport const selectors = {\n getAllIds,\n getProjectSchema: schemas.selectors.getProjectSchema,\n getProjectEstimateMapping,\n getProjectFieldsLookup,\n getProjectHash,\n getProjectHashPristine,\n getCurrentProjectViewFields,\n getCurrentProjectView: views.selectors.getCurrentProjectView,\n getCurrentProjectViewClean: views.selectors.getCurrentProjectViewClean,\n getAllProjectsWithEstimates,\n getFilterableFields,\n getSelectableFields,\n getCurrentProjectViewFiltersList,\n getLoaded,\n getLoading,\n getProjectFieldsBySection,\n getFilteredProjects,\n getFilterableProjectFieldsBySection,\n getCalendarSubscribeIsActive: calendars.selectors.getCalendarPanelActive,\n getFilterableProjectFieldsOrdered,\n getSelectableFieldList,\n getShareableFieldsFromProjectSection,\n getIsProjectsFilteredByEstimateTotals,\n getErrors,\n getAllProjectLoadedStatus: getAllProjectsLoaded,\n getFirstPageLoaded,\n getHJJobs,\n getLinkedEstimates,\n getUndoEstimatesLinkingState,\n getHJJobCostTypeCosts,\n getHJJobCostTypeCostsLoading\n};\n","import * as React from \"react\";\nimport { ReactourStep, ReactourStepContentArgs } from \"reactour\";\nimport { Tutorials } from \"../../api\";\nimport { strings } from \"localization\";\nimport { useNavigationControllerContext } from \"../../core/components/hcss-navigation/contexts/navigation-controller-context\";\n\nexport const tutorialSteps: Record = {\n projectsList: [\n {\n content: strings.tutorials.projectTutorial.create,\n selector: '[data-testid=\"projects-header-new\"]'\n },\n {\n content: strings.tutorials.projectTutorial.details,\n selector: \"table:nth-child(2) tr td:nth-child(2)\",\n position: \"bottom\"\n },\n\n {\n content: strings.tutorials.projectTutorial.rearrange,\n selector: \"table:nth-child(1)\"\n },\n\n {\n content: strings.tutorials.projectTutorial.group,\n selector: \".panel-heading div:nth-child(1)\"\n },\n\n {\n content: props => (\n \n {strings.tutorials.projectTutorial.other}\n \n ),\n selector: '[data-testid=\"projectsmenu-options\"] ul',\n action: node => {\n if (node.clientHeight === 0) {\n node.parentElement.firstChild.click();\n }\n }\n },\n\n {\n content: strings.tutorials.projectTutorial.save,\n selector: '[data-tut=\"templates\"]'\n },\n\n {\n selector: '[data-testid=\"nav-projects\"]',\n content: props => {\n return (\n
\n
\n \n {strings.tutorials.projectTutorial.customizable}\n \n
\n
\n \n
\n
\n );\n }\n }\n ]\n};\n\nexport const tutorialStepsNoAddEdit: Record = {\n projectsList: [\n {\n content:\n \"Clicking on the project name allows you to view project details after it has already been created.\",\n selector: \"table:nth-child(2) tr td:nth-child(2)\",\n position: \"bottom\"\n },\n {\n content:\n \"Columns can be rearranged by clicking and dragging the column headers left or right.\",\n selector: \"table:nth-child(1)\"\n },\n {\n content:\n \"Click and drag the column header into this area to group results by that column.\",\n selector: \".panel-heading div:nth-child(1)\"\n },\n {\n content: props => (\n \n Other customizations and reports are available from the options menu\n or by right clicking a column header.\n \n ),\n selector: '[data-testid=\"projectsmenu-options\"] ul',\n action: node => {\n if (node.clientHeight === 0) {\n node.parentElement.firstChild.click();\n }\n }\n },\n {\n selector: '[data-tut=\"templates\"]',\n content: ({ close }) => {\n return (\n
\n
\n Once you have the table setup in the way you like, you can save it\n as a template. Use the options menu to save new templates, or to\n select a default one.\n
\n
\n \n
\n
\n );\n }\n }\n ]\n};\n\n// this code is a super hack to get the mask to update whenever a dropdown is clicked\nconst UpdateStep: React.FunctionComponent = ({\n step,\n goTo,\n children\n}) => {\n const controller = useNavigationControllerContext();\n const { setFlyoutIsOpen } = controller;\n const [prevRendered, setPrevRendered] = React.useState(false);\n\n if (step === 7) {\n setFlyoutIsOpen(true);\n } else {\n setFlyoutIsOpen(false);\n }\n\n React.useLayoutEffect(() => {\n if (!prevRendered) {\n goTo(step - 2);\n goTo(step - 1);\n setPrevRendered(true);\n }\n }, [goTo, step, prevRendered]);\n React.useLayoutEffect(() => {\n if (prevRendered) {\n goTo(step - 1);\n }\n }, [goTo, step, prevRendered]);\n return {children};\n};\n","import React from \"react\";\nimport constate from \"constate\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Tutorials } from \"../../api\";\nimport { tutorialSteps, tutorialStepsNoAddEdit } from \"./tutorial-steps\";\n\nimport {\n actions as viewActions,\n selectors as viewSelectors\n} from \"modules/views\";\n\nimport {\n usePermissions,\n actions as accountActions,\n selectors as accountSelectors\n} from \"modules/account\";\n\nconst defaultTutorialState: Tutorials = {\n projectsList: true\n};\n\nexport function useTutorial(tutorialId: keyof Tutorials) {\n const permissions = usePermissions();\n\n const preferences = useSelector(accountSelectors.getPreferences);\n const tutorials =\n preferences && preferences.tutorials\n ? preferences.tutorials\n : defaultTutorialState;\n\n const view = useSelector(viewSelectors.getCurrentProjectView);\n const dispatch = useDispatch();\n const [isOpen, setisOpen] = React.useState(false);\n\n const tutorialCompleted = tutorials[tutorialId];\n\n const openTutorial = React.useCallback(() => {\n setisOpen(true);\n dispatch(\n viewActions.updateViewType(view.id, {\n list: true,\n calendar: false,\n charts: false,\n map: false\n })\n );\n }, [view, dispatch]);\n const closeTutorial = React.useCallback(() => {\n setisOpen(false);\n dispatch(accountActions.setTutorialCompleted(tutorialId));\n }, [dispatch, tutorialId]);\n\n return React.useMemo(\n () => ({\n showBanner: !tutorialCompleted && !isOpen,\n isOpen,\n openTutorial,\n closeTutorial,\n steps:\n permissions?.write ?? true\n ? tutorialSteps[tutorialId]\n : tutorialStepsNoAddEdit[tutorialId]\n }),\n [\n tutorialCompleted,\n isOpen,\n openTutorial,\n closeTutorial,\n permissions,\n tutorialId\n ]\n );\n}\n\nconst [provider, context] = constate(() => {\n const projectsList = useTutorial(\"projectsList\");\n return { projectsList };\n});\n\nexport const TutorialProvider = provider;\nexport const useTutorialContext = context;\n","import config from \"../../../config\";\n\nexport interface Environment {\n oidc: {\n authority: string;\n client_id: string;\n redirect_uri: string;\n silent_redirect_uri: string;\n post_logout_redirect_uri: string;\n response_type: string;\n scope: string;\n };\n baseUrl: string;\n idsrvBaseUrl: string;\n firebaseBaseUrl: string;\n}\n\nclass EnvService implements Environment {\n oidc: {\n authority: string;\n client_id: string;\n redirect_uri: string;\n silent_redirect_uri: string;\n post_logout_redirect_uri: string;\n response_type: string;\n scope: string;\n };\n baseUrl: string;\n firebaseBaseUrl: string;\n idsrvBaseUrl: string;\n\n constructor() {\n this.oidc = config.oidc;\n this.baseUrl = config.endpoints.PRECON;\n this.idsrvBaseUrl = config.oidc.authority;\n this.firebaseBaseUrl = config.firebaseConfig.baseURL;\n }\n}\n\nexport const envService = new EnvService();\n","import { SchemaFieldType } from \"api\";\nimport {\n VendorSolicitationStatus,\n SolicitationDashboardFilter\n} from \"core/models/enums\";\n\nexport const quoteDashboardSchema = () => ({\n id: \"quoteDashboard\",\n name: \"Quote Dashboard\",\n schemaName: \"quoteDashboard\",\n orderedSections: [\"project\"],\n fields: {\n name: {\n id: \"name\",\n name: \"Project Name\",\n type: SchemaFieldType.ShortText,\n lookup: false,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {},\n required: false\n },\n lastModified: {\n id: \"lastModified\",\n name: \"Last Updated\",\n type: SchemaFieldType.DateTime,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {},\n required: false\n },\n quoteFolders: {\n id: \"quoteFolders\",\n name: \"Quote Folders\",\n type: SchemaFieldType.List,\n lookup: true,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: []\n },\n required: false\n },\n status: {\n id: \"status\",\n name: \"Status\",\n type: SchemaFieldType.List,\n lookup: false,\n standard: true,\n protected: true,\n readOnly: true,\n hiddenInForm: true,\n hiddenInTable: false,\n config: {\n listValues: filterListValues\n },\n required: false\n }\n },\n sections: {\n project: {\n id: \"project\",\n name: \"Project\",\n fields: [\"name\", \"lastModified\"]\n }\n }\n});\n\nexport const filterListValues: Array<{\n display: string;\n value: SolicitationDashboardFilter;\n}> = [\n {\n display: \"Awaiting Response\",\n value: VendorSolicitationStatus.SentToSub\n },\n {\n display: \"Bidding\",\n value: VendorSolicitationStatus.SubAccepted\n },\n {\n display: \"Manually Entered\",\n value: VendorSolicitationStatus.GCManuallyEntered\n },\n {\n display: \"New Prices Received\",\n value: VendorSolicitationStatus.SentToGC\n },\n {\n display: \"Not Bidding\",\n value: VendorSolicitationStatus.SubRejected\n },\n { display: \"Queued for Sync\", value: VendorSolicitationStatus.GCApproved },\n { display: \"Rejected\", value: VendorSolicitationStatus.GCIgnored },\n { display: \"Draft\", value: \"draft\" }\n];\n","import {\n ContactDto,\n IContactProduct\n} from \"api/GeneratedClients/ContactsClient\";\nimport { Modal, Button as PreConButton } from \"hcss-components\";\nimport Button from \"@mui/material/Button\";\nimport React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n actions as contactsActions,\n selectors as contactsSelectors\n} from \"modules/contacts\";\nimport { Flex } from \"hcss-core\";\nimport { Formik } from \"formik\";\nimport TextField from \"@mui/material/TextField\";\nimport MuiGrid from \"@mui/material/Grid\";\nimport styled from \"styled-components\";\nimport { formatPhoneNumber, TextOverflow } from \"core\";\nimport { StyledForm, TimesButton } from \"./contact-list-modal\";\nimport * as Yup from \"yup\";\nimport {\n CompanyBadge,\n CompanyDropdownFilter,\n CompanyFieldData,\n CompanyOption\n} from \"modules/schemas/components/fields/CompanyInput\";\nimport { DropdownList } from \"react-widgets\";\nimport { strings } from \"localization\";\nimport { Divider } from \"@mui/material\";\nimport { useHistory } from \"react-router-dom\";\nimport { DropdownContainer } from \"modules/schemas/components/fields/MultiSelectListInput\";\nimport Alert from \"@mui/material/Alert\";\nimport { differenceBy, sortBy } from \"lodash-es\";\nimport { IMoveContactModalProps } from \"../interfaces/IMoveContactModalProps\";\nimport { IVendorListOption } from \"../interfaces/IVendorListOption\";\n\nexport const MoveContactModal = (props: IMoveContactModalProps) => {\n const { movingContact, vendor } = props;\n const [removingContactProducts, setRemovingContactProducts] = useState<\n IContactProduct[]\n >();\n const [contact, setContact] = useState(movingContact);\n const [\n selectedVendor,\n setSelectedVendor\n ] = useState();\n const dispatch = useDispatch();\n useEffect(() => {\n setContact(movingContact);\n }, [movingContact]);\n const history = useHistory();\n const showModal = useSelector(contactsSelectors.getShowMoveContactModal);\n const vendorDataOptions = useSelector(contactsSelectors.getVendorDataOptions);\n const options: IVendorListOption[] = vendorDataOptions\n .map(data => {\n return {\n display: `${data.code} - ${data.name}`,\n value: data,\n code: data.code,\n id: data.id,\n products: data.products\n };\n })\n .filter(op => op.id !== vendor?.id);\n const onCancelHandler = () => {\n setRemovingContactProducts([]);\n setSelectedVendor(null);\n dispatch(contactsActions.setShowMoveContactModal(false));\n };\n\n const onMoveHandler = (contact: ContactDto) => {\n const newVendorId = selectedVendor?.id;\n const oldVendorId = contact.companyId;\n const removingContactProductIds = removingContactProducts?.map(\n p => p.productTypeId\n );\n contact.companyId = newVendorId;\n contact.vendorLocationId = undefined;\n let oldProducts: IContactProduct[] = [];\n let newProducts: IContactProduct[] = [];\n if (contact.products) {\n oldProducts = contact.products;\n newProducts = contact.products?.filter(\n cp => !removingContactProductIds?.includes(cp.productTypeId)\n );\n }\n contact.products = newProducts;\n if (!!!(selectedVendor && oldVendorId && newVendorId)) return;\n setSelectedVendor(null);\n setRemovingContactProducts([]);\n dispatch(\n contactsActions.moveContact.request({\n oldVendorId: oldVendorId,\n newVendorId: newVendorId,\n oldProducts: oldProducts,\n newProducts: newProducts,\n contact: contact,\n history\n })\n );\n };\n const onSelectCompanyHandler = (data: IVendorListOption) => {\n const vendorDestinationProducts = data.products.map(vp => ({\n ...vp.product,\n vendorProductId: vp.id,\n productTypeId: vp.product?.id\n }));\n const removingContactProducts = differenceBy(\n contact.products,\n vendorDestinationProducts,\n \"productTypeId\"\n );\n const sortedRemovingContactProducts = sortBy(\n removingContactProducts,\n p => p.code\n );\n setRemovingContactProducts(sortedRemovingContactProducts);\n setSelectedVendor(data.value);\n };\n\n return (\n {}\n }\n >\n \n \n \n {strings.contactManagement.contactListMoveContactModal.moveContact}\n  \n \n \n {movingContact.firstName} {movingContact.lastName}\n \n \n \n {\n onCancelHandler();\n }}\n >\n ×\n \n \n \n \n {\n onMoveHandler(values);\n }}\n >\n {(formik: any) => (\n \n \n \n

\n {\n strings.contactManagement.contactListMoveContactModal\n .fromCompany\n }\n

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

\n {\n strings.contactManagement.contactListMoveContactModal\n .toCompany\n }\n

\n \n \n
\n \n \n CompanyDropdownFilter(option, search)\n }\n textField=\"display\"\n valueField=\"code\"\n value={selectedVendor}\n data={options}\n onChange={onSelectCompanyHandler}\n messages={{\n emptyList:\n strings.projects.setup.message.emptyCompanyList\n }}\n itemComponent={({ item }) => (\n \n )}\n />\n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {removingContactProducts && removingContactProducts.length > 0 && (\n \n
\n {removingContactProducts.length === 1\n ? strings.contactManagement.contactListMoveContactModal\n .removingOneProductAlert\n : strings.contactManagement.contactListMoveContactModal\n .removingProductsAlert}\n \n {removingContactProducts.map(p => p.code).join(\", \")}\n \n
\n
\n )}\n
\n \n \n \n \n \n \n \n {\n strings.contactManagement.contactListMoveContactModal\n .buttonMove\n }\n \n \n \n \n
\n )}\n \n
\n \n );\n};\n\nconst YupValidationSchema = Yup.object({\n emailAddress: Yup.string().email(\"Invalid email address\")\n});\n\nconst StyledTextField = styled(TextField)`\n height: 7rem;\n width: 100%;\n`;\n\nexport const MoveContactSuccessNotification = (\n vendorId: string,\n history: any\n) => {\n const onClickHandler = () => {\n history.replace(`/contacts/${vendorId}`);\n };\n return (\n \n {strings.contactManagement.contactList.visitContact}\n \n );\n};\n","import React, { useMemo } from \"react\";\nimport { useLocation, useHistory } from \"react-router-dom\";\nimport { ConcreteColors } from \"hcss-components\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { strings } from \"localization\";\nimport { UserType, CurrentUser } from \"core\";\n\nimport {\n useAuthorization,\n AccountAuthorization,\n useHcssUser\n} from \"modules/account\";\n\nimport {\n IconName,\n IconPrefix,\n Transform\n} from \"@fortawesome/fontawesome-svg-core\";\n\nimport {\n GlobalSideNavigation,\n GlobalItem\n} from \"core/components/hcss-navigation/\";\n\ninterface PrimaryItem {\n key: SideNavigationOptions;\n testId: string;\n path: string;\n iconPrefix?: IconPrefix;\n iconTransform?: string | Transform;\n iconName: IconName;\n title: string;\n}\n\nexport enum SideNavigationOptions {\n Projects = \"projects\",\n Estimates = \"estimates\",\n Contacts = \"contacts\"\n}\n\nconst primaryItems: PrimaryItem[] = [\n {\n key: SideNavigationOptions.Projects,\n testId: \"sidenav-item-projects\",\n title: strings.common.modules.projectTracking,\n path: \"/projects\",\n iconName: \"folder-open\"\n },\n {\n key: SideNavigationOptions.Estimates,\n testId: \"sidenav-item-estimates\",\n title: strings.common.modules.estimating,\n path: \"/estimates\",\n iconName: \"file-invoice-dollar\"\n },\n {\n key: SideNavigationOptions.Contacts,\n testId: \"sidenav-item-contacts\",\n title: strings.common.modules.contacts,\n path: \"/contacts\",\n iconName: \"address-book\"\n }\n];\n\nexport const SideNavigation = () => {\n const currentPath = useLocation().pathname;\n const history = useHistory();\n const auth = useAuthorization();\n const user = useHcssUser();\n\n // Green Styling\n const style: React.CSSProperties =\n user.type === UserType.Subcontractor\n ? { backgroundColor: \"#06885d\" }\n : { backgroundColor: ConcreteColors.gray200 };\n\n const items = useMemo(() => {\n const buttonColor =\n user.type === UserType.Subcontractor\n ? { default: \"#d9d9d9\", selected: \"#f0f0f0\", hover: \"#f0f0f0\" }\n : undefined;\n\n const buttonBackgroundColor =\n user.type === UserType.Subcontractor\n ? { default: \"transparent\", selected: \"#006644\", hover: \"#006644\" }\n : undefined;\n\n return primaryItems\n .filter(p => checkAccess(auth, user, p.key))\n .map(i => (\n history.push(i.path)}\n isSelected={currentPath.startsWith(i.path)}\n buttonColor={buttonColor}\n buttonBackgroundColor={buttonBackgroundColor}\n icon={\n \n }\n />\n ));\n }, [auth, currentPath, history, user]);\n\n return (\n \n );\n};\n\nconst checkAccess = (\n auth: AccountAuthorization,\n user: CurrentUser,\n key: SideNavigationOptions\n) => {\n const isPreconUser = user.type === UserType.HcssSubscription;\n\n switch (key) {\n case SideNavigationOptions.Projects:\n return isPreconUser;\n case SideNavigationOptions.Estimates:\n return isPreconUser;\n case SideNavigationOptions.Contacts:\n return true;\n default:\n return true;\n }\n};\n","import {\n LayoutConcrete as Layout,\n notify,\n useDropdownMenuManager\n} from \"hcss-components\";\nimport React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { useTutorialContext } from \"../../../tutorials/use-tutorial\";\nimport { strings } from \"localization\";\nimport { useHcssUser } from \"modules/account\";\nimport { UserType } from \"core\";\nimport config from \"config\";\n\nexport const HelpMenuOverride: React.FC = () => {\n const location = useLocation();\n const { type } = useHcssUser();\n\n return (\n \n
\n \n {strings.layout.help.helpCenter}\n \n \n {strings.layout.help.contact}\n \n {type === UserType.HcssSubscription && (\n \n {strings.layout.help.phone}\n \n )}\n \n {type === UserType.HcssSubscription && (\n \n {strings.layout.help.suggestion}\n \n )}\n \n {strings.layout.help.about}\n \n \n {strings.layout.help.privacy}\n \n {location.pathname === \"/projects\" &&\n !location.search.includes(\"calendar\") && (\n \n {strings.layout.help.tutorial}\n \n )}\n
\n
\n );\n};\n\n// TODO: Specify a type to onClick\nconst ProjectsTutorialMenu: React.FC<{ onClick: any }> = ({\n onClick: handleClose,\n children\n}) => {\n const tutorial = useTutorialContext();\n\n return (\n <>\n \n {\n handleClose();\n tutorial.projectsList.openTutorial();\n }}\n iconClassName=\"fa fa-question-circle-o\"\n >\n {children}\n \n \n );\n};\n\n// eslint-disable-next-line react-hooks/rules-of-hooks\nconst ConnectedProjectsTutorialMenu = useDropdownMenuManager(\n ProjectsTutorialMenu\n);\n","import React, { useEffect, useState } from \"react\";\nimport { usePreferences, actions } from \"modules/account\";\nimport { useDispatch } from \"react-redux\";\nimport { regions, strings } from \"localization\";\nimport {\n FormControl,\n InputAdornment,\n InputLabel,\n MenuItem,\n Select\n} from \"@mui/material\";\nimport LanguageIcon from \"@mui/icons-material/Language\";\n\nexport interface LanguageListItem {\n value: string;\n label: string;\n}\n\nexport const RegionMenuItem: React.FC = () => {\n const dispatch = useDispatch();\n const userPreferences = usePreferences();\n const [region, setRegion] = useState(userPreferences.region);\n\n useEffect(() => {\n if (region !== userPreferences.region) {\n window.location.reload();\n }\n }, [region, userPreferences]);\n\n const handleInputChange = (value: string) => {\n setRegion(value);\n dispatch(\n actions.updatePreferences.request({\n ...userPreferences,\n region: value\n })\n );\n };\n\n const options: LanguageListItem[] = Object.values(regions).map(region => ({\n value: region.id,\n label: region.name\n }));\n\n const customSingleValue = ({ data }: any) => (\n
\n
\n {data && (\n \n  \n \n )}\n {data.label}\n
\n
\n );\n\n const menuItems = options.map((option: LanguageListItem) => (\n \n {option.label}\n \n ));\n\n const selectedOption = options.find(\n lan => lan.value === (region ? region : \"en\")\n );\n\n return (\n
\n \n \n {strings.layout.profile.dateTimeFormat}\n \n \n \n \n }\n labelId=\"language-select\"\n id=\"language-select\"\n value={selectedOption?.value}\n label={strings.layout.profile.dateTimeFormat}\n onChange={event => handleInputChange(event.target.value)}\n >\n {menuItems}\n \n \n
\n );\n};\n\nexport default RegionMenuItem;\n","import React, { useEffect, useState } from \"react\";\nimport { usePreferences, actions } from \"modules/account\";\nimport { useDispatch } from \"react-redux\";\nimport { languages, strings } from \"localization\";\nimport {\n FormControl,\n InputAdornment,\n InputLabel,\n MenuItem,\n Select,\n SelectChangeEvent\n} from \"@mui/material\";\nimport TranslationIcon from \"@mui/icons-material/Translate\";\n\nexport interface LanguageListItem {\n value: string;\n label: string;\n}\n\nexport const LanguageMenuItem: React.FC = () => {\n const dispatch = useDispatch();\n const userPreferences = usePreferences();\n const [language, setLanguage] = useState(userPreferences.language);\n\n useEffect(() => {\n if (language !== userPreferences.language) {\n window.location.reload();\n }\n }, [language, userPreferences]);\n\n const handleInputChange = (event: SelectChangeEvent) => {\n const value = event.target.value;\n setLanguage(value);\n dispatch(\n actions.updatePreferences.request({\n ...userPreferences,\n language: value\n })\n );\n };\n\n const options: LanguageListItem[] = Object.values(languages)\n .filter(language => language.name !== null)\n .map(\n (language): LanguageListItem => ({\n value: language.id,\n label: language.name as string\n })\n );\n\n const menuItems = options.map((option: LanguageListItem) => (\n \n {option.label}\n \n ));\n\n const selectedOption = options.find(\n lan => lan.value === (language ? language : \"en\")\n );\n\n return (\n
\n \n \n {strings.layout.profile.language}\n \n \n \n \n }\n labelId=\"language-select\"\n id=\"language-select\"\n data-testid=\"language-select\"\n value={selectedOption?.value}\n label={strings.layout.profile.language}\n onChange={event => handleInputChange(event)}\n >\n {menuItems}\n \n \n
\n );\n};\n\nexport default LanguageMenuItem;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { HelpMenuOverride } from \"./help-menu\";\nimport { RegionMenuItem } from \"./region-menu-item\";\nimport { LanguageMenuItem } from \"./language-menu-item\";\nimport { Link, Icon } from \"hcss-components\";\nimport { strings } from \"localization\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useOidcContext } from \"modules/account/services/oidc-context\";\nimport { actions } from \"modules/settings\";\nimport { useHcssUser, usePermissions, useAuthorization } from \"modules/account\";\nimport { FeatureFlag, UserType } from \"core\";\nimport { selectors } from \"modules/account\";\nimport { useFeatureFlags } from \"../../../configurationSettings/use-feature-flags\";\nimport {\n GlobalTopNavigation,\n ProfileMenu,\n DropdownMenuItem,\n DropdownMenuDivider,\n DropdownMenu,\n DropdownButton,\n Dropdown,\n DropdownIcon\n} from \"core/components/hcss-navigation\";\n\nimport {\n DisableInSandbox,\n HideInSandbox,\n ResetSandboxButton,\n DisableSandboxButton,\n capitalizeWords\n} from \"core/util\";\n\nimport moment, { Moment } from \"moment-timezone\";\n\nexport const TopNavigation = () => {\n const user = useHcssUser();\n const secondaryItems: ReactNode[] = [];\n\n if (!user) {\n return null;\n }\n\n if (user.type === UserType.Guest) {\n secondaryItems.push(\n ,\n ,\n \n );\n } else if (user.type === UserType.Subcontractor) {\n secondaryItems.push(\n ,\n ,\n ,\n \n );\n } else {\n secondaryItems.push(\n ,\n ,\n ,\n ,\n ,\n \n );\n }\n\n return (\n \n );\n};\n\nconst getSiteBrandTitle = (user: any) => {\n if (user.type === UserType.Subcontractor || user.type === UserType.Guest) {\n return (\n \n ProSubs Quoting\n \n );\n }\n\n return (\n \n HeavyBid |\n Pre-Construction\n \n );\n};\n\nexport const getExpertChatAvailability = () => {\n const centralDateTime: Moment = moment().tz(\"America/Chicago\");\n const centralDay: number = centralDateTime.day();\n const centralHour: number = centralDateTime.hours();\n const chatAvailable: boolean =\n centralDay >= 1 && centralDay <= 5 && centralHour >= 8 && centralHour < 18;\n return chatAvailable;\n};\n\nconst ProductHomeComponent = () => {\n const user = useHcssUser();\n const to = user.type === UserType.Guest ? \"/account/landing\" : \"/\";\n return (\n \n {user.type === UserType.Subcontractor ||\n user.type === UserType.Guest ? null : (\n \n )}\n \n {getSiteBrandTitle(user)}\n \n \n );\n};\n\nconst FeedbackComponent = () => {\n return (\n \n \n {strings.layout.feedback}\n \n \n );\n};\n\nconst SandboxComponent = () => {\n return (\n <>\n \n \n \n );\n};\n\nconst ChatComponent = () => {\n return (\n \n window?.embedded_svc?.bootstrapEmbeddedService?.()}\n data-testid=\"top-nav-chat\"\n availability={getExpertChatAvailability()}\n >\n \n {getExpertChatAvailability()\n ? strings.layout.chat.online\n : strings.layout.chat.offline}\n \n \n );\n};\n\nconst AlphaHelpComponent = () => {\n const { isFeatureEnabled } = useFeatureFlags(\"Beta\");\n const auth = useAuthorization();\n const user = useHcssUser();\n const link =\n user.type === UserType.HcssSubscription\n ? \"https://hcssdev.atlassian.net/wiki/spaces/EX/overview?homepageId=334136167\"\n : \"https://hcssdev.atlassian.net/wiki/spaces/EXHBSUB/overview?homepageId=351076652\";\n\n if (!auth.canAccessQuoteManagement) {\n return null;\n }\n\n return (\n \n {isFeatureEnabled ? \"Beta Help\" : strings.layout.alphaHelp}\n \n );\n};\n\nexport const SettingsComponent = () => {\n const user = useHcssUser();\n const permissions = usePermissions();\n const auth = useAuthorization();\n\n const isCompanyNameValidForSandbox =\n user &&\n user.companyName &&\n (user.companyName.toLowerCase().includes(\"hcss\") ||\n user.companyName.toLowerCase().includes(\"ugm\"));\n\n if (!user || user.type === UserType.Guest) {\n return null;\n }\n\n if (\n (!permissions.admin || !auth.canAccessFullPrecon) &&\n !auth.canAccessQuoteManagement &&\n !isCompanyNameValidForSandbox\n ) {\n return null;\n }\n\n return (\n \n \n \n \n \n \n \n {strings.layout.menu.settings.companyProfile}\n \n \n\n {permissions.admin && auth.canAccessFullPrecon && (\n \n {strings.layout.menu.settings.userAdmin}\n \n )}\n\n {isCompanyNameValidForSandbox && (\n \n {\n window.localStorage.setItem(\"sandbox\", \"true\");\n window.location.reload();\n }}\n >\n {strings.layout.profile.enableSandbox}\n \n \n )}\n \n \n );\n};\n\nexport const ProfileMenuComponent = () => {\n const dispatch = useDispatch();\n const user = useHcssUser();\n const auth = useAuthorization();\n const { isFeatureEnabled } = useFeatureFlags(FeatureFlag.LanguageSelector);\n\n const accessibleBusinessUnits =\n useSelector(selectors.getAccessibleBusinessUnits) ?? [];\n const { oidcService } = useOidcContext();\n\n if (!user) return null;\n\n return (\n \n {accessibleBusinessUnits?.length > 1 && (\n dispatch(actions.toggleBUPanel())}\n >\n {strings.layout.profile.bu}\n \n )}\n {auth.canAccessHcssConnect && (\n dispatch(actions.toggleCalendarPanel())}\n >\n {strings.layout.profile.calendar}\n \n )}\n oidcService.signoutRedirect()}\n iconClassName=\"fa fa-power-off\"\n data-testid=\"top-nav-profile-logout\"\n >\n
\n {strings.layout.profile.logout}\n
\n \n\n {user.type === UserType.HcssSubscription &&\n auth.canAccessFullReadonlyPrecon && (\n <>\n \n \n {isFeatureEnabled && }\n \n )}\n \n );\n};\n\nconst GuestProfileMenuComponent = () => {\n const user = useHcssUser();\n const { oidcService } = useOidcContext();\n\n if (!user) return null;\n\n return (\n \n oidcService.signinRedirect(\"/\")}\n iconClassName=\"fa fa-power-off\"\n data-testid=\"top-nav-profile-logout\"\n >\n {strings.layout.profile.logout}\n \n \n );\n};\n\nconst StyledSiteTitle = styled.span`\n font-size: 18px;\n font-family: \"ProximaNova\";\n display: flex;\n align-items: center;\n\n .heavyBidClr {\n color: hsla(150, 95%, 26%, 1);\n }\n\n .headerLogo {\n width: 20%;\n }\n\n .heavyBidClr:hover {\n color: hsla(150, 95%, 22%, 1);\n }\n\n .heavyBidClr:focus {\n color: hsla(150, 95%, 22%, 1);\n }\n\n a {\n font-size: inherit;\n font-family: inherit;\n color: inherit;\n text-decoration-line: none;\n }\n\n a:hover,\n a:focus {\n color: inherit;\n }\n\n & strong {\n font-family: \"ProximaNova Heavy\";\n }\n\n & .darktext {\n color: #444;\n }\n`;\nconst TertiaryLink = styled.a.attrs(() => ({\n target: \"_blank\",\n rel: \"noopener noreferrer\"\n}))`\n display: flex;\n height: 100%;\n justify-content: center;\n align-items: center;\n padding: 0 16px;\n\n text-decoration: none;\n color: #333;\n font-family: sans-Arial, Helvetica, sans-serif;\n font-size: 1em;\n\n &:visited,\n &:focus,\n &:hover {\n color: #333;\n text-decoration: none;\n }\n\n &:hover {\n color: ${props => props.theme.colors.blue[2]};\n }\n\n transition: all 0.2s ease;\n\n @media (max-width: 499px) {\n display: none;\n }\n`;\n\nconst CustomChatButton = styled.span`\n display: flex;\n height: 100%;\n justify-content: center;\n align-items: center;\n padding: 0 16px;\n cursor: pointer;\n pointer-events: ${props => (props.availability ? \"auto\" : \"none\")};\n\n text-decoration: none;\n color: ${props =>\n props.availability ? \"#333\" : props.theme.colors.neutral[2]};\n font-family: sans-Arial, Helvetica, sans-serif;\n font-size: 1em;\n\n &:visited,\n &:focus,\n &:hover {\n color: #333;\n text-decoration: none;\n }\n\n &:hover {\n color: ${props => props.theme.colors.blue[2]};\n }\n\n transition: all 0.2s ease;\n\n @media (max-width: 499px) {\n display: none;\n }\n`;\n\nconst SettingsDropdownMenu = styled(DropdownMenu)`\n padding: 20px 16px 12px 16px;\n\n & .dropdown-menu-item > a {\n padding: 10px 0;\n }\n`;\n\nconst CustomIcon = styled.i`\n margin-right: 6px;\n`;\n","import {\n applyMiddleware,\n combineReducers,\n compose,\n createStore,\n Store\n} from \"redux\";\nimport createSagaMiddleware from \"redux-saga\";\nimport rootSaga from \"./sagas\";\nimport * as estimates from \"./estimates\";\nimport * as projects from \"./projects\";\nimport * as schemas from \"./schemas\";\nimport * as views from \"./views\";\nimport * as calendars from \"./calendars\";\nimport * as signalR from \"./signalr\";\nimport * as configurationSettings from \"./configurationSettings\";\nimport * as account from \"./account\";\nimport * as settings from \"./settings\";\nimport * as profile from \"./profile\";\nimport * as contacts from \"./contacts\";\nimport * as emailSubscriptions from \"./email-subscriptions\";\nimport * as quickPrice from \"./quick-pricing\";\n\nimport { loggingMiddleware } from \"logging\";\n\nexport type StoreState = account.StateSlice &\n estimates.StateSlice &\n calendars.StateSlice &\n configurationSettings.StateSlice &\n signalR.StateSlice &\n schemas.StateSlice &\n views.StateSlice &\n projects.StateSlice &\n settings.StateSlice &\n profile.StateSlice &\n contacts.StateSlice &\n emailSubscriptions.StateSlice &\n quickPrice.StateSlice;\n\nexport const rootReducer = combineReducers({\n account: account.reducer,\n schemas: schemas.reducer,\n projects: projects.reducer,\n estimates: estimates.reducer,\n views: views.reducer,\n signalR: signalR.reducer,\n configurationSettings: configurationSettings.reducer,\n calendars: calendars.reducer,\n settings: settings.reducer,\n profile: profile.reducer,\n contacts: contacts.reducer,\n emailSubscriptions: emailSubscriptions.reducer,\n quickPrice: quickPrice.reducer\n});\n\nconst sagaMiddleware = createSagaMiddleware();\n\ndeclare global {\n interface Window {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: any;\n }\n}\n\nlet store: Store;\n\nif (process.env.NODE_ENV === `development`) {\n const composeEnhancers =\n typeof window === \"object\" && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({\n trace: true,\n traceLimit: 25\n })\n : compose;\n const enhancer = composeEnhancers(\n applyMiddleware(sagaMiddleware, loggingMiddleware)\n );\n store = createStore(rootReducer, enhancer);\n} else {\n store = createStore(\n rootReducer,\n applyMiddleware(sagaMiddleware, loggingMiddleware)\n );\n}\n\n// @ts-ignore\nif (window.Cypress) {\n // @ts-ignore\n window.store = store;\n}\n\nsagaMiddleware.run(rootSaga);\n\nconst defaultExport = { store };\nexport default defaultExport;\n","import { all } from \"redux-saga/effects\";\nimport { sagas as accountSagas } from \"./account\";\nimport { sagas as estimatesSagas } from \"./estimates\";\nimport { sagas as projectsSagas } from \"./projects\";\nimport { sagas as schemasSagas } from \"./schemas\";\nimport { sagas as signalRSagas } from \"./signalr\";\nimport { sagas as viewsSagas } from \"./views\";\nimport { sagas as calendarsSagas } from \"./calendars\";\nimport { sagas as configSagas } from \"./configurationSettings\";\nimport { sagas as profileSagas } from \"./profile\";\nimport { sagas as contactSagas } from \"./contacts\";\nimport { sagas as emailSubscriptionSagas } from \"./email-subscriptions\";\nimport { sagas as quickPriceSagas } from \"./quick-pricing\";\n\nexport default function* rootSaga() {\n yield all([\n ...accountSagas,\n ...schemasSagas,\n ...viewsSagas,\n ...projectsSagas,\n ...signalRSagas,\n ...estimatesSagas,\n ...configSagas,\n ...calendarsSagas,\n ...profileSagas,\n ...contactSagas,\n ...emailSubscriptionSagas,\n ...quickPriceSagas\n ]);\n}\n","import { DataColumnType, TypedDataColumn } from \"hcss-tables\";\nimport { MinorityStatusDto } from \"api/GeneratedClients/ContactsClient\";\n\nconst CertNumberColumn: TypedDataColumn = {\n name: \"certificationNumber\",\n title: \"Certification #\",\n type: DataColumnType.ShortText\n};\nconst PercentColumn: TypedDataColumn = {\n name: \"percent\",\n title: \"%\",\n type: DataColumnType.Number,\n getCellValue: (row: MinorityStatusDto) => row.percent ?? \"\"\n};\nconst DescriptionColumn: TypedDataColumn = {\n name: \"description\",\n title: \"Description\",\n type: DataColumnType.ShortText,\n readOnly: true,\n getCellValue: (row: MinorityStatusDto) => row.type?.description ?? \"\"\n};\n\nexport const minorityStatusColumns: TypedDataColumn[] = [\n DescriptionColumn,\n CertNumberColumn,\n PercentColumn\n];\n","import React, { useState, useMemo, useEffect } from \"react\";\nimport uuid from \"uuid/v4\";\nimport FullPageLoading from \"modules/layout/components/FullPageLoading\";\nimport { strings } from \"localization\";\nimport { sortBy } from \"lodash-es\";\nimport { minorityStatusColumns } from \"./minority-status-columns\";\nimport { EditingState, TableRow } from \"@devexpress/dx-react-grid\";\nimport { NoDataPlaceholder, ContentLoadingOverlay } from \"core\";\n\nimport {\n IMinorityStatusDto,\n IVendorDtoV1Response,\n MinorityTypeDto\n} from \"api/GeneratedClients/ContactsClient\";\n\nimport {\n ColumnResizing,\n CommandComponent,\n getRowId,\n GroupingState,\n LinkProvider,\n Root,\n SearchState,\n SortingState,\n TableContainer,\n TableWrapper,\n TypedDataColumn,\n DataColumnType,\n Grid\n} from \"hcss-tables\";\n\nimport {\n TableEditColumn,\n TableEditRow,\n TableHeaderRow\n} from \"@devexpress/dx-react-grid-bootstrap3\";\nimport { useSelector } from \"react-redux\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\nimport {\n MinorityPercentProvider,\n MinorityTypeProvider\n} from \"modules/tables/columns/column-providers\";\nimport {\n CustomEditCellComponent,\n CustomEditCellHeaderComponent\n} from \"modules/tables/cells/custom-cells-components\";\nimport LegacyVirtualTable from \"core/components/bundle-fixes/LegacyVirtualTable\";\n\ninterface MinorityStatusListProps {\n vendor: IVendorDtoV1Response;\n setVendor: React.Dispatch<\n React.SetStateAction\n >;\n}\n\nexport const MinorityStatusList = ({\n vendor,\n setVendor\n}: MinorityStatusListProps) => {\n const minorityTypes = useSelector(contactsSelectors.getMinorityTypes);\n const isLoading = useSelector(contactsSelectors.getLoading);\n const [editingRowIds, setEditingRowIds] = useState<(string | number)[]>([]);\n\n useEffect(() => {\n const ids = vendor.minorityStatuses.map(ms => ms.id);\n if (ids === undefined) return;\n setEditingRowIds(ids);\n }, [vendor]);\n\n const MinorityTypeColumn: TypedDataColumn = useMemo(() => {\n let listValues = minorityTypes\n ? minorityTypes.map(mt => ({\n display: mt.code ?? \"\",\n value: mt\n }))\n : [];\n\n listValues = sortBy(\n listValues,\n opt => opt.display?.toLocaleLowerCase() ?? \"\"\n );\n\n return {\n name: \"type\",\n title: \"Code\",\n type: DataColumnType.List,\n config: {\n minorityType: true,\n listValues\n },\n getCellValue: (row: IMinorityStatusDto) => row.type?.code ?? \"\"\n };\n }, [minorityTypes]);\n\n const addBlankRow = () => {\n if (vendor && minorityTypes && minorityTypes.length > 0) {\n const newStatus: IMinorityStatusDto = {\n id: uuid(),\n companyId: vendor.id,\n type: new MinorityTypeDto(minorityTypes[0]),\n certificationNumber: \"\",\n percent: 0\n };\n setVendor({\n ...vendor,\n minorityStatuses: [...vendor.minorityStatuses, newStatus]\n });\n }\n };\n\n const changeAddedRows = (value: IMinorityStatusDto[]) => {\n const updatedMinorityList = vendor.minorityStatuses.map(m => {\n if (value.find(v => v.id === m.id)) {\n return value;\n } else {\n return m;\n }\n });\n setVendor({ ...vendor, minorityStatuses: updatedMinorityList });\n };\n\n const handleCommit = (change: CommandButtonProps) => {\n const { tableRow, id: command } = change;\n if (vendor && minorityTypes && minorityTypes.length > 0) {\n if (command === \"add\") {\n addBlankRow();\n } else if (command === \"delete\" && tableRow) {\n if (vendor.minorityStatuses) {\n const index = vendor.minorityStatuses.findIndex(\n m => m.id === tableRow.rowId\n );\n const updatedMinorityList = [...vendor.minorityStatuses];\n updatedMinorityList.splice(index, 1);\n setVendor({ ...vendor, minorityStatuses: updatedMinorityList });\n }\n }\n }\n };\n\n const createRowChangeHandler = (\n row: any,\n value: string | number,\n columnName: string\n ) => {\n const updatedRow: IMinorityStatusDto = {\n ...row,\n [columnName]: value\n };\n const updatedMinorityList = vendor.minorityStatuses.map(m => {\n if (m.id === updatedRow.id) {\n return updatedRow;\n } else {\n return m;\n }\n });\n setVendor({\n ...vendor,\n minorityStatuses: updatedMinorityList\n });\n return { [columnName]: value };\n };\n if (!vendor || !minorityTypes) {\n return ;\n }\n\n const renderCommandComponent = (\n props: React.PropsWithChildren\n ) => {\n if (props.id === \"commit\") {\n return (\n \n handleCommit({\n ...props,\n id: \"delete\"\n })\n }\n />\n );\n } else if (props.id === \"add\") {\n return (\n \n handleCommit({\n ...props\n })\n }\n />\n );\n } else {\n return
;\n }\n };\n return (\n \n \n {isLoading && (\n \n )}\n {minorityTypes.length > 0 &&\n vendor.minorityStatuses &&\n vendor.minorityStatuses.length > 0 ? (\n \n \n \n \n ({\n columnName: column.name,\n editingEnabled: !column.readOnly\n }))}\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n onCommitChanges={() => {}}\n />\n \n \n \n \n \n \n \n \n \n ) : (\n \n )}\n \n \n );\n};\ninterface CommandButtonProps extends TableEditColumn.CommandProps {\n icon?: string;\n hint?: string;\n isDanger?: boolean;\n validationFunction?: (tableRow: TableRow) => boolean;\n tableRow?: TableRow;\n}\n\nexport const formatMinorityStatusPercent = (\n num: string | undefined\n): string => {\n if (!num) return \"0\";\n const split = num.toString().split(\".\");\n let decimals = (\"\" + split[1]).replace(/\\D/g, \"\");\n let numbers = (\"\" + split[0]).replace(/\\D/g, \"\");\n if (numbers.length > 2) {\n numbers = parseInt(numbers) > 100 ? \"100\" : parseInt(numbers).toString();\n decimals = \"\";\n }\n\n if (decimals.length >= 3) {\n decimals = decimals.substring(0, 2);\n }\n\n if (!numbers && decimals) return `0.${decimals}`;\n if (!numbers) return \"0\";\n\n if (decimals) return `${numbers}.${decimals}`;\n return numbers;\n};\n","import {\n call,\n delay,\n put,\n select,\n takeEvery,\n takeLatest\n} from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport * as notify from \"../../core/components/notify\";\nimport { apiSagaFactory } from \"../../api/api-saga-factory\";\nimport { actions, StateSlice } from \"./state\";\nimport { strings } from \"localization\";\nimport { Schema } from \"api\";\nimport { WithId, UserType } from \"core\";\nimport { SelectorState } from \"./selectors\";\n\nconst genericSagas = apiSagaFactory({\n isBusinessUnitApi: true,\n apiPath: \"/schemas\",\n stateKey: \"schemas\",\n onBeforeLoadSuccess: modifySchemaOnLoad,\n onLoadSuccess: data => actions.loadSchemas.success(data),\n onLoadFail: err => actions.loadSchemas.failure(err)\n});\n\nfunction* modifySchemaOnLoad(schemas?: WithId[]) {\n const isSubcontractor = yield select(\n ({ account }: SelectorState) =>\n account.user?.type === UserType.Subcontractor\n );\n\n // move estimate section to the end since this is going to be hidden\n if (isSubcontractor) {\n const projectSchema = schemas?.find(s => s.schemaName === \"projects\");\n const estimateSectionId = \"ae9478b8-a74c-4da6-979b-16eb096210f8\";\n if (projectSchema) {\n projectSchema.orderedSections = projectSchema.orderedSections.filter(\n id => id !== estimateSectionId\n );\n projectSchema.orderedSections.push(estimateSectionId);\n }\n }\n\n // TODO: delete from cosmos and remove this check\n return schemas?.filter(s => s.id !== \"bidresults\");\n}\n\nfunction* saveSchema(action: ActionType) {\n const meta = action.payload.meta;\n const silent = meta?.silent ?? false;\n const msg = meta?.message ?? \"\";\n const fetchSchemaFromState = action.payload.meta?.inRedux ?? false;\n try {\n const schema = fetchSchemaFromState\n ? yield select(\n ({ schemas }: StateSlice) =>\n schemas.workingCopy[action.payload.schema.id]\n )\n : action.payload.schema;\n const api = yield call(genericSagas.getApi);\n const data = yield call([api, api.update], schema);\n yield put(actions.saveSchema.success(data.data));\n if (meta && !silent) {\n switch (meta.type) {\n case \"success\": {\n notify.save(msg);\n break;\n }\n case \"warning\": {\n notify.remove(msg);\n break;\n }\n case \"danger\": {\n notify.error(msg);\n }\n }\n }\n } catch (error) {\n console.error(error);\n const exceptionMessage = error.response.data.message;\n yield put(actions.saveSchema.failure(error));\n if (!silent)\n notify.error(\n exceptionMessage ? exceptionMessage : strings.schemas.errors.save\n );\n }\n}\n\nfunction* debounceAutosave(action: ActionType) {\n const autosave = action.payload.meta?.autosave ?? false;\n if (autosave) {\n yield delay(1000);\n const schema = yield select(\n ({ schemas }: StateSlice) => schemas.workingCopy[action.payload.schemaId]\n );\n yield put(actions.saveSchema.request({ schema, meta: { silent: true } }));\n }\n}\n\nfunction* addSchemaFieldOption(\n action: ActionType\n) {\n if (action.meta.saveSchema) {\n yield call(delay, 500);\n const schema: WithId = yield select(\n ({ schemas }: StateSlice) => schemas.workingCopy[action.payload.schemaId]\n );\n yield put(actions.saveSchema.request({ schema }));\n }\n}\n\nexport const sagas = [\n takeLatest(getType(actions.loadSchemas.request), genericSagas.load),\n takeEvery(getType(actions.saveSchema.request), saveSchema),\n takeLatest(getType(actions.saveSchemaField), debounceAutosave),\n takeLatest(getType(actions.saveDataSyncPreference), debounceAutosave),\n takeEvery(getType(actions.addSchemaFieldOption), addSchemaFieldOption)\n];\n","import * as schemaSelectors from \"./selectors\";\nexport * from \"./state\";\nexport * from \"./sagas\";\nexport * from \"./hooks\";\nexport const selectors = schemaSelectors;\nexport type { SelectorState } from \"./selectors\";\n","import { SchemaFieldType } from \"../../../api\";\nimport { strings } from \"localization\";\n\nconst fieldNames = strings.schemas.setup.examples;\n\nexport const orderedSchemaFieldTypes = [\n SchemaFieldType.ShortText,\n SchemaFieldType.LongText,\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Date,\n SchemaFieldType.DateTime,\n SchemaFieldType.List,\n SchemaFieldType.Boolean,\n SchemaFieldType.Links,\n SchemaFieldType.Checklist,\n SchemaFieldType.Location,\n SchemaFieldType.Company,\n SchemaFieldType.Contact,\n SchemaFieldType.Table,\n SchemaFieldType.Calculated\n];\n\nexport const schemaFieldTypeOptions: Record = {\n [SchemaFieldType.ShortText]: {\n id: SchemaFieldType.ShortText,\n name: fieldNames.text.name,\n icon: \"font\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.LongText]: {\n id: SchemaFieldType.LongText,\n name: fieldNames.note.name,\n icon: \"align-justify\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Number]: {\n id: SchemaFieldType.Number,\n name: fieldNames.number.name,\n icon: \"hashtag\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Currency]: {\n id: SchemaFieldType.Currency,\n name: fieldNames.currency.name,\n icon: \"usd\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Date]: {\n id: SchemaFieldType.Date,\n name: fieldNames.date.name,\n icon: \"calendar\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.DateTime]: {\n id: SchemaFieldType.DateTime,\n name: fieldNames.dateTime.name,\n icon: \"clock-o\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.List]: {\n id: SchemaFieldType.List,\n name: fieldNames.selectionList.name,\n icon: \"list\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Boolean]: {\n id: SchemaFieldType.Boolean,\n name: fieldNames.yesNo.name,\n icon: \"check-square-o\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.States]: {\n id: SchemaFieldType.States,\n name: fieldNames.states.name,\n icon: \"globe\",\n showInSetup: false,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Custom]: {\n id: SchemaFieldType.Custom,\n name: fieldNames.custom.name,\n icon: \"table\",\n showInSetup: false,\n isAvailableToBasic: true\n },\n\n [SchemaFieldType.BidResults]: {\n id: SchemaFieldType.BidResults,\n name: fieldNames.bidResults.name,\n icon: \"table\",\n showInSetup: false,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Estimates]: {\n id: SchemaFieldType.Estimates,\n name: fieldNames.estimates.name,\n icon: \"product-heavybid\",\n iconColor: \"rgb(0, 150, 57)\",\n showInSetup: false,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Links]: {\n id: SchemaFieldType.Links,\n name: fieldNames.hyperlink.name,\n icon: \"link\",\n showInSetup: true,\n isAvailableToBasic: false\n },\n [SchemaFieldType.PhoneNumber]: {\n id: SchemaFieldType.PhoneNumber,\n name: \"phoneNumber\", // TODO: translate..?\n icon: \"phone\",\n showInSetup: false,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Checklist]: {\n id: SchemaFieldType.Checklist,\n name: fieldNames.checklist.name,\n icon: \"check\",\n showInSetup: true,\n isAvailableToBasic: false\n },\n [SchemaFieldType.Location]: {\n id: SchemaFieldType.Location,\n name: fieldNames.location.name,\n icon: \"compass\",\n showInSetup: true,\n isAvailableToBasic: false\n },\n [SchemaFieldType.MultiSelectList]: {\n id: SchemaFieldType.MultiSelectList,\n name: fieldNames.selectionList.name,\n icon: \"list\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.PreConId]: {\n id: SchemaFieldType.PreConId,\n name: fieldNames.preconId.name,\n icon: \"meter\",\n showInSetup: false,\n isAvailableToBasic: false\n },\n [SchemaFieldType.Company]: {\n id: SchemaFieldType.Company,\n name: fieldNames.company.name,\n icon: \"building\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n [SchemaFieldType.Contact]: {\n id: SchemaFieldType.Contact,\n name: fieldNames.contact.name,\n icon: \"user-profile\",\n showInSetup: true,\n isAvailableToBasic: true\n },\n\n [SchemaFieldType.Table]: {\n id: SchemaFieldType.Table,\n name: fieldNames.table.name,\n icon: \"table\",\n showInSetup: true,\n isAvailableToBasic: false\n },\n [SchemaFieldType.Calculated]: {\n id: SchemaFieldType.Calculated,\n name: fieldNames.calculated.name,\n icon: \"calculator\",\n showInSetup: true,\n isAvailableToBasic: false\n }\n};\n\nexport interface SchemaFieldTypeOptions {\n id: SchemaFieldType;\n name: string;\n icon: string;\n iconColor?: string;\n showInSetup: boolean;\n isAvailableToBasic: boolean;\n}\n","import React, {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState\n} from \"react\";\nimport { Flex } from \"hcss-core\";\nimport { Icon } from \"hcss-components\";\nimport { EmailField, formatFirstNameLastName, TextOverflow } from \"core\";\nimport { useSelector } from \"react-redux\";\nimport { selectors as contactsSelectors } from \"modules/contacts\";\nimport { PhoneNumber } from \"modules/contacts/components/vendor-details\";\nimport { usePermissions, useAuthorization } from \"modules/account\";\nimport { DropdownList } from \"react-widgets\";\nimport { SchemaFormFieldInputProps } from \"./common\";\nimport { strings } from \"localization\";\nimport styled from \"styled-components\";\nimport { UserAvatar } from \"../../../../core/components/avatar\";\nimport { Overlay } from \"hcss-components\";\nimport { ContactPopover } from \"modules/contacts/components/contact-popover\";\nimport { intersection, sortBy } from \"lodash-es\";\nimport {\n IContactDto,\n IVendorDtoV1Response\n} from \"api/GeneratedClients/ContactsClient\";\nimport { IContactFieldData } from \"modules/contacts/interfaces/IContactFieldData\";\nimport { IContactListOption } from \"modules/contacts/interfaces/IContactListOption\";\nimport { useGetSelectedVendor } from \"modules/contacts/hooks/use-get-selected-vendor\";\nimport { ContactListModal } from \"modules/contacts/components/contact-list-modal\";\nimport { SchemaField } from \"api\";\nimport { IconButton } from \"@mui/material\";\nimport { Cancel } from \"@mui/icons-material\";\nimport ConfirmDelete from \"../../../../core/components/modals/ConfirmDelete\";\n\nconst toContactFieldData = (\n contact: IContactDto,\n vendor: IVendorDtoV1Response\n): IContactFieldData => ({\n id: contact.id,\n firstName: contact.firstName,\n lastName: contact.lastName,\n companyId: vendor.id,\n companyCode: vendor.code,\n companyName: vendor.name,\n email: contact.emailAddress,\n phoneNumber: contact.phoneNumber,\n products: contact.products,\n office: vendor.locations?.find(l => l.id === contact.vendorLocationId)\n});\n\nconst newContact = (vendor?: IVendorDtoV1Response): IContactDto => ({\n id: \"\",\n companyId: vendor?.id,\n firstName: \"\",\n lastName: \"\",\n title: \"\",\n phoneNumber: \"\",\n faxNumber: \"\",\n cellPhoneNumber: \"\",\n emailAddress: \"\",\n note: \"\",\n isMainContact: false\n});\nexport interface StaticContactFieldInputProps {\n editable?: boolean;\n value?: IContactFieldData | string | null;\n onDelete: (item: IContactFieldData) => void;\n}\nexport const StaticContactFieldInput = memo(\n (props: StaticContactFieldInputProps) => {\n const { editable, value, onDelete } = props;\n\n const vendorDataOptions = useSelector(\n contactsSelectors.getVendorListSortedByCode\n );\n const selectedContact = useMemo(() => {\n if (typeof value === \"string\") {\n for (const vendor of vendorDataOptions) {\n const contact = vendor.contacts.find(x => x.id === value);\n\n if (!contact) {\n continue;\n }\n const contactDto = toContactFieldData(contact, vendor);\n\n return contactDto;\n }\n\n return;\n }\n\n return value;\n }, [value, vendorDataOptions]);\n\n const handleDelete = useCallback(() => {\n if (selectedContact) onDelete(selectedContact);\n }, [onDelete, selectedContact]);\n\n const fullname = formatFirstNameLastName(\n selectedContact?.firstName,\n selectedContact?.lastName\n );\n\n return (\n \n \n \n \n \n {fullname || \"-\"}\n \n \n \n \n {selectedContact?.companyName ? selectedContact.companyName : \"\"}\n \n \n {selectedContact?.email && (\n \n \n
\n \n
\n
\n )}\n {selectedContact?.phoneNumber && (\n \n
\n \n
\n
\n )}\n
\n {editable && value && (\n \n \n \n )}\n \n );\n }\n);\n\ninterface MultiContactListProps {\n value?: IContactFieldData | IContactFieldData[] | string | null;\n editable?: boolean;\n onDelete: (item: IContactFieldData) => void;\n}\nconst MultiContactList = memo((props: MultiContactListProps) => {\n const { editable, value, onDelete } = props;\n\n if (Array.isArray(value)) {\n if (value.length > 0) {\n return (\n \n {value?.map((selectedVendor: IContactFieldData) => (\n \n ))}\n \n );\n } else {\n return (\n \n );\n }\n }\n\n return (\n \n );\n});\n\nconst ItemComponent = ({ item }: { item: IContactListOption }) =>\n item?.value ? :
{`${\"(clear)\"}`}
;\n\nexport interface MultiContactsFieldInputProps {\n value?: IContactFieldData | string | IContactFieldData[] | string[];\n onChange: (value?: IContactFieldData[]) => void;\n schemaField: SchemaField;\n editable?: boolean;\n allowCreate?: boolean;\n hasError?: boolean;\n keepInvalidValues?: boolean;\n}\nexport const MultiContactsFieldInput = memo(\n (props: MultiContactsFieldInputProps) => {\n const {\n value,\n schemaField,\n editable,\n onChange,\n allowCreate,\n hasError,\n keepInvalidValues\n } = props;\n const [showModal, setShowModal] = useState(false);\n const vendorDataOptions = useSelector(\n contactsSelectors.getVendorListSortedByCode\n );\n const config = schemaField.config;\n const vendor = useGetSelectedVendor();\n\n const convertToContact = (val: string | IContactFieldData) => {\n if (typeof val !== \"string\") {\n return val;\n }\n\n const vendor = vendorDataOptions.find(v =>\n v.contacts.find(c => c.id === val)\n );\n\n if (vendor) {\n const contact = vendor.contacts.find(c => c.id === val);\n\n if (contact) {\n return toContactFieldData(contact, vendor);\n }\n }\n };\n\n const valueArray = useMemo(() => {\n if (!value) {\n return [];\n }\n\n if (Array.isArray(value)) {\n const contactsData = value\n .map(convertToContact)\n .filter(x => !!x) as IContactFieldData[];\n\n return [...contactsData];\n }\n\n const contact = convertToContact(value);\n return contact ? [contact] : [];\n }, [value, vendorDataOptions]);\n\n const filteredData: IContactListOption[] = useMemo(() => {\n let options: IContactListOption[] = [];\n vendorDataOptions.forEach(vendor => {\n const contacts = vendor.contacts.map(contact => {\n const fullname = formatFirstNameLastName(\n contact.firstName,\n contact.lastName\n );\n return {\n display: fullname,\n value: toContactFieldData(contact, vendor),\n id: contact.id\n };\n });\n options = options.concat(contacts);\n });\n\n if (config?.filterEnabled && config.filters?.length > 0) {\n options = options.filter(op => {\n if (!op.value?.products || op.value?.products.length === 0)\n return false;\n return (\n intersection(\n config.filters,\n op.value?.products.map((p: any) => p.productTypeId)\n ).length > 0\n );\n });\n }\n\n options = options.filter(option => {\n const validOption =\n option.display &&\n option.value?.firstName &&\n option.value?.lastName &&\n option.value?.companyCode;\n if (validOption) {\n return true;\n }\n return false;\n });\n\n options = sortBy(options, [\n c => c.value?.companyCode?.toLowerCase(),\n c => c.value?.firstName?.toLowerCase(),\n c => c.value?.lastName?.toLowerCase()\n ]);\n\n return options;\n }, [vendorDataOptions, config]);\n\n const data: IContactListOption[] = useMemo(() => {\n let options = filteredData;\n\n const existIds = valueArray.map(v => v.id);\n options = options.filter(op => {\n return !existIds.includes(op.id);\n });\n\n return options;\n }, [filteredData, valueArray]);\n\n useEffect(() => {\n if (keepInvalidValues || allowCreate || !valueArray) {\n return;\n }\n\n const filtered = valueArray.filter(v =>\n filteredData.some(d => d.id === v.id)\n );\n if (filtered.length != valueArray.length) onChange(filtered);\n }, [filteredData, allowCreate, valueArray, onChange, keepInvalidValues]);\n\n const [addValue, setAddValue] = useState();\n const handleAdd = useCallback(\n (option?: IContactListOption) => {\n const data = option?.value;\n if (data) {\n onChange([...valueArray, data]);\n setAddValue(null);\n }\n },\n [onChange, valueArray]\n );\n\n const addFieldValue = useCallback(() => {\n setShowModal(true);\n }, []);\n\n const setShowCreateContactModal = useCallback((showModal: boolean) => {\n setShowModal(showModal);\n }, []);\n const [showConfirmDeleteModal, setShowConfirmDeleteModal] = useState(false);\n const [confirmDeleteItem, setConfirmDeleteItem] = useState<\n IContactFieldData | undefined\n >();\n const openDeleteModal = useCallback(\n (item: IContactFieldData) => {\n setConfirmDeleteItem(item);\n setShowConfirmDeleteModal(true);\n },\n [setConfirmDeleteItem, setShowConfirmDeleteModal]\n );\n\n const handleDelete = useCallback(\n (id: string) => {\n onChange(valueArray.filter(v => v.id !== id));\n },\n [onChange, valueArray]\n );\n\n return (\n <>\n \n {editable && (\n \n \n \n \n \n ContactDropdownFilter(option, search)\n }\n textField=\"display\"\n valueField=\"id\"\n value={addValue}\n data={data}\n onChange={handleAdd}\n allowCreate={allowCreate}\n onCreate={allowCreate ? addFieldValue : undefined}\n id=\"arrow-dropdown\"\n messages={{\n emptyList: allowCreate\n ? \"\"\n : strings.projects.setup.message.emptyContactList,\n createOption: strings.projects.setup.message.createOption\n }}\n itemComponent={ItemComponent}\n />\n \n \n \n )}\n\n \n\n setShowConfirmDeleteModal(false)}\n handleDelete={() => {\n if (confirmDeleteItem?.id) handleDelete(confirmDeleteItem.id);\n setShowConfirmDeleteModal(false);\n }}\n title={schemaField.name}\n >\n

\n {strings.formatString(\n strings.core.modals.confirmDelete.message,\n formatFirstNameLastName(\n confirmDeleteItem?.firstName,\n confirmDeleteItem?.lastName\n )\n )}\n

\n \n \n );\n }\n);\n\nexport interface SingleContactFieldInputProps {\n value?: IContactFieldData | string;\n onChange: (value?: IContactFieldData) => void;\n schemaField: SchemaField;\n editable?: boolean;\n allowCreate?: boolean;\n hasError?: boolean;\n keepInvalidValues?: boolean;\n}\nexport const SingleContactFieldInput = memo(\n (props: SingleContactFieldInputProps) => {\n const {\n value,\n schemaField,\n editable,\n onChange,\n allowCreate,\n hasError,\n keepInvalidValues\n } = props;\n const [showModal, setShowModal] = useState(false);\n const vendorDataOptions = useSelector(\n contactsSelectors.getVendorListSortedByCode\n );\n const config = schemaField.config;\n const vendor = useGetSelectedVendor();\n const selectedContact = useMemo(() => {\n if (typeof value === \"string\") {\n for (const vendor of vendorDataOptions) {\n const contact = vendor.contacts.find(x => x.id === value);\n\n if (!contact) {\n continue;\n }\n const contactDto = toContactFieldData(contact, vendor);\n\n return contactDto;\n }\n\n return;\n }\n\n return value;\n }, [value, vendorDataOptions]);\n\n const data: IContactListOption[] = useMemo(() => {\n let options: IContactListOption[] = [];\n vendorDataOptions.forEach(vendor => {\n const contacts = vendor.contacts.map(contact => {\n const fullname = formatFirstNameLastName(\n contact.firstName,\n contact.lastName\n );\n return {\n display: fullname,\n value: toContactFieldData(contact, vendor),\n id: contact.id\n };\n });\n options = options.concat(contacts);\n });\n\n if (config?.filterEnabled && config.filters?.length > 0) {\n options = options.filter(op => {\n if (!op.value?.products || op.value?.products.length === 0)\n return false;\n return (\n intersection(\n config.filters,\n op.value?.products.map((p: any) => p.productTypeId)\n ).length > 0\n );\n });\n }\n\n options = options.filter(option => {\n const validOption =\n option.display &&\n option.value?.firstName &&\n option.value?.lastName &&\n option.value?.companyCode;\n if (validOption) {\n return true;\n }\n return false;\n });\n\n options = sortBy(options, [\n c => c.value?.companyCode?.toLowerCase(),\n c => c.value?.firstName?.toLowerCase(),\n c => c.value?.lastName?.toLowerCase()\n ]);\n\n if (selectedContact) {\n options.push({ id: \"\", display: \"(clear)\", value: null });\n }\n\n return options;\n }, [vendorDataOptions, config, selectedContact]);\n\n const handleChange = useCallback(\n (opt?: IContactListOption) => {\n const data = opt?.value;\n if (data) {\n onChange(data);\n } else {\n onChange();\n }\n },\n [onChange]\n );\n\n useEffect(() => {\n if (keepInvalidValues || allowCreate || !selectedContact) {\n return;\n }\n\n const existSelectedOptions = data.filter(\n d => d.id === selectedContact.id\n );\n\n if (!existSelectedOptions) {\n handleChange();\n }\n }, [data, allowCreate, selectedContact, handleChange, keepInvalidValues]);\n\n const addFieldValue = useCallback(() => {\n setShowModal(true);\n }, []);\n\n const setShowCreateContactModal = useCallback((showModal: boolean) => {\n setShowModal(showModal);\n }, []);\n const fullname = formatFirstNameLastName(\n selectedContact?.firstName,\n selectedContact?.lastName\n );\n\n return (\n <>\n \n \n \n \n \n \n {fullname ? fullname : \"-\"}\n \n \n \n \n {selectedContact?.companyName\n ? selectedContact.companyName\n : \"\"}\n \n \n {selectedContact?.email && (\n \n \n
\n \n
\n
\n )}\n {selectedContact?.phoneNumber && (\n \n
\n \n
\n
\n )}\n
\n {editable && (\n
\n \n \n ContactDropdownFilter(option, search)\n }\n textField=\"display\"\n valueField=\"id\"\n value={selectedContact}\n data={data}\n onChange={handleChange}\n allowCreate={allowCreate}\n onCreate={allowCreate ? addFieldValue : undefined}\n id=\"arrow-dropdown\"\n messages={{\n emptyList: allowCreate\n ? \"\"\n : strings.projects.setup.message.emptyContactList,\n createOption: strings.projects.setup.message.createOption\n }}\n itemComponent={ItemComponent}\n />\n \n
\n )}\n \n \n );\n }\n);\n\nexport const ContactInput = memo((props: SchemaFormFieldInputProps) => {\n const { form, field, schemaField, isLocked } = props;\n const permissions = usePermissions();\n const authorization = useAuthorization();\n const adminFailure = !permissions.admin && schemaField.config.adminOnly;\n const fieldIsEditable =\n permissions.write && authorization.canAccessLimitedPrecon && !adminFailure;\n const config = schemaField.config;\n\n const handleSingleChange = useCallback(\n (data?: IContactFieldData) => {\n form.setFieldValue(field.name, data);\n },\n [form.setFieldValue]\n );\n\n const handleMultiChange = useCallback(\n (data?: IContactFieldData[]) => {\n form.setFieldValue(field.name, data);\n },\n [form.setFieldValue]\n );\n\n if (config?.multiSelect) {\n return (\n \n );\n } else {\n return (\n \n );\n }\n});\n\nexport const ContactOption = memo((props: IContactFieldData) => {\n const { companyCode, companyName, firstName, lastName, email, id } = props;\n const fullname = formatFirstNameLastName(firstName, lastName);\n const optionRef = useRef(null);\n const [show, setShow] = useState(false);\n if (!props.id) return
{`${\"(clear)\"}`}
;\n return (\n {\n setShow(true);\n }}\n onMouseLeave={() => setShow(false)}\n onClick={e => {\n setShow(false);\n }}\n >\n \n {fullname}\n {companyCode}\n \n \n \n \n \n );\n});\n\nexport const ContactDropdownFilter = (\n { value }: IContactListOption,\n search: string\n) => {\n if (!value) return false;\n return (\n value.companyCode?.toLowerCase().includes(search.toLowerCase()) ||\n (value.companyName\n ? value.companyName.toLowerCase().includes(search.toLowerCase())\n : false) ||\n (value.firstName\n ? value.firstName.toLowerCase().includes(search.toLowerCase())\n : false) ||\n (value.lastName\n ? value.lastName.toLowerCase().includes(search.toLowerCase())\n : false)\n );\n};\nconst DropdownContainer = styled.div<{ hasErrors?: boolean }>`\n & .rw-widget-input {\n height: 34px;\n ${props => (props.hasErrors ? \"border: 1px solid #a94442;\" : \"\")};\n }\n}\n`;\n\nconst OptionContainer = styled.div`\n display: flex;\n flex-direction: column;\n`;\n\nconst OptionHeader = styled.div`\n display: flex;\n\n .option-name {\n white-space: nowrap;\n flex: 2;\n font-size: 13px;\n font-weight: 700;\n margin-right: 3px;\n }\n\n .option-code {\n white-space: nowrap;\n flex: 1;\n font-size: 13px;\n }\n`;\n\nconst StyledIcon = styled(Icon)`\n margin-right: 1rem;\n font-size: 1.5rem;\n width: 1em;\n`;\n\nconst MultiDropdownContainer = styled.div<{ hasErrors?: boolean }>`\n height: 40px;\n display: flex;\n ${props => (props.hasErrors ? \"border: 1px solid #a94442;\" : \"\")};\n`;\n\nconst ArrowDropdownContainer = styled.div`\n flex: 1;\n`;\n\nconst MultiDividerLine = styled.hr`\n flex: 1;\n`;\n\nconst StaticInputContainer = styled.div`\n display: flex;\n flex-direction: column;\n gap: 2px;\n`;\n","import {\n collection,\n doc,\n getDoc,\n getDocs,\n getFirestore,\n query,\n setDoc,\n where\n} from \"firebase/firestore\";\nimport { firebaseApp } from \"../../../firebase-app\";\nimport { isUndefined, omitBy, omit } from \"lodash-es\";\nimport {\n MasterSolicitationEntity,\n VendorSolicitation,\n VendorSolicitationEntity\n} from \"core\";\n\nconst db = getFirestore(firebaseApp);\nconst collectionId = \"vendorSolicitations\";\n\nexport const VendorSolicitationRepo = {\n generateId: () => {\n return doc(collection(db, collectionId)).id;\n },\n\n getById: async (id: string) => {\n const ref = doc(collection(db, collectionId), id);\n\n try {\n const snap = await getDoc(ref);\n const data = snap.data() as VendorSolicitation;\n const entity: VendorSolicitationEntity = { ...data, id: ref.id };\n return entity;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n },\n\n getAll: async (companyId: string, estimateId?: string) => {\n const solicitations: VendorSolicitationEntity[] = [];\n\n const whereClauses = [];\n whereClauses.push(where(\"senderCompanyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n try {\n const q = query(collection(db, collectionId), ...whereClauses);\n const snap = await getDocs(q);\n for (const doc of snap.docs) {\n const data = doc.data() as VendorSolicitation;\n solicitations.push({ ...data, id: doc.id });\n }\n } catch (error) {\n console.error(error);\n }\n\n return solicitations;\n },\n\n getOutboundSubscription: (companyId: string, estimateId?: string) => {\n const whereClauses = [];\n whereClauses.push(where(\"senderCompanyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n const q = query(collection(db, collectionId), ...whereClauses);\n return q;\n },\n\n getInboundSubscription: (companyId: string) => {\n const whereClauses = [];\n whereClauses.push(where(\"receiverCompanyId\", \"==\", companyId));\n\n const q = query(collection(db, collectionId), ...whereClauses);\n return q;\n },\n\n save: async (\n solicitation: VendorSolicitationEntity | MasterSolicitationEntity\n ) => {\n const id = solicitation.id;\n const ref = doc(collection(db, collectionId), id);\n\n try {\n let doc = omitBy(solicitation, isUndefined);\n doc = omit(doc, [\"id\"]);\n await setDoc(ref, doc);\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n }\n};\n","import {\n collection,\n doc,\n getDoc,\n getDocs,\n getFirestore,\n orderBy,\n query,\n setDoc,\n where\n} from \"firebase/firestore\";\nimport { firebaseApp } from \"../../../firebase-app\";\nimport { isUndefined, omitBy, omit } from \"lodash-es\";\nimport { VendorProposal, VendorProposalEntity } from \"core\";\n\nconst db = getFirestore(firebaseApp);\nconst collectionId = \"vendorProposals\";\n\nexport const VendorProposalRepo = {\n generateId: () => {\n return doc(collection(db, collectionId)).id;\n },\n\n getById: async (id: string) => {\n const ref = doc(collection(db, collectionId), id);\n\n try {\n const snap = await getDoc(ref);\n const data = snap.data() as VendorProposal;\n const entity: VendorProposalEntity = { ...data, id: ref.id };\n return entity;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n },\n\n /**\n * Gets last submission for the given request id.\n * CompanyId or Email is required for filtering purposes.\n * CompanyId takes precendence.\n */\n getByRequestId: async (\n requestId: string,\n companyId?: string,\n isSender?: boolean,\n email?: string\n ) => {\n const whereClauses = [];\n whereClauses.push(where(\"requestId\", \"==\", requestId));\n if (companyId) {\n if (isSender) {\n whereClauses.push(where(\"senderCompanyId\", \"==\", companyId));\n } else {\n whereClauses.push(where(\"receiverCompanyId\", \"==\", companyId));\n }\n } else if (email) {\n whereClauses.push(where(\"senderEmail\", \"==\", email));\n } else {\n throw new Error(\"Invalid Arguments: companyId or email is required.\");\n }\n\n try {\n const q = query(\n collection(db, collectionId),\n ...whereClauses,\n orderBy(\"createdDate\", \"desc\")\n );\n const snap = await getDocs(q);\n if (snap.docs.length === 0) {\n return undefined;\n }\n\n const doc = snap.docs[0];\n const data = doc.data() as VendorProposal;\n const entity: VendorProposalEntity = { ...data, id: doc.id };\n return entity;\n } catch (error) {\n console.error(error);\n return undefined;\n }\n },\n\n getAll: async (companyId: string, estimateId?: string) => {\n const proposals: VendorProposalEntity[] = [];\n\n const whereClauses = [];\n whereClauses.push(where(\"senderCompanyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n try {\n const q = query(collection(db, collectionId), ...whereClauses);\n const snap = await getDocs(q);\n for (const doc of snap.docs) {\n const data = doc.data() as VendorProposal;\n proposals.push({ ...data, id: doc.id });\n }\n } catch (error) {\n console.error(error);\n }\n\n return proposals;\n },\n\n getOutboundSubscription: (companyId: string, estimateId?: string) => {\n const whereClauses = [];\n whereClauses.push(where(\"senderCompanyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n const q = query(collection(db, collectionId), ...whereClauses);\n return q;\n },\n\n getInboundSubscription: (companyId: string, estimateId?: string) => {\n const whereClauses = [];\n whereClauses.push(where(\"receiverCompanyId\", \"==\", companyId));\n\n if (estimateId) {\n whereClauses.push(where(\"estimateId\", \"==\", estimateId));\n }\n\n const q = query(collection(db, collectionId), ...whereClauses);\n return q;\n },\n\n save: async (proposal: VendorProposalEntity) => {\n const id = proposal.id;\n const ref = doc(collection(db, collectionId), id);\n\n try {\n let doc = omitBy(proposal, isUndefined);\n doc = omit(doc, [\"id\"]);\n await setDoc(ref, doc);\n return true;\n } catch (error) {\n console.error(error);\n return false;\n }\n }\n};\n","import { keyBy } from \"lodash-es\";\nimport {\n FilterOperation,\n SchemaField,\n SchemaFieldType,\n SchemaViewFilter\n} from \"../../../../api\";\n\nexport interface FilterControlProps {\n field: SchemaField;\n filter: SchemaViewFilter;\n onChange: (filter: SchemaViewFilter) => void;\n}\n\nexport const defaultFilterOperation: Record = {\n [SchemaFieldType.ShortText]: FilterOperation.Contains,\n [SchemaFieldType.LongText]: FilterOperation.Contains,\n [SchemaFieldType.Links]: FilterOperation.Contains,\n [SchemaFieldType.Checklist]: FilterOperation.Contains,\n [SchemaFieldType.Number]: FilterOperation.Between,\n [SchemaFieldType.Currency]: FilterOperation.Between,\n [SchemaFieldType.Calculated]: FilterOperation.Between,\n [SchemaFieldType.Date]: FilterOperation.Between,\n [SchemaFieldType.DateTime]: FilterOperation.Between,\n [SchemaFieldType.List]: FilterOperation.Any,\n [SchemaFieldType.Boolean]: FilterOperation.Equals,\n [SchemaFieldType.States]: FilterOperation.Any,\n [SchemaFieldType.MultiSelectList]: FilterOperation.Any,\n [SchemaFieldType.PreConId]: FilterOperation.Contains,\n [SchemaFieldType.Company]: FilterOperation.Any,\n [SchemaFieldType.Contact]: FilterOperation.Any\n};\n\nexport const allFilterOperations = [\n {\n label: \"Between\",\n value: FilterOperation.Between.toString(),\n operation: FilterOperation.Between,\n types: [\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Date,\n SchemaFieldType.DateTime\n ]\n },\n {\n label: \"Greater Than\",\n value: FilterOperation.GreaterThan.toString(),\n operation: FilterOperation.GreaterThan,\n types: [\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Date,\n SchemaFieldType.DateTime\n ]\n },\n {\n label: \"Greater Than or Equal To\",\n value: FilterOperation.GreaterThanOrEqualTo.toString(),\n operation: FilterOperation.GreaterThanOrEqualTo,\n types: [\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Date,\n SchemaFieldType.DateTime\n ]\n },\n {\n label: \"Less Than\",\n value: FilterOperation.LessThan.toString(),\n operation: FilterOperation.LessThan,\n types: [\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Date,\n SchemaFieldType.DateTime\n ]\n },\n {\n label: \"Less Than or Equal To\",\n value: FilterOperation.LessThanOrEqualTo.toString(),\n operation: FilterOperation.LessThanOrEqualTo,\n types: [\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Date,\n SchemaFieldType.DateTime\n ]\n },\n {\n label: \"Include\",\n value: FilterOperation.Any.toString(),\n operation: FilterOperation.Any,\n types: [SchemaFieldType.List, SchemaFieldType.States]\n },\n {\n label: \"Exclude\",\n value: FilterOperation.None.toString(),\n operation: FilterOperation.None,\n types: [SchemaFieldType.List, SchemaFieldType.States]\n },\n {\n label: \"Contains\",\n value: FilterOperation.Contains.toString(),\n operation: FilterOperation.Contains,\n types: [\n SchemaFieldType.ShortText,\n SchemaFieldType.LongText,\n SchemaFieldType.Links,\n SchemaFieldType.Checklist,\n SchemaFieldType.PreConId\n ]\n },\n {\n label: \"Starts With\",\n value: FilterOperation.StartsWith.toString(),\n operation: FilterOperation.StartsWith,\n types: [\n SchemaFieldType.ShortText,\n SchemaFieldType.LongText,\n SchemaFieldType.Links,\n SchemaFieldType.Checklist,\n SchemaFieldType.PreConId\n ]\n },\n {\n label: \"Ends With\",\n value: FilterOperation.EndsWith.toString(),\n operation: FilterOperation.EndsWith,\n types: [\n SchemaFieldType.ShortText,\n SchemaFieldType.LongText,\n SchemaFieldType.Links,\n SchemaFieldType.Checklist,\n SchemaFieldType.PreConId\n ]\n },\n {\n label: \"Equals\",\n value: FilterOperation.Equals.toString(),\n operation: FilterOperation.Equals,\n types: [\n SchemaFieldType.ShortText,\n SchemaFieldType.LongText,\n SchemaFieldType.Links,\n SchemaFieldType.Checklist,\n SchemaFieldType.Boolean,\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Date,\n SchemaFieldType.DateTime,\n SchemaFieldType.PreConId\n ]\n },\n {\n label: \"Does Not Equal\",\n value: FilterOperation.NotEquals.toString(),\n operation: FilterOperation.NotEquals,\n types: [\n SchemaFieldType.ShortText,\n SchemaFieldType.LongText,\n SchemaFieldType.Links,\n SchemaFieldType.Checklist,\n SchemaFieldType.Boolean,\n SchemaFieldType.Number,\n SchemaFieldType.Currency,\n SchemaFieldType.Date,\n SchemaFieldType.DateTime,\n SchemaFieldType.PreConId\n ]\n },\n {\n label: \"Include Any\",\n value: FilterOperation.Any.toString(),\n operation: FilterOperation.Any,\n types: [\n SchemaFieldType.MultiSelectList,\n SchemaFieldType.Company,\n SchemaFieldType.Contact\n ]\n },\n {\n label: \"Exclude Any\",\n value: FilterOperation.None.toString(),\n operation: FilterOperation.None,\n types: [\n SchemaFieldType.MultiSelectList,\n SchemaFieldType.Company,\n SchemaFieldType.Contact\n ]\n },\n {\n label: \"Include All\",\n value: FilterOperation.Equals.toString(),\n operation: FilterOperation.Equals,\n types: [\n SchemaFieldType.MultiSelectList,\n SchemaFieldType.Company,\n SchemaFieldType.Contact\n ]\n },\n {\n label: \"Exclude All\",\n value: FilterOperation.NotEquals.toString(),\n operation: FilterOperation.NotEquals,\n types: [\n SchemaFieldType.MultiSelectList,\n SchemaFieldType.Company,\n SchemaFieldType.Contact\n ]\n }\n];\n\nexport const filterOptionLookup = keyBy(allFilterOperations, \"operation\");\n\nexport const filterConstants: { dates: { [key: string]: string } } = {\n dates: {\n nowM7: \"nowM7\",\n nowM30: \"nowM30\",\n nowP7: \"nowP7\",\n nowP30: \"nowP30\",\n nowM3month: \"nowM3month\",\n nowM6month: \"nowM6month\",\n nowM365: \"nowM365\",\n nowP365: \"nowP365\",\n custom: \"custom\"\n }\n};\n\nexport const dateStandardRanges = {\n nowM7: { start: -7, end: 0 },\n nowM30: { start: -30, end: 0 },\n nowP7: { start: 0, end: 7 },\n nowP30: { start: 0, end: 30 },\n nowM365: { start: -365, end: 0 },\n nowP365: { start: 0, end: 365 }\n};\n","export * from \"./views\";\nexport * from \"./state\";\nexport * from \"./sagas\";\nexport * from \"./hooks\";\nexport * from \"./common\";\n","import { IVendorLocationDto } from \"./../contacts-api-dto-interfaces\";\n/* tslint:disable */\n/* eslint-disable */\n//----------------------\n// \n// Generated using the NSwag toolchain v13.6.1.0 (NJsonSchema v10.1.21.0 (Newtonsoft.Json v12.0.0.0)) (http://NSwag.org)\n// \n//----------------------\n// ReSharper disable InconsistentNaming\n\nimport axios, {\n AxiosError,\n AxiosInstance,\n AxiosRequestConfig,\n AxiosResponse,\n CancelToken\n} from \"axios\";\n\nexport class ContactsClient {\n private instance: AxiosInstance;\n private baseUrl: string;\n protected jsonParseReviver:\n | ((key: string, value: any) => any)\n | undefined = undefined;\n\n constructor(baseUrl?: string, instance?: AxiosInstance) {\n this.instance = instance ? instance : axios.create();\n this.baseUrl = baseUrl ? baseUrl : \"\";\n }\n\n /**\n * Deletes an existing company type, scoped to the company/business unit of the current user.\n * @param id The company type's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Company type deleted.\n */\n deleteCompanyType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/companyTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteCompanyType(_response);\n });\n }\n\n protected processDeleteCompanyType(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Company type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns the company type specified by the unique identifier,\n scoped to the company/business unit of the current user.\n * @param id The company type's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional) \n * @return Success\n */\n getCompanyType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/companyTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetCompanyType(_response);\n });\n }\n\n protected processGetCompanyType(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = CompanyTypeDto.fromJS(resultData200);\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Company type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates an existing company type, scoped to the company/business unit of the current user.\n * @param id The company type's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional) The updated company type.\n * @return Company type updated.\n */\n updateCompanyType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateCompanyTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/companyTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateCompanyType(_response);\n });\n }\n\n protected processUpdateCompanyType(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Company type code already in use.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Company type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes an existing minority type, scoped to the company/business unit of the current user.\n * @param id The minority type's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Minority type deleted.\n */\n deleteMinorityType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/minorityTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteMinorityType(_response);\n });\n }\n\n protected processDeleteMinorityType(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Minority type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns the minority type specified by the unique identifier,\n scoped to the company/business unit of the current user.\n * @param id The minority type's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional) \n * @return Success\n */\n getMinorityType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/minorityTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetMinorityType(_response);\n });\n }\n\n protected processGetMinorityType(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = MinorityTypeDto.fromJS(resultData200);\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Minority type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates an existing minority type, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Minority type updated.\n */\n updateMinorityType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateMinorityTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/minorityTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateMinorityType(_response);\n });\n }\n\n protected processUpdateMinorityType(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Minority type code already in use.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Minority type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes an existing product type, scoped to the company/business unit of the current user.\n * @param id The product type's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Product type deleted.\n */\n deleteProductType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/productTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteProductType(_response);\n });\n }\n\n protected processDeleteProductType(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Product type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns the product type specified by the unique identifier,\n scoped to the company/business unit of the current user.\n * @param id The product type's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional) \n * @return Success\n */\n getProductType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/productTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetProductType(_response);\n });\n }\n\n protected processGetProductType(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = ProductTypeDto.fromJS(resultData200);\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Product type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates an existing product type, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Product type updated.\n */\n updateProductType(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateProductTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/productTypes/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateProductType(_response);\n });\n }\n\n protected processUpdateProductType(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Product type code already in use.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Product type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes a profile, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Successfully deleted the profile.\n */\n deleteProfile(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteProfile(_response);\n });\n }\n\n protected processDeleteProfile(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns the profile specified by the unique identifier.\n * @param id The profile's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n getProfile(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetProfile(_response);\n });\n }\n\n protected processGetProfile(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = ProfileDto.fromJS(resultData200);\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile not found\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes the specified contact, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Successfully deleted contact.\n */\n deleteProfileContact(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/contacts/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteProfileContact(_response);\n });\n }\n\n protected processDeleteProfileContact(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Contact not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates the specified contact, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully updated contact.\n */\n updateProfileContact(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateProfileContactDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/contacts/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateProfileContact(_response);\n });\n }\n\n protected processUpdateProfileContact(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Contact not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes the specified minority status, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Successfully deleted status.\n */\n deleteProfileMinorityStatus(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/statuses/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteProfileMinorityStatus(_response);\n });\n }\n\n protected processDeleteProfileMinorityStatus(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Minority Status not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates the specified minority status, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully updated minority status.\n */\n updateProfileMinoirtyStatus(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateProfileMinorityStatusDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/statuses/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateProfileMinoirtyStatus(_response);\n });\n }\n\n protected processUpdateProfileMinoirtyStatus(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Minority Status/Type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes the specified product, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Successfully deleted product.\n */\n deleteProfileProduct(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/products/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteProfileProduct(_response);\n });\n }\n\n protected processDeleteProfileProduct(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Product not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates the specified product, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully updated product.\n */\n updateProfileProduct(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateProfileProductDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/products/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateProfileProduct(_response);\n });\n }\n\n protected processUpdateProfileProduct(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Product not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes an existing region, scoped to the company/business unit of the current user.\n * @param id The region's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Region deleted.\n */\n deleteRegion(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/regions/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteRegion(_response);\n });\n }\n\n protected processDeleteRegion(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Region not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns the region specified by the unique identifier,\n scoped to the company/business unit of the current user.\n * @param id The Region's unique identifier.\n * @param x_Requested_Business_Unit_Id (optional) \n * @return Success\n */\n getRegion(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/regions/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetRegion(_response);\n });\n }\n\n protected processGetRegion(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = RegionDto.fromJS(resultData200);\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Region not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates an existing region, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Region updated.\n */\n updateRegion(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateRegionDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/regions/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateRegion(_response);\n });\n }\n\n protected processUpdateRegion(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Region code already in use.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Region not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes an existing vendor, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n deleteVendor(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteVendor(_response);\n });\n }\n\n protected processDeleteVendor(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n return throwException(\n \"Vendor not found.\",\n status,\n _responseText,\n _headers\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns the vendor specified by the unique identifier,\n scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional) \n * @return Success\n * @deprecated\n */\n getVendor(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetVendor(_response);\n });\n }\n\n protected processGetVendor(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = VendorDtoV1Response.fromJS(resultData200);\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n return throwException(\n \"Vendor not found\",\n status,\n _responseText,\n _headers\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates an existing vendor, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully updated the vendor.\n * @deprecated\n */\n updateVendor(\n id: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateVendorDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{id}\";\n if (id === undefined || id === null)\n throw new Error(\"The parameter 'id' must be defined.\");\n url_ = url_.replace(\"{id}\", encodeURIComponent(\"\" + id));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateVendor(_response);\n });\n }\n\n protected processUpdateVendor(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Region not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Vendor code already exists.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes the specified contact, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Successfully deleted contact.\n */\n deleteVendorContact(\n vendorId: string,\n contactId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/contacts/{contactId}\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n if (contactId === undefined || contactId === null)\n throw new Error(\"The parameter 'contactId' must be defined.\");\n url_ = url_.replace(\"{contactId}\", encodeURIComponent(\"\" + contactId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteVendorContact(_response);\n });\n }\n\n protected processDeleteVendorContact(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Contact not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates the specified contact, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully updated contact.\n */\n updateVendorContact(\n vendorId: string,\n contactId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateVendorContactDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/contacts/{contactId}\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n if (contactId === undefined || contactId === null)\n throw new Error(\"The parameter 'contactId' must be defined.\");\n url_ = url_.replace(\"{contactId}\", encodeURIComponent(\"\" + contactId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateVendorContact(_response);\n });\n }\n\n protected processUpdateVendorContact(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Contact not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes the specified minority status, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Successfully deleted minority status.\n */\n deleteVendorMinorityStatus(\n vendorId: string,\n statusId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/statuses/{statusId}\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n if (statusId === undefined || statusId === null)\n throw new Error(\"The parameter 'statusId' must be defined.\");\n url_ = url_.replace(\"{statusId}\", encodeURIComponent(\"\" + statusId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteVendorMinorityStatus(_response);\n });\n }\n\n protected processDeleteVendorMinorityStatus(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Minority status not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates the specified minority status, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully updated minority status.\n */\n updateVendorMinorityStatus(\n vendorId: string,\n statusId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateVendorMinorityStatusDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/statuses/{statusId}\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n if (statusId === undefined || statusId === null)\n throw new Error(\"The parameter 'statusId' must be defined.\");\n url_ = url_.replace(\"{statusId}\", encodeURIComponent(\"\" + statusId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateVendorMinorityStatus(_response);\n });\n }\n\n protected processUpdateVendorMinorityStatus(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Minority status not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Deletes the specified product, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Successfully deleted product.\n */\n deleteVendorProduct(\n vendorId: string,\n productId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/products/{productId}\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n if (productId === undefined || productId === null)\n throw new Error(\"The parameter 'productId' must be defined.\");\n url_ = url_.replace(\"{productId}\", encodeURIComponent(\"\" + productId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"DELETE\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processDeleteVendorProduct(_response);\n });\n }\n\n protected processDeleteVendorProduct(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Product not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates the specified product, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully updated product.\n */\n updateVendorProduct(\n vendorId: string,\n productId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateVendorProductDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/products/{productId}\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n if (productId === undefined || productId === null)\n throw new Error(\"The parameter 'productId' must be defined.\");\n url_ = url_.replace(\"{productId}\", encodeURIComponent(\"\" + productId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateVendorProduct(_response);\n });\n }\n\n protected processUpdateVendorProduct(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Product not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns all company types, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n getCompanyTypes(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/companyTypes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetCompanyTypes(_response);\n });\n }\n\n protected processGetCompanyTypes(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(CompanyTypeDto.fromJS(item));\n }\n return result200;\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Creates a new company type, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional) The new company type\n * @return Company type created.\n */\n createCompanyType(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateCompanyTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/companyTypes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateCompanyType(_response);\n });\n }\n\n protected processCreateCompanyType(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Company type Code already in use.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Return all contacts scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n getContacts(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/contacts\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetContacts(_response);\n });\n }\n\n protected processGetContacts(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(GetContactDto.fromJS(item));\n }\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n return throwException(\n \"Contact not found\",\n status,\n _responseText,\n _headers\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Return all contacts scoped to the company/business unit of the current user based on a search term. \n Currently the search term will do a \"starts with\" comparison against contact first name, last name\n phone and email. It will also search the company code and name that each contact belongs to.\n * @param filter (optional) The search term\n * @param x_Requested_Business_Unit_Id (optional) \n * @return Success\n */\n getContactsSearch(\n filter?: string | null | undefined,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/contacts/search?\";\n if (filter !== undefined && filter !== null)\n url_ += \"filter=\" + encodeURIComponent(\"\" + filter) + \"&\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetContactsSearch(_response);\n });\n }\n\n protected processGetContactsSearch(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(GetContactSearchDto.fromJS(item));\n }\n return result200;\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns all minority types, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n getMinorityTypes(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/minorityTypes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetMinorityTypes(_response);\n });\n }\n\n protected processGetMinorityTypes(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(MinorityTypeDto.fromJS(item));\n }\n return result200;\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Creates a new minority type, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Minority type created.\n */\n createMinorityType(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateMinorityTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/minorityTypes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateMinorityType(_response);\n });\n }\n\n protected processCreateMinorityType(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Minority type code already in use.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns all product types, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n getProductTypes(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/productTypes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetProductTypes(_response);\n });\n }\n\n protected processGetProductTypes(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(ProductTypeDto.fromJS(item));\n }\n return result200;\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Creates a new product type, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Product type created.\n */\n createProductType(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateProductTypeDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/productTypes\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateProductType(_response);\n });\n }\n\n protected processCreateProductType(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Product type code already in use.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns the profile for the current authenticated user's company/business unit.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n getMyProfile(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/me\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetMyProfile(_response);\n });\n }\n\n protected processGetMyProfile(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = ProfileDto.fromJS(resultData200);\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile not found\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns all profiles.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n getProfiles(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetProfiles(_response);\n });\n }\n\n protected processGetProfiles(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(ProfileSummaryDto.fromJS(item));\n }\n return result200;\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Creates a new profile, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully created the profile.\n */\n createProfile(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateProfileDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateProfile(_response);\n });\n }\n\n protected processCreateProfile(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Profile already exists.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Region not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Updates a profile, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully updated the profile.\n */\n updateProfile(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: UpdateProfileDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"PUT\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpdateProfile(_response);\n });\n }\n\n protected processUpdateProfile(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Region not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns all regions, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n */\n getRegions(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/regions\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetRegions(_response);\n });\n }\n\n protected processGetRegions(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200) result200!.push(RegionDto.fromJS(item));\n }\n return result200;\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Creates a new region, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Region created.\n */\n createRegion(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateRegionDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/regions\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateRegion(_response);\n });\n }\n\n protected processCreateRegion(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Region code already in use.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns the vendor specified by the unique code,\n scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional) \n * @return Success\n * @deprecated\n */\n getVendorByCode(\n code: string | null,\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{code}\";\n if (code === undefined || code === null)\n throw new Error(\"The parameter 'code' must be defined.\");\n url_ = url_.replace(\"{code}\", encodeURIComponent(\"\" + code));\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetVendorByCode(_response);\n });\n }\n\n protected processGetVendorByCode(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = VendorDtoV1Response.fromJS(resultData200);\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n return throwException(\n \"Vendor not found\",\n status,\n _responseText,\n _headers\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns all vendors, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n * @deprecated\n */\n getVendors(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetVendors(_response);\n });\n }\n\n protected processGetVendors(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(VendorSummaryDtoResponse.fromJS(item));\n }\n return result200;\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Creates a new vendor, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully created the vendor.\n * @deprecated\n */\n createVendor(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateVendorDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateVendor(_response);\n });\n }\n\n protected processCreateVendor(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Region/Company type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 409) {\n const _responseText = response.data;\n let result409: any = null;\n let resultData409 = _responseText;\n result409 = ProblemDetails.fromJS(resultData409);\n return throwException(\n \"Vendor code already exists.\",\n status,\n _responseText,\n _headers,\n result409\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Returns all vendors with details, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @return Success\n * @deprecated\n */\n getDetailedVendors(\n x_Requested_Business_Unit_Id?: any | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/detailed\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n let options_ = {\n method: \"GET\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processGetDetailedVendors(_response);\n });\n }\n\n protected processGetDetailedVendors(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n if (Array.isArray(resultData200)) {\n result200 = [] as any;\n for (let item of resultData200)\n result200!.push(VendorDtoV1Response.fromJS(item));\n }\n return result200;\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Success\n */\n upload(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: BulkImport | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/bulk\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processUpload(_response);\n });\n }\n\n protected processUpload(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 204) {\n const _responseText = response.data;\n return Promise.resolve(null);\n } else if (status === 400) {\n const _responseText = response.data;\n let result400: any = null;\n let resultData400 = _responseText;\n result400 = ProblemDetails.fromJS(resultData400);\n return throwException(\n \"Bad Request\",\n status,\n _responseText,\n _headers,\n result400\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Adds a company logo to a storage and updates profile with logo url. \n This method will overwrite any existing logos.\n * @param x_Requested_Business_Unit_Id (optional) \n * @param body (optional) \n * @param logo (optional) \n * @return Successfully added the logo.\n */\n addProfileLogo(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: Body | undefined,\n logo?: FileParameter | null | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/logo\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = new FormData();\n if (logo !== null && logo !== undefined)\n content_.append(\n \"logo\",\n logo.data,\n logo.fileName ? logo.fileName : \"logo\"\n );\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"multipart/form-data\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processAddProfileLogo(_response);\n });\n }\n\n protected processAddProfileLogo(response: AxiosResponse): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 200) {\n const _responseText = response.data;\n let result200: any = null;\n let resultData200 = _responseText;\n result200 = resultData200 !== undefined ? resultData200 : null;\n return result200;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 413) {\n const _responseText = response.data;\n let result413: any = null;\n let resultData413 = _responseText;\n result413 = ProblemDetails.fromJS(resultData413);\n return throwException(\n \"Invalid content length.\",\n status,\n _responseText,\n _headers,\n result413\n );\n } else if (status === 415) {\n const _responseText = response.data;\n let result415: any = null;\n let resultData415 = _responseText;\n result415 = ProblemDetails.fromJS(resultData415);\n return throwException(\n \"Invalid content type.\",\n status,\n _responseText,\n _headers,\n result415\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Adds a contact, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully created contact.\n */\n createProfileContact(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateProfileContactDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/contacts\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateProfileContact(_response);\n });\n }\n\n protected processCreateProfileContact(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Creates a minority status, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully created minority status.\n */\n createProfileMinorityStatus(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateProfileMinorityStatusDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/statuses\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateProfileMinorityStatus(_response);\n });\n }\n\n protected processCreateProfileMinorityStatus(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Minority Type not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Adds a product, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully created product.\n */\n createProfileProduct(\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateProfileProductDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/profiles/products\";\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateProfileProduct(_response);\n });\n }\n\n protected processCreateProfileProduct(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Profile/Product not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Adds a contact, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully created contact.\n */\n createVendorContact(\n vendorId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateVendorContactDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/contacts\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateVendorContact(_response);\n });\n }\n\n protected processCreateVendorContact(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Creates a minority status, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully created minority status.\n */\n createVendorMinorityStatus(\n vendorId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateVendorMinorityStatusDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/statuses\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateVendorMinorityStatus(_response);\n });\n }\n\n protected processCreateVendorMinorityStatus(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Minority status not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n\n /**\n * Adds a product, scoped to the company/business unit of the current user.\n * @param x_Requested_Business_Unit_Id (optional)\n * @param body (optional)\n * @return Successfully created product.\n */\n createVendorProduct(\n vendorId: string,\n x_Requested_Business_Unit_Id?: any | undefined,\n body?: CreateVendorProductDto | undefined,\n cancelToken?: CancelToken | undefined\n ): Promise {\n let url_ = this.baseUrl + \"/api/v1/vendors/{vendorId}/products\";\n if (vendorId === undefined || vendorId === null)\n throw new Error(\"The parameter 'vendorId' must be defined.\");\n url_ = url_.replace(\"{vendorId}\", encodeURIComponent(\"\" + vendorId));\n url_ = url_.replace(/[?&]$/, \"\");\n\n const content_ = JSON.stringify(body);\n\n let options_ = {\n data: content_,\n method: \"POST\",\n url: url_,\n headers: {\n \"X-Requested-Business-Unit-Id\":\n x_Requested_Business_Unit_Id !== undefined &&\n x_Requested_Business_Unit_Id !== null\n ? \"\" + x_Requested_Business_Unit_Id\n : \"\",\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\"\n },\n cancelToken\n };\n\n return this.instance\n .request(options_)\n .catch((_error: any) => {\n if (isAxiosError(_error) && _error.response) {\n return _error.response;\n } else {\n throw _error;\n }\n })\n .then((_response: AxiosResponse) => {\n return this.processCreateVendorProduct(_response);\n });\n }\n\n protected processCreateVendorProduct(\n response: AxiosResponse\n ): Promise {\n const status = response.status;\n let _headers: any = {};\n if (response.headers && typeof response.headers === \"object\") {\n for (let k in response.headers) {\n if (response.headers.hasOwnProperty(k)) {\n _headers[k] = response.headers[k];\n }\n }\n }\n if (status === 201) {\n const _responseText = response.data;\n let result201: any = null;\n let resultData201 = _responseText;\n result201 = resultData201 !== undefined ? resultData201 : null;\n return result201;\n } else if (status === 404) {\n const _responseText = response.data;\n let result404: any = null;\n let resultData404 = _responseText;\n result404 = ProblemDetails.fromJS(resultData404);\n return throwException(\n \"Vendor/Product not found.\",\n status,\n _responseText,\n _headers,\n result404\n );\n } else if (status === 401) {\n const _responseText = response.data;\n return throwException(\"Unauthorized\", status, _responseText, _headers);\n } else if (status === 403) {\n const _responseText = response.data;\n return throwException(\"Forbidden\", status, _responseText, _headers);\n } else if (status !== 200 && status !== 204) {\n const _responseText = response.data;\n return throwException(\n \"An unexpected server error occurred.\",\n status,\n _responseText,\n _headers\n );\n }\n return Promise.resolve(null);\n }\n}\n\nexport class ProblemDetails implements IProblemDetails {\n type?: string | undefined;\n title?: string | undefined;\n status?: number | undefined;\n detail?: string | undefined;\n instance?: string | undefined;\n readonly extensions?: { [key: string]: any } | undefined;\n\n constructor(data?: IProblemDetails) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.type = _data[\"type\"];\n this.title = _data[\"title\"];\n this.status = _data[\"status\"];\n this.detail = _data[\"detail\"];\n this.instance = _data[\"instance\"];\n if (_data[\"extensions\"]) {\n (this).extensions = {} as any;\n for (let key in _data[\"extensions\"]) {\n if (_data[\"extensions\"].hasOwnProperty(key))\n (this).extensions![key] = _data[\"extensions\"][key];\n }\n }\n }\n }\n\n static fromJS(data: any): ProblemDetails {\n data = typeof data === \"object\" ? data : {};\n let result = new ProblemDetails();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"type\"] = this.type;\n data[\"title\"] = this.title;\n data[\"status\"] = this.status;\n data[\"detail\"] = this.detail;\n data[\"instance\"] = this.instance;\n if (this.extensions) {\n data[\"extensions\"] = {};\n for (let key in this.extensions) {\n if (this.extensions.hasOwnProperty(key))\n data[\"extensions\"][key] = this.extensions[key];\n }\n }\n return data;\n }\n}\n\nexport interface IProblemDetails {\n type?: string | undefined;\n title?: string | undefined;\n status?: number | undefined;\n detail?: string | undefined;\n instance?: string | undefined;\n extensions?: { [key: string]: any } | undefined;\n}\n\n/** A company type data transfer object. */\nexport class CompanyTypeDto implements ICompanyTypeDto {\n /** The type's unique identifier. */\n id?: string;\n /** The type's unique code. */\n code?: string | undefined;\n /** The type's description. */\n description?: string | undefined;\n\n constructor(data?: ICompanyTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): CompanyTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CompanyTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A company type data transfer object. */\nexport interface ICompanyTypeDto {\n /** The type's unique identifier. */\n id?: string;\n /** The type's unique code. */\n code?: string | undefined;\n /** The type's description. */\n description?: string | undefined;\n}\n\n/** A data transfer object for requesting the update of a company type. */\nexport class UpdateCompanyTypeDto implements IUpdateCompanyTypeDto {\n /** The existing company type's identifier. */\n id!: string;\n /** A unique company type code. */\n code!: string;\n /** The company type's description. */\n description?: string | undefined;\n\n constructor(data?: IUpdateCompanyTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): UpdateCompanyTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateCompanyTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A data transfer object for requesting the update of a company type. */\nexport interface IUpdateCompanyTypeDto {\n /** The existing company type's identifier. */\n id: string;\n /** A unique company type code. */\n code: string;\n /** The company type's description. */\n description?: string | undefined;\n}\n\n/** Minority type data transfer object. */\nexport class MinorityTypeDto implements IMinorityTypeDto {\n /** The Minority type's unique identifier. */\n id?: string;\n /** Minority type code. */\n code?: string | undefined;\n /** Minority type description. */\n description?: string | undefined;\n\n constructor(data?: IMinorityTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): MinorityTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new MinorityTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** Minority type data transfer object. */\nexport interface IMinorityTypeDto {\n /** The Minority type's unique identifier. */\n id?: string;\n /** Minority type code. */\n code?: string | undefined;\n /** Minority type description. */\n description?: string | undefined;\n}\n\n/** A data transfer object for requesting the update of a minority type. */\nexport class UpdateMinorityTypeDto implements IUpdateMinorityTypeDto {\n /** The existing minority type's identifier. */\n id!: string;\n /** A unique minority type code. */\n code!: string;\n /** The minority type's description. */\n description?: string | undefined;\n\n constructor(data?: IUpdateMinorityTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): UpdateMinorityTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateMinorityTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A data transfer object for requesting the update of a minority type. */\nexport interface IUpdateMinorityTypeDto {\n /** The existing minority type's identifier. */\n id: string;\n /** A unique minority type code. */\n code: string;\n /** The minority type's description. */\n description?: string | undefined;\n}\n\n/** A Product Type data transfer object. */\nexport class ProductTypeDto implements IProductTypeDto {\n /** The Product type's unique identifier. */\n id?: string;\n /** Product type code. */\n code?: string | undefined;\n /** Product type description. */\n description?: string | undefined;\n\n constructor(data?: IProductTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): ProductTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new ProductTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A Product Type data transfer object. */\nexport interface IProductTypeDto {\n /** The Product type's unique identifier. */\n id?: string;\n /** Product type code. */\n code?: string | undefined;\n /** Product type description. */\n description?: string | undefined;\n}\n\n/** A data transfer object for requesting the update of a product type. */\nexport class UpdateProductTypeDto implements IUpdateProductTypeDto {\n /** Existing product type's identifier. */\n id!: string;\n /** Unique product type code. */\n code!: string;\n /** The product type's description. */\n description?: string | undefined;\n\n constructor(data?: IUpdateProductTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): UpdateProductTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateProductTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A data transfer object for requesting the update of a product type. */\nexport interface IUpdateProductTypeDto {\n /** Existing product type's identifier. */\n id: string;\n /** Unique product type code. */\n code: string;\n /** The product type's description. */\n description?: string | undefined;\n}\n\nexport class Address implements IAddress {\n addressLine1?: string | undefined;\n addressLine2?: string | undefined;\n building?: string | undefined;\n city?: string | undefined;\n stateProvince?: string | undefined;\n countryRegion?: string | undefined;\n postalCode?: string | undefined;\n\n constructor(data?: IAddress) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.addressLine1 = _data[\"addressLine1\"];\n this.addressLine2 = _data[\"addressLine2\"];\n this.building = _data[\"building\"];\n this.city = _data[\"city\"];\n this.stateProvince = _data[\"stateProvince\"];\n this.countryRegion = _data[\"countryRegion\"];\n this.postalCode = _data[\"postalCode\"];\n }\n }\n\n static fromJS(data: any): Address {\n data = typeof data === \"object\" ? data : {};\n let result = new Address();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"addressLine1\"] = this.addressLine1;\n data[\"addressLine2\"] = this.addressLine2;\n data[\"building\"] = this.building;\n data[\"city\"] = this.city;\n data[\"stateProvince\"] = this.stateProvince;\n data[\"countryRegion\"] = this.countryRegion;\n data[\"postalCode\"] = this.postalCode;\n return data;\n }\n}\n\nexport interface IAddress {\n addressLine1?: string | undefined;\n addressLine2?: string | undefined;\n building?: string | undefined;\n city?: string | undefined;\n stateProvince?: string | undefined;\n countryRegion?: string | undefined;\n postalCode?: string | undefined;\n}\n\n/** A Region data transfer object. */\nexport class RegionDto implements IRegionDto {\n /** The Region's unique identifier. */\n id?: string;\n /** Region code. */\n code?: string | undefined;\n /** Region description. */\n description?: string | undefined;\n\n constructor(data?: IRegionDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): RegionDto {\n data = typeof data === \"object\" ? data : {};\n let result = new RegionDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A Region data transfer object. */\nexport interface IRegionDto {\n /** The Region's unique identifier. */\n id?: string;\n /** Region code. */\n code?: string | undefined;\n /** Region description. */\n description?: string | undefined;\n}\n\nexport enum CommunicationMethod {\n None = \"None\",\n Email = \"Email\",\n Fax = \"Fax\",\n Print = \"Print\"\n}\n\nexport class MinorityStatusDto implements IMinorityStatusDto {\n id?: string;\n companyId?: string;\n type?: MinorityTypeDto;\n certificationNumber?: string | undefined;\n percent?: number;\n\n constructor(data?: IMinorityStatusDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.companyId = _data[\"companyId\"];\n this.type = _data[\"type\"]\n ? MinorityTypeDto.fromJS(_data[\"type\"])\n : undefined;\n this.certificationNumber = _data[\"certificationNumber\"];\n this.percent = _data[\"percent\"];\n }\n }\n\n static fromJS(data: any): MinorityStatusDto {\n data = typeof data === \"object\" ? data : {};\n let result = new MinorityStatusDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"companyId\"] = this.companyId;\n data[\"type\"] = this.type ? this.type.toJSON() : undefined;\n data[\"certificationNumber\"] = this.certificationNumber;\n data[\"percent\"] = this.percent;\n return data;\n }\n}\n\nexport interface IMinorityStatusDto {\n id?: string;\n companyId?: string;\n type?: MinorityTypeDto;\n certificationNumber?: string | undefined;\n percent?: number;\n}\n\nexport class ProductDto implements IProductDto {\n id?: string;\n companyId?: string;\n product?: ProductTypeDto;\n region?: RegionDto;\n date?: Date | undefined;\n\n constructor(data?: IProductDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.companyId = _data[\"companyId\"];\n this.product = _data[\"product\"]\n ? ProductTypeDto.fromJS(_data[\"product\"])\n : undefined;\n this.region = _data[\"region\"]\n ? RegionDto.fromJS(_data[\"region\"])\n : undefined;\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): ProductDto {\n data = typeof data === \"object\" ? data : {};\n let result = new ProductDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"companyId\"] = this.companyId;\n data[\"product\"] = this.product ? this.product.toJSON() : undefined;\n data[\"region\"] = this.region ? this.region.toJSON() : undefined;\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n return data;\n }\n}\n\nexport interface IProductDto {\n id?: string;\n companyId?: string;\n product?: ProductTypeDto;\n region?: RegionDto;\n date?: Date | undefined;\n}\n\nexport interface IContactProduct {\n productTypeId: string;\n vendorProductId: string;\n code: string;\n}\n\nexport class ContactDto implements IContactDto {\n id: string = \"\";\n companyId?: string;\n firstName?: string | undefined;\n lastName?: string | undefined;\n title?: string | undefined;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n cellPhoneNumber?: string | undefined;\n emailAddress?: string | undefined;\n isMainContact?: boolean;\n note?: string | undefined;\n /** A string specifying a contact's role. */\n role?: string | undefined;\n /** A DateTime when this contact was last contacted. */\n lastContacted?: Date | undefined;\n vendorLocationId?: string | undefined;\n products?: IContactProduct[] | undefined;\n\n constructor(data?: IContactDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.companyId = _data[\"companyId\"];\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.title = _data[\"title\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.cellPhoneNumber = _data[\"cellPhoneNumber\"];\n this.emailAddress = _data[\"emailAddress\"];\n this.isMainContact = _data[\"isMainContact\"];\n this.note = _data[\"note\"];\n this.role = _data[\"role\"];\n this.lastContacted = _data[\"lastContacted\"]\n ? new Date(_data[\"lastContacted\"].toString())\n : undefined;\n this.vendorLocationId = _data[\"vendorLocationId\"];\n this.products = _data[\"products\"];\n }\n }\n\n static fromJS(data: any): ContactDto {\n data = typeof data === \"object\" ? data : {};\n let result = new ContactDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"companyId\"] = this.companyId;\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"title\"] = this.title;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"cellPhoneNumber\"] = this.cellPhoneNumber;\n data[\"emailAddress\"] = this.emailAddress;\n data[\"isMainContact\"] = this.isMainContact;\n data[\"note\"] = this.note;\n data[\"role\"] = this.role;\n data[\"lastContacted\"] = this.lastContacted\n ? this.lastContacted.toISOString()\n : undefined;\n data[\"vendorLocationId\"] = this.vendorLocationId;\n data[\"products\"] = this.products;\n return data;\n }\n}\n\nexport interface IContactDto {\n id: string;\n companyId?: string;\n firstName?: string | undefined;\n lastName?: string | undefined;\n title?: string | undefined;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n cellPhoneNumber?: string | undefined;\n emailAddress?: string | undefined;\n isMainContact?: boolean;\n note?: string | undefined;\n /** A string specifying a contact's role. */\n role?: string | undefined;\n /** A DateTime when this contact was last contacted. */\n lastContacted?: Date | undefined;\n vendorLocationId?: string;\n products?: IContactProduct[] | undefined;\n}\n\nexport class ProfileDto implements IProfileDto {\n /** The Profile's unique identifier. */\n id?: string;\n name?: string | undefined;\n primaryAddress?: Address;\n alternateAddress?: Address;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n webAddress?: string | undefined;\n region?: RegionDto;\n communicationMethod?: CommunicationMethod;\n /** The accent color for the company. */\n profileAccentColor?: string | undefined;\n /** The public logo url for the company. */\n profileLogoUrl?: string | undefined;\n minorityStatuses?: MinorityStatusDto[] | undefined;\n products?: ProductDto[] | undefined;\n contacts?: ContactDto[] | undefined;\n\n constructor(data?: IProfileDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n this.primaryAddress = _data[\"primaryAddress\"]\n ? Address.fromJS(_data[\"primaryAddress\"])\n : undefined;\n this.alternateAddress = _data[\"alternateAddress\"]\n ? Address.fromJS(_data[\"alternateAddress\"])\n : undefined;\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.webAddress = _data[\"webAddress\"];\n this.region = _data[\"region\"]\n ? RegionDto.fromJS(_data[\"region\"])\n : undefined;\n this.communicationMethod = _data[\"communicationMethod\"];\n this.profileAccentColor = _data[\"profileAccentColor\"];\n this.profileLogoUrl = _data[\"profileLogoUrl\"];\n if (Array.isArray(_data[\"minorityStatuses\"])) {\n this.minorityStatuses = [] as any;\n for (let item of _data[\"minorityStatuses\"])\n this.minorityStatuses!.push(MinorityStatusDto.fromJS(item));\n }\n if (Array.isArray(_data[\"products\"])) {\n this.products = [] as any;\n for (let item of _data[\"products\"])\n this.products!.push(ProductDto.fromJS(item));\n }\n if (Array.isArray(_data[\"contacts\"])) {\n this.contacts = [] as any;\n for (let item of _data[\"contacts\"])\n this.contacts!.push(ContactDto.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): ProfileDto {\n data = typeof data === \"object\" ? data : {};\n let result = new ProfileDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n data[\"primaryAddress\"] = this.primaryAddress\n ? this.primaryAddress.toJSON()\n : undefined;\n data[\"alternateAddress\"] = this.alternateAddress\n ? this.alternateAddress.toJSON()\n : undefined;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"webAddress\"] = this.webAddress;\n data[\"region\"] = this.region ? this.region.toJSON() : undefined;\n data[\"communicationMethod\"] = this.communicationMethod;\n data[\"profileAccentColor\"] = this.profileAccentColor;\n data[\"profileLogoUrl\"] = this.profileLogoUrl;\n if (Array.isArray(this.minorityStatuses)) {\n data[\"minorityStatuses\"] = [];\n for (let item of this.minorityStatuses)\n data[\"minorityStatuses\"].push(item.toJSON());\n }\n if (Array.isArray(this.products)) {\n data[\"products\"] = [];\n for (let item of this.products) data[\"products\"].push(item.toJSON());\n }\n if (Array.isArray(this.contacts)) {\n data[\"contacts\"] = [];\n for (let item of this.contacts) data[\"contacts\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IProfileDto {\n /** The Profile's unique identifier. */\n id?: string;\n name?: string | undefined;\n primaryAddress?: Address;\n alternateAddress?: Address;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n webAddress?: string | undefined;\n region?: RegionDto;\n communicationMethod?: CommunicationMethod;\n /** The accent color for the company. */\n profileAccentColor?: string | undefined;\n /** The public logo url for the company. */\n profileLogoUrl?: string | undefined;\n minorityStatuses?: MinorityStatusDto[] | undefined;\n products?: ProductDto[] | undefined;\n contacts?: ContactDto[] | undefined;\n}\n\n/** A data transfer object for requesting an update to a contact. */\nexport class UpdateProfileContactDto implements IUpdateProfileContactDto {\n /** The contact's unique identifier. */\n id!: string;\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n\n constructor(data?: IUpdateProfileContactDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.title = _data[\"title\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.cellPhoneNumber = _data[\"cellPhoneNumber\"];\n this.emailAddress = _data[\"emailAddress\"];\n this.note = _data[\"note\"];\n this.isMainContact = _data[\"isMainContact\"];\n }\n }\n\n static fromJS(data: any): UpdateProfileContactDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateProfileContactDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"title\"] = this.title;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"cellPhoneNumber\"] = this.cellPhoneNumber;\n data[\"emailAddress\"] = this.emailAddress;\n data[\"note\"] = this.note;\n data[\"isMainContact\"] = this.isMainContact;\n return data;\n }\n}\n\n/** A data transfer object for requesting an update to a contact. */\nexport interface IUpdateProfileContactDto {\n /** The contact's unique identifier. */\n id: string;\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n}\n\n/** A data transfer object for requesting an update of a profile's minority status. */\nexport class UpdateProfileMinorityStatusDto\n implements IUpdateProfileMinorityStatusDto {\n /** The profile minority status's unique identifier. */\n id!: string;\n /** The minority status's type unique identifier. */\n minorityTypeId!: string;\n /** The minority status certification number. */\n certificationNumber?: string | undefined;\n /** The minority percentage. */\n percent?: number;\n\n constructor(data?: IUpdateProfileMinorityStatusDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.minorityTypeId = _data[\"minorityTypeId\"];\n this.certificationNumber = _data[\"certificationNumber\"];\n this.percent = _data[\"percent\"];\n }\n }\n\n static fromJS(data: any): UpdateProfileMinorityStatusDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateProfileMinorityStatusDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"minorityTypeId\"] = this.minorityTypeId;\n data[\"certificationNumber\"] = this.certificationNumber;\n data[\"percent\"] = this.percent;\n return data;\n }\n}\n\n/** A data transfer object for requesting an update of a profile's minority status. */\nexport interface IUpdateProfileMinorityStatusDto {\n /** The profile minority status's unique identifier. */\n id: string;\n /** The minority status's type unique identifier. */\n minorityTypeId: string;\n /** The minority status certification number. */\n certificationNumber?: string | undefined;\n /** The minority percentage. */\n percent?: number;\n}\n\n/** An immutable command message for requesting the update of an company products. */\nexport class UpdateProfileProductDto implements IUpdateProfileProductDto {\n /** The company product's unique identifier. */\n id!: string;\n /** The product types's unique identifier. */\n productTypeId!: string;\n /** The product region's unique identifier. */\n regionId?: string | undefined;\n /** The date. */\n date?: Date | undefined;\n\n constructor(data?: IUpdateProfileProductDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.productTypeId = _data[\"productTypeId\"];\n this.regionId = _data[\"regionId\"];\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): UpdateProfileProductDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateProfileProductDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"productTypeId\"] = this.productTypeId;\n data[\"regionId\"] = this.regionId;\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n return data;\n }\n}\n\n/** An immutable command message for requesting the update of an company products. */\nexport interface IUpdateProfileProductDto {\n /** The company product's unique identifier. */\n id: string;\n /** The product types's unique identifier. */\n productTypeId: string;\n /** The product region's unique identifier. */\n regionId?: string | undefined;\n /** The date. */\n date?: Date | undefined;\n}\n\n/** A data transfer object for requesting the update of a Region. */\nexport class UpdateRegionDto implements IUpdateRegionDto {\n /** The existing region's unique identifier. */\n id!: string;\n /** The the region's unique code. */\n code!: string;\n /** The region's description. */\n description?: string | undefined;\n\n constructor(data?: IUpdateRegionDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): UpdateRegionDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateRegionDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A data transfer object for requesting the update of a Region. */\nexport interface IUpdateRegionDto {\n /** The existing region's unique identifier. */\n id: string;\n /** The the region's unique code. */\n code: string;\n /** The region's description. */\n description?: string | undefined;\n}\n\n/** A vendor data transfer object. */\nexport class VendorDtoV1Response implements IVendorDtoV1Response {\n /** The company's unique identifier. */\n id!: string;\n /** The company's unique code. */\n code!: string;\n heavyBidCode!: string;\n /** The company's name. */\n name?: string | undefined;\n type?: CompanyTypeDto;\n region?: RegionDto;\n communicationMethod?: CommunicationMethod;\n /** A flag indicating if this company is bonded. */\n isBonded?: boolean;\n /** The rate at which this company is bonded. */\n bondRate?: number;\n /** Notes about this company. */\n note?: string | undefined;\n primaryAddress?: Address;\n alternateAddress?: Address;\n /** The vendor's phone number. */\n phoneNumber?: string | undefined;\n /** The vendor's fax number. */\n faxNumber?: string | undefined;\n /** The company's website address. */\n webAddress?: string | undefined;\n /** The list of statuses this company has. */\n minorityStatuses!: MinorityStatusDto[];\n /** The list of products this company offers. */\n products!: ProductDto[];\n /** The list of contacts at this company. */\n contacts!: ContactDto[];\n\n constructor(data?: IVendorDtoV1Response) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n if (!data) {\n this.minorityStatuses = [];\n this.products = [];\n this.contacts = [];\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.heavyBidCode = _data[\"heavyBidCode\"];\n this.name = _data[\"name\"];\n this.type = _data[\"type\"]\n ? CompanyTypeDto.fromJS(_data[\"type\"])\n : undefined;\n this.region = _data[\"region\"]\n ? RegionDto.fromJS(_data[\"region\"])\n : undefined;\n this.communicationMethod = _data[\"communicationMethod\"];\n this.isBonded = _data[\"isBonded\"];\n this.bondRate = _data[\"bondRate\"];\n this.note = _data[\"note\"];\n this.primaryAddress = _data[\"primaryAddress\"]\n ? Address.fromJS(_data[\"primaryAddress\"])\n : undefined;\n this.alternateAddress = _data[\"alternateAddress\"]\n ? Address.fromJS(_data[\"alternateAddress\"])\n : undefined;\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.webAddress = _data[\"webAddress\"];\n if (Array.isArray(_data[\"minorityStatuses\"])) {\n this.minorityStatuses = [] as any;\n for (let item of _data[\"minorityStatuses\"])\n this.minorityStatuses!.push(MinorityStatusDto.fromJS(item));\n }\n if (Array.isArray(_data[\"products\"])) {\n this.products = [] as any;\n for (let item of _data[\"products\"])\n this.products!.push(ProductDto.fromJS(item));\n }\n if (Array.isArray(_data[\"contacts\"])) {\n this.contacts = [] as any;\n for (let item of _data[\"contacts\"])\n this.contacts!.push(ContactDto.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): VendorDtoV1Response {\n data = typeof data === \"object\" ? data : {};\n let result = new VendorDtoV1Response();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"heavyBidCode\"] = this.heavyBidCode;\n data[\"name\"] = this.name;\n data[\"type\"] = this.type ? this.type.toJSON() : undefined;\n data[\"region\"] = this.region ? this.region.toJSON() : undefined;\n data[\"communicationMethod\"] = this.communicationMethod;\n data[\"isBonded\"] = this.isBonded;\n data[\"bondRate\"] = this.bondRate;\n data[\"note\"] = this.note;\n data[\"primaryAddress\"] = this.primaryAddress\n ? this.primaryAddress.toJSON()\n : undefined;\n data[\"alternateAddress\"] = this.alternateAddress\n ? this.alternateAddress.toJSON()\n : undefined;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"webAddress\"] = this.webAddress;\n if (Array.isArray(this.minorityStatuses)) {\n data[\"minorityStatuses\"] = [];\n for (let item of this.minorityStatuses)\n data[\"minorityStatuses\"].push(item.toJSON());\n }\n if (Array.isArray(this.products)) {\n data[\"products\"] = [];\n for (let item of this.products) data[\"products\"].push(item.toJSON());\n }\n if (Array.isArray(this.contacts)) {\n data[\"contacts\"] = [];\n for (let item of this.contacts) data[\"contacts\"].push(item.toJSON());\n }\n return data;\n }\n}\n\n/** A vendor data transfer object. */\nexport interface IVendorDtoV1Response {\n /** The company's unique identifier. */\n id: string;\n /** The company's unique code. */\n code: string;\n heavyBidCode: string;\n /** The company's name. */\n name?: string | undefined;\n type?: CompanyTypeDto;\n region?: RegionDto;\n communicationMethod?: CommunicationMethod;\n /** A flag indicating if this company is bonded. */\n isBonded?: boolean;\n /** The rate at which this company is bonded. */\n bondRate?: number;\n /** Notes about this company. */\n note?: string | undefined;\n primaryAddress?: Address;\n alternateAddress?: Address;\n /** The vendor's phone number. */\n phoneNumber?: string | undefined;\n /** The vendor's fax number. */\n faxNumber?: string | undefined;\n /** The company's website address. */\n webAddress?: string | undefined;\n /** The list of statuses this company has. */\n minorityStatuses: MinorityStatusDto[];\n /** The list of products this company offers. */\n products: ProductDto[];\n /** The list of contacts at this company. */\n contacts: ContactDto[];\n /** The list of vendor locations for this company. */\n locations?: IVendorLocationDto[];\n /** The vendor's accounting code. */\n accountingCode?: string;\n}\n\n/** A data transfer object for requesting the update of a vendor. */\nexport class UpdateVendorDto implements IUpdateVendorDto {\n /** The vendor's unique identifier. */\n id?: string;\n /** The vendor's unique code. */\n code!: string;\n /** The vendor's name. */\n name?: string | undefined;\n /** The vendor type unique identifier. */\n typeId?: string | undefined;\n primaryAddress?: Address;\n alternateAddress?: Address;\n /** The vendor's phone number. */\n phoneNumber?: string | undefined;\n /** The vendor's fax number. */\n faxNumber?: string | undefined;\n /** The vendor's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the vendor operates in. */\n regionId?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** A collection of vendor products */\n products?: ProductDto[] | undefined;\n /** A flag indicating if this vendor is bonded. */\n isBonded?: boolean;\n /** The rate at which this vendor is bonded. */\n bondRate?: number;\n /** Notes about this vendor. */\n note?: string | undefined;\n companyType?: CompanyTypeDto;\n\n constructor(data?: IUpdateVendorDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.typeId = _data[\"typeId\"];\n this.primaryAddress = _data[\"primaryAddress\"]\n ? Address.fromJS(_data[\"primaryAddress\"])\n : undefined;\n this.alternateAddress = _data[\"alternateAddress\"]\n ? Address.fromJS(_data[\"alternateAddress\"])\n : undefined;\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.webAddress = _data[\"webAddress\"];\n this.regionId = _data[\"regionId\"];\n this.communicationMethod = _data[\"communicationMethod\"];\n if (Array.isArray(_data[\"products\"])) {\n this.products = [] as any;\n for (let item of _data[\"products\"])\n this.products!.push(ProductDto.fromJS(item));\n }\n this.isBonded = _data[\"isBonded\"];\n this.bondRate = _data[\"bondRate\"];\n this.note = _data[\"note\"];\n this.products = _data[\"products\"];\n this.companyType = _data[\"companyType\"]\n ? CompanyTypeDto.fromJS(_data[\"companyType\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): UpdateVendorDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateVendorDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"typeId\"] = this.typeId;\n data[\"primaryAddress\"] = this.primaryAddress\n ? this.primaryAddress.toJSON()\n : undefined;\n data[\"alternateAddress\"] = this.alternateAddress\n ? this.alternateAddress.toJSON()\n : undefined;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"webAddress\"] = this.webAddress;\n data[\"regionId\"] = this.regionId;\n data[\"communicationMethod\"] = this.communicationMethod;\n if (Array.isArray(this.products)) {\n data[\"products\"] = [];\n for (let item of this.products) data[\"products\"].push(item.toJSON());\n }\n data[\"isBonded\"] = this.isBonded;\n data[\"bondRate\"] = this.bondRate;\n data[\"note\"] = this.note;\n data[\"products\"] = this.products;\n data[\"companyType\"] = this.companyType\n ? this.companyType.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** A data transfer object for requesting the update of a vendor. */\nexport interface IUpdateVendorDto {\n /** The vendor's unique identifier. */\n id?: string;\n /** The vendor's unique code. */\n code: string;\n /** The vendor's name. */\n name?: string | undefined;\n /** The vendor type unique identifier. */\n typeId?: string | undefined;\n primaryAddress?: Address;\n alternateAddress?: Address;\n /** The vendor's phone number. */\n phoneNumber?: string | undefined;\n /** The vendor's fax number. */\n faxNumber?: string | undefined;\n /** The vendor's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the vendor operates in. */\n regionId?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** A collection of vendor products */\n products?: ProductDto[] | undefined;\n /** A flag indicating if this vendor is bonded. */\n isBonded?: boolean;\n /** The rate at which this vendor is bonded. */\n bondRate?: number;\n /** Notes about this vendor. */\n note?: string | undefined;\n}\n\n/** A data transfer object for requesting an update to a contact. */\nexport class UpdateVendorContactDto implements IUpdateVendorContactDto {\n /** The vendor's unique identifier. */\n vendorId!: string;\n /** The contact's unique identifier. */\n contactId!: string;\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n /** A string specifying a contact's role. */\n role?: string | undefined;\n /** A DateTime when this contact was last contacted. */\n lastContacted?: Date | undefined;\n\n constructor(data?: IUpdateVendorContactDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.vendorId = _data[\"vendorId\"];\n this.contactId = _data[\"contactId\"];\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.title = _data[\"title\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.cellPhoneNumber = _data[\"cellPhoneNumber\"];\n this.emailAddress = _data[\"emailAddress\"];\n this.note = _data[\"note\"];\n this.isMainContact = _data[\"isMainContact\"];\n this.role = _data[\"role\"];\n this.lastContacted = _data[\"lastContacted\"]\n ? new Date(_data[\"lastContacted\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): UpdateVendorContactDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateVendorContactDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"vendorId\"] = this.vendorId;\n data[\"contactId\"] = this.contactId;\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"title\"] = this.title;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"cellPhoneNumber\"] = this.cellPhoneNumber;\n data[\"emailAddress\"] = this.emailAddress;\n data[\"note\"] = this.note;\n data[\"isMainContact\"] = this.isMainContact;\n data[\"role\"] = this.role;\n data[\"lastContacted\"] = this.lastContacted\n ? this.lastContacted.toISOString()\n : undefined;\n return data;\n }\n}\n\n/** A data transfer object for requesting an update to a contact. */\nexport interface IUpdateVendorContactDto {\n /** The vendor's unique identifier. */\n vendorId: string;\n /** The contact's unique identifier. */\n contactId: string;\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n /** A string specifying a contact's role. */\n role?: string | undefined;\n /** A DateTime when this contact was last contacted. */\n lastContacted?: Date | undefined;\n /** A location id this contact tie to */\n vendorLocationId?: string;\n /** Contact products */\n products?: IContactProduct[];\n}\n\n/** A data transfer object for requesting an update of an vendor minority status. */\nexport class UpdateVendorMinorityStatusDto\n implements IUpdateVendorMinorityStatusDto {\n /** The vendor's unique identifier. */\n vendorId!: string;\n /** The vendor minority status's unique identifier. */\n statusId!: string;\n /** The minority status type's unique identifier. */\n minorityTypeId!: string;\n /** The vendor's minority status certification number. */\n certificationNumber?: string | undefined;\n /** The vendor's minority percentage. */\n percent?: number;\n\n constructor(data?: IUpdateVendorMinorityStatusDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.vendorId = _data[\"vendorId\"];\n this.statusId = _data[\"statusId\"];\n this.minorityTypeId = _data[\"minorityTypeId\"];\n this.certificationNumber = _data[\"certificationNumber\"];\n this.percent = _data[\"percent\"];\n }\n }\n\n static fromJS(data: any): UpdateVendorMinorityStatusDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateVendorMinorityStatusDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"vendorId\"] = this.vendorId;\n data[\"statusId\"] = this.statusId;\n data[\"minorityTypeId\"] = this.minorityTypeId;\n data[\"certificationNumber\"] = this.certificationNumber;\n data[\"percent\"] = this.percent;\n return data;\n }\n}\n\n/** A data transfer object for requesting an update of an vendor minority status. */\nexport interface IUpdateVendorMinorityStatusDto {\n /** The vendor's unique identifier. */\n vendorId: string;\n /** The vendor minority status's unique identifier. */\n statusId: string;\n /** The minority status type's unique identifier. */\n minorityTypeId: string;\n /** The vendor's minority status certification number. */\n certificationNumber?: string | undefined;\n /** The vendor's minority percentage. */\n percent?: number;\n}\n\n/** A data transfer object for requesting the update of an vendor products. */\nexport class UpdateVendorProductDto implements IUpdateVendorProductDto {\n /** The vendor's unique identifier. */\n vendorId!: string;\n /** The vendor product's unique identifier. */\n productId!: string;\n /** The product types's unique identifier. */\n productTypeId!: string;\n /** The product region's unique identifier. */\n regionId?: string | undefined;\n /** The date. */\n date?: Date | undefined;\n\n constructor(data?: IUpdateVendorProductDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.vendorId = _data[\"vendorId\"];\n this.productId = _data[\"productId\"];\n this.productTypeId = _data[\"productTypeId\"];\n this.regionId = _data[\"regionId\"];\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): UpdateVendorProductDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateVendorProductDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"vendorId\"] = this.vendorId;\n data[\"productId\"] = this.productId;\n data[\"productTypeId\"] = this.productTypeId;\n data[\"regionId\"] = this.regionId;\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n return data;\n }\n}\n\n/** A data transfer object for requesting the update of an vendor products. */\nexport interface IUpdateVendorProductDto {\n /** The vendor's unique identifier. */\n vendorId: string;\n /** The vendor product's unique identifier. */\n productId: string;\n /** The product types's unique identifier. */\n productTypeId: string;\n /** The product region's unique identifier. */\n regionId?: string | undefined;\n /** The date. */\n date?: Date | undefined;\n}\n\n/** An datat transfer object for requesting the creation of a company type. */\nexport class CreateCompanyTypeDto implements ICreateCompanyTypeDto {\n /** The unique company type code. */\n code!: string;\n /** The company type's description. */\n description?: string | undefined;\n\n constructor(data?: ICreateCompanyTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): CreateCompanyTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateCompanyTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** An datat transfer object for requesting the creation of a company type. */\nexport interface ICreateCompanyTypeDto {\n /** The unique company type code. */\n code: string;\n /** The company type's description. */\n description?: string | undefined;\n}\n\nexport class GetContactDto implements IGetContactDto {\n companyName?: string | undefined;\n id?: string;\n companyId?: string;\n firstName?: string | undefined;\n lastName?: string | undefined;\n title?: string | undefined;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n cellPhoneNumber?: string | undefined;\n emailAddress?: string | undefined;\n isMainContact?: boolean;\n note?: string | undefined;\n /** A string specifying a contact's role. */\n role?: string | undefined;\n /** A DateTime when this contact was last contacted. */\n lastContacted?: Date | undefined;\n\n constructor(data?: IGetContactDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.companyName = _data[\"companyName\"];\n this.id = _data[\"id\"];\n this.companyId = _data[\"companyId\"];\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.title = _data[\"title\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.cellPhoneNumber = _data[\"cellPhoneNumber\"];\n this.emailAddress = _data[\"emailAddress\"];\n this.isMainContact = _data[\"isMainContact\"];\n this.note = _data[\"note\"];\n this.role = _data[\"role\"];\n this.lastContacted = _data[\"lastContacted\"]\n ? new Date(_data[\"lastContacted\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): GetContactDto {\n data = typeof data === \"object\" ? data : {};\n let result = new GetContactDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"companyName\"] = this.companyName;\n data[\"id\"] = this.id;\n data[\"companyId\"] = this.companyId;\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"title\"] = this.title;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"cellPhoneNumber\"] = this.cellPhoneNumber;\n data[\"emailAddress\"] = this.emailAddress;\n data[\"isMainContact\"] = this.isMainContact;\n data[\"note\"] = this.note;\n data[\"role\"] = this.role;\n data[\"lastContacted\"] = this.lastContacted\n ? this.lastContacted.toISOString()\n : undefined;\n return data;\n }\n}\n\nexport interface IGetContactDto {\n companyName?: string | undefined;\n id?: string;\n companyId?: string;\n firstName?: string | undefined;\n lastName?: string | undefined;\n title?: string | undefined;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n cellPhoneNumber?: string | undefined;\n emailAddress?: string | undefined;\n isMainContact?: boolean;\n note?: string | undefined;\n /** A string specifying a contact's role. */\n role?: string | undefined;\n /** A DateTime when this contact was last contacted. */\n lastContacted?: Date | undefined;\n}\n\nexport class GetContactSearchDto implements IGetContactSearchDto {\n id?: string;\n companyId?: string;\n companyName?: string | undefined;\n companyCode?: string | undefined;\n firstName?: string | undefined;\n lastName?: string | undefined;\n phoneNumber?: string | undefined;\n cellPhoneNumber?: string | undefined;\n emailAddress?: string | undefined;\n\n constructor(data?: IGetContactSearchDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.companyId = _data[\"companyId\"];\n this.companyName = _data[\"companyName\"];\n this.companyCode = _data[\"companyCode\"];\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.cellPhoneNumber = _data[\"cellPhoneNumber\"];\n this.emailAddress = _data[\"emailAddress\"];\n }\n }\n\n static fromJS(data: any): GetContactSearchDto {\n data = typeof data === \"object\" ? data : {};\n let result = new GetContactSearchDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"companyId\"] = this.companyId;\n data[\"companyName\"] = this.companyName;\n data[\"companyCode\"] = this.companyCode;\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"cellPhoneNumber\"] = this.cellPhoneNumber;\n data[\"emailAddress\"] = this.emailAddress;\n return data;\n }\n}\n\nexport interface IGetContactSearchDto {\n id?: string;\n companyId?: string;\n companyName?: string | undefined;\n companyCode?: string | undefined;\n firstName?: string | undefined;\n lastName?: string | undefined;\n phoneNumber?: string | undefined;\n cellPhoneNumber?: string | undefined;\n emailAddress?: string | undefined;\n}\n\n/** A data transfer object for requesting the creation of a minority type. */\nexport class CreateMinorityTypeDto implements ICreateMinorityTypeDto {\n /** A unique minority type code. */\n code!: string;\n /** The minority type's description. */\n description?: string | undefined;\n\n constructor(data?: ICreateMinorityTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): CreateMinorityTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateMinorityTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of a minority type. */\nexport interface ICreateMinorityTypeDto {\n /** A unique minority type code. */\n code: string;\n /** The minority type's description. */\n description?: string | undefined;\n}\n\n/** A data transfer object for requesting the creation of a product type. */\nexport class CreateProductTypeDto implements ICreateProductTypeDto {\n /** A unique product type code. */\n code!: string;\n /** The product type's description. */\n description?: string | undefined;\n\n constructor(data?: ICreateProductTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): CreateProductTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateProductTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of a product type. */\nexport interface ICreateProductTypeDto {\n /** A unique product type code. */\n code: string;\n /** The product type's description. */\n description?: string | undefined;\n}\n\nexport class PhoneNumber implements IPhoneNumber {\n number?: string | undefined;\n\n constructor(data?: IPhoneNumber) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.number = _data[\"number\"];\n }\n }\n\n static fromJS(data: any): PhoneNumber {\n data = typeof data === \"object\" ? data : {};\n let result = new PhoneNumber();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"number\"] = this.number;\n return data;\n }\n}\n\nexport interface IPhoneNumber {\n number?: string | undefined;\n}\n\nexport class ProfileSummaryDto implements IProfileSummaryDto {\n /** The Profile's unique identifier. */\n id?: string;\n name?: string | undefined;\n primaryAddress?: Address;\n phoneNumber?: PhoneNumber;\n webAddress?: string | undefined;\n region?: RegionDto;\n communicationMethod?: CommunicationMethod;\n /** The accent color for the company. */\n profileAccentColor?: string | undefined;\n /** The public logo url for the company. */\n profileLogoUrl?: string | undefined;\n\n constructor(data?: IProfileSummaryDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.name = _data[\"name\"];\n this.primaryAddress = _data[\"primaryAddress\"]\n ? Address.fromJS(_data[\"primaryAddress\"])\n : undefined;\n this.phoneNumber = _data[\"phoneNumber\"]\n ? PhoneNumber.fromJS(_data[\"phoneNumber\"])\n : undefined;\n this.webAddress = _data[\"webAddress\"];\n this.region = _data[\"region\"]\n ? RegionDto.fromJS(_data[\"region\"])\n : undefined;\n this.communicationMethod = _data[\"communicationMethod\"];\n this.profileAccentColor = _data[\"profileAccentColor\"];\n this.profileLogoUrl = _data[\"profileLogoUrl\"];\n }\n }\n\n static fromJS(data: any): ProfileSummaryDto {\n data = typeof data === \"object\" ? data : {};\n let result = new ProfileSummaryDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"name\"] = this.name;\n data[\"primaryAddress\"] = this.primaryAddress\n ? this.primaryAddress.toJSON()\n : undefined;\n data[\"phoneNumber\"] = this.phoneNumber\n ? this.phoneNumber.toJSON()\n : undefined;\n data[\"webAddress\"] = this.webAddress;\n data[\"region\"] = this.region ? this.region.toJSON() : undefined;\n data[\"communicationMethod\"] = this.communicationMethod;\n data[\"profileAccentColor\"] = this.profileAccentColor;\n data[\"profileLogoUrl\"] = this.profileLogoUrl;\n return data;\n }\n}\n\nexport interface IProfileSummaryDto {\n /** The Profile's unique identifier. */\n id?: string;\n name?: string | undefined;\n primaryAddress?: Address;\n phoneNumber?: PhoneNumber;\n webAddress?: string | undefined;\n region?: RegionDto;\n communicationMethod?: CommunicationMethod;\n /** The accent color for the company. */\n profileAccentColor?: string | undefined;\n /** The public logo url for the company. */\n profileLogoUrl?: string | undefined;\n}\n\n/** A data transfer object for requesting the creation of a company profile. */\nexport class CreateProfileDto implements ICreateProfileDto {\n /** The company's name. */\n name!: string;\n primaryAddress?: Address;\n alternateAddress?: Address;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n /** The company's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the company operates in. */\n regionId?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** The accent color for the company. */\n profileAccentColor?: string | undefined;\n\n constructor(data?: ICreateProfileDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.name = _data[\"name\"];\n this.primaryAddress = _data[\"primaryAddress\"]\n ? Address.fromJS(_data[\"primaryAddress\"])\n : undefined;\n this.alternateAddress = _data[\"alternateAddress\"]\n ? Address.fromJS(_data[\"alternateAddress\"])\n : undefined;\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.webAddress = _data[\"webAddress\"];\n this.regionId = _data[\"regionId\"];\n this.communicationMethod = _data[\"communicationMethod\"];\n this.profileAccentColor = _data[\"profileAccentColor\"];\n }\n }\n\n static fromJS(data: any): CreateProfileDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateProfileDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"name\"] = this.name;\n data[\"primaryAddress\"] = this.primaryAddress\n ? this.primaryAddress.toJSON()\n : undefined;\n data[\"alternateAddress\"] = this.alternateAddress\n ? this.alternateAddress.toJSON()\n : undefined;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"webAddress\"] = this.webAddress;\n data[\"regionId\"] = this.regionId;\n data[\"communicationMethod\"] = this.communicationMethod;\n data[\"profileAccentColor\"] = this.profileAccentColor;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of a company profile. */\nexport interface ICreateProfileDto {\n /** The company's name. */\n name: string;\n primaryAddress?: Address;\n alternateAddress?: Address;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n /** The company's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the company operates in. */\n regionId?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** The accent color for the company. */\n profileAccentColor?: string | undefined;\n}\n\n/** A data transfer object for requesting the update to an existing company profile. */\nexport class UpdateProfileDto implements IUpdateProfileDto {\n /** The company's name. */\n name!: string;\n primaryAddress?: Address;\n alternateAddress?: Address;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n /** The company's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the company operates in. */\n regionId?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** The accent color for the company. */\n profileAccentColor?: string | undefined;\n\n constructor(data?: IUpdateProfileDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.name = _data[\"name\"];\n this.primaryAddress = _data[\"primaryAddress\"]\n ? Address.fromJS(_data[\"primaryAddress\"])\n : undefined;\n this.alternateAddress = _data[\"alternateAddress\"]\n ? Address.fromJS(_data[\"alternateAddress\"])\n : undefined;\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.webAddress = _data[\"webAddress\"];\n this.regionId = _data[\"regionId\"];\n this.communicationMethod = _data[\"communicationMethod\"];\n this.profileAccentColor = _data[\"profileAccentColor\"];\n }\n }\n\n static fromJS(data: any): UpdateProfileDto {\n data = typeof data === \"object\" ? data : {};\n let result = new UpdateProfileDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"name\"] = this.name;\n data[\"primaryAddress\"] = this.primaryAddress\n ? this.primaryAddress.toJSON()\n : undefined;\n data[\"alternateAddress\"] = this.alternateAddress\n ? this.alternateAddress.toJSON()\n : undefined;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"webAddress\"] = this.webAddress;\n data[\"regionId\"] = this.regionId;\n data[\"communicationMethod\"] = this.communicationMethod;\n data[\"profileAccentColor\"] = this.profileAccentColor;\n return data;\n }\n}\n\n/** A data transfer object for requesting the update to an existing company profile. */\nexport interface IUpdateProfileDto {\n /** The company's name. */\n name: string;\n primaryAddress?: Address;\n alternateAddress?: Address;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n /** The company's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the company operates in. */\n regionId?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** The accent color for the company. */\n profileAccentColor?: string | undefined;\n}\n\n/** A data transfer object for requesting the creation of a region. */\nexport class CreateRegionDto implements ICreateRegionDto {\n /** Unique Region code. */\n code!: string;\n /** The Region description. */\n description?: string | undefined;\n\n constructor(data?: ICreateRegionDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): CreateRegionDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateRegionDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of a region. */\nexport interface ICreateRegionDto {\n /** Unique Region code. */\n code: string;\n /** The Region description. */\n description?: string | undefined;\n}\n\n/** A vendor summary data transfer object. */\nexport class VendorSummaryDtoResponse implements IVendorSummaryDtoResponse {\n /** The company's unique identifier. */\n id!: string;\n /** The company's unique code. */\n code!: string;\n /** The company's name. */\n name?: string | undefined;\n type?: CompanyTypeDto;\n region?: RegionDto;\n communicationMethod?: CommunicationMethod;\n /** A flag indicating if this company is bonded. */\n isBonded?: boolean;\n /** The rate at which this company is bonded. */\n bondRate?: number;\n /** Notes about this company. */\n note?: string | undefined;\n primaryAddress?: Address;\n /** The vendor's phone number. */\n phoneNumber?: string | undefined;\n /** The company's website address. */\n webAddress?: string | undefined;\n\n constructor(data?: IVendorSummaryDtoResponse) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.id = _data[\"id\"];\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.type = _data[\"type\"]\n ? CompanyTypeDto.fromJS(_data[\"type\"])\n : undefined;\n this.region = _data[\"region\"]\n ? RegionDto.fromJS(_data[\"region\"])\n : undefined;\n this.communicationMethod = _data[\"communicationMethod\"];\n this.isBonded = _data[\"isBonded\"];\n this.bondRate = _data[\"bondRate\"];\n this.note = _data[\"note\"];\n this.primaryAddress = _data[\"primaryAddress\"]\n ? Address.fromJS(_data[\"primaryAddress\"])\n : undefined;\n this.phoneNumber = _data[\"phoneNumber\"];\n this.webAddress = _data[\"webAddress\"];\n }\n }\n\n static fromJS(data: any): VendorSummaryDtoResponse {\n data = typeof data === \"object\" ? data : {};\n let result = new VendorSummaryDtoResponse();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"id\"] = this.id;\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"type\"] = this.type ? this.type.toJSON() : undefined;\n data[\"region\"] = this.region ? this.region.toJSON() : undefined;\n data[\"communicationMethod\"] = this.communicationMethod;\n data[\"isBonded\"] = this.isBonded;\n data[\"bondRate\"] = this.bondRate;\n data[\"note\"] = this.note;\n data[\"primaryAddress\"] = this.primaryAddress\n ? this.primaryAddress.toJSON()\n : undefined;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"webAddress\"] = this.webAddress;\n return data;\n }\n}\n\n/** A vendor summary data transfer object. */\nexport interface IVendorSummaryDtoResponse {\n /** The company's unique identifier. */\n id: string;\n /** The company's unique code. */\n code: string;\n /** The company's name. */\n name?: string | undefined;\n type?: CompanyTypeDto;\n region?: RegionDto;\n communicationMethod?: CommunicationMethod;\n /** A flag indicating if this company is bonded. */\n isBonded?: boolean;\n /** The rate at which this company is bonded. */\n bondRate?: number;\n /** Notes about this company. */\n note?: string | undefined;\n primaryAddress?: Address;\n /** The vendor's phone number. */\n phoneNumber?: string | undefined;\n /** The company's website address. */\n webAddress?: string | undefined;\n}\n\n/** A data transfer object for requesting the creation on a vendor. */\nexport class CreateVendorDto implements ICreateVendorDto {\n /** The vendor's unique code. */\n code!: string;\n /** The vendor's name. */\n name?: string | undefined;\n primaryAddress?: Address;\n alternateAddress?: Address;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n /** The vendor's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the vendor operates in. */\n regionId?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** A flag indicating if this vendor is bonded. */\n isBonded?: boolean;\n /** The rate at which this vendor is bonded. */\n bondRate?: number;\n /** Notes about this vendor. */\n note?: string | undefined;\n companyType?: CompanyTypeDto;\n\n constructor(data?: ICreateVendorDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.primaryAddress = _data[\"primaryAddress\"]\n ? Address.fromJS(_data[\"primaryAddress\"])\n : undefined;\n this.alternateAddress = _data[\"alternateAddress\"]\n ? Address.fromJS(_data[\"alternateAddress\"])\n : undefined;\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.webAddress = _data[\"webAddress\"];\n this.regionId = _data[\"regionId\"];\n this.communicationMethod = _data[\"communicationMethod\"];\n this.isBonded = _data[\"isBonded\"];\n this.bondRate = _data[\"bondRate\"];\n this.note = _data[\"note\"];\n this.companyType = _data[\"companyType\"]\n ? CompanyTypeDto.fromJS(_data[\"companyType\"])\n : undefined;\n }\n }\n\n static fromJS(data: any): CreateVendorDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateVendorDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"primaryAddress\"] = this.primaryAddress\n ? this.primaryAddress.toJSON()\n : undefined;\n data[\"alternateAddress\"] = this.alternateAddress\n ? this.alternateAddress.toJSON()\n : undefined;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"webAddress\"] = this.webAddress;\n data[\"regionId\"] = this.regionId;\n data[\"communicationMethod\"] = this.communicationMethod;\n data[\"isBonded\"] = this.isBonded;\n data[\"bondRate\"] = this.bondRate;\n data[\"note\"] = this.note;\n data[\"companyType\"] = this.companyType\n ? this.companyType.toJSON()\n : undefined;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation on a vendor. */\nexport interface ICreateVendorDto {\n /** The vendor's unique code. */\n code: string;\n /** The vendor's name. */\n name?: string | undefined;\n primaryAddress?: Address;\n alternateAddress?: Address;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n /** The vendor's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the vendor operates in. */\n regionId?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** A flag indicating if this vendor is bonded. */\n isBonded?: boolean;\n /** The rate at which this vendor is bonded. */\n bondRate?: number;\n /** Notes about this vendor. */\n note?: string | undefined;\n companyType?: CompanyTypeDto;\n}\n\n/** An immutable command message for requesting the creation of a type. */\nexport class BulkImportTypeDto implements IBulkImportTypeDto {\n /** A unique type code. */\n code?: string | undefined;\n /** The type's description. */\n description?: string | undefined;\n\n constructor(data?: IBulkImportTypeDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.description = _data[\"description\"];\n }\n }\n\n static fromJS(data: any): BulkImportTypeDto {\n data = typeof data === \"object\" ? data : {};\n let result = new BulkImportTypeDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"description\"] = this.description;\n return data;\n }\n}\n\n/** An immutable command message for requesting the creation of a type. */\nexport interface IBulkImportTypeDto {\n /** A unique type code. */\n code?: string | undefined;\n /** The type's description. */\n description?: string | undefined;\n}\n\nexport class BulkImportVendorContactDto implements IBulkImportVendorContactDto {\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n\n constructor(data?: IBulkImportVendorContactDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.title = _data[\"title\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.cellPhoneNumber = _data[\"cellPhoneNumber\"];\n this.emailAddress = _data[\"emailAddress\"];\n this.note = _data[\"note\"];\n this.isMainContact = _data[\"isMainContact\"];\n }\n }\n\n static fromJS(data: any): BulkImportVendorContactDto {\n data = typeof data === \"object\" ? data : {};\n let result = new BulkImportVendorContactDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"title\"] = this.title;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"cellPhoneNumber\"] = this.cellPhoneNumber;\n data[\"emailAddress\"] = this.emailAddress;\n data[\"note\"] = this.note;\n data[\"isMainContact\"] = this.isMainContact;\n return data;\n }\n}\n\nexport interface IBulkImportVendorContactDto {\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n}\n\nexport class BulkImportVendorMinorityStatusDto\n implements IBulkImportVendorMinorityStatusDto {\n /** The minority status type's unique identifier. */\n minorityTypeCode!: string;\n /** The vendor's minority status certification number. */\n certificationNumber?: string | undefined;\n /** The vendor's minority percentage. */\n percent?: number;\n\n constructor(data?: IBulkImportVendorMinorityStatusDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.minorityTypeCode = _data[\"minorityTypeCode\"];\n this.certificationNumber = _data[\"certificationNumber\"];\n this.percent = _data[\"percent\"];\n }\n }\n\n static fromJS(data: any): BulkImportVendorMinorityStatusDto {\n data = typeof data === \"object\" ? data : {};\n let result = new BulkImportVendorMinorityStatusDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"minorityTypeCode\"] = this.minorityTypeCode;\n data[\"certificationNumber\"] = this.certificationNumber;\n data[\"percent\"] = this.percent;\n return data;\n }\n}\n\nexport interface IBulkImportVendorMinorityStatusDto {\n /** The minority status type's unique identifier. */\n minorityTypeCode: string;\n /** The vendor's minority status certification number. */\n certificationNumber?: string | undefined;\n /** The vendor's minority percentage. */\n percent?: number;\n}\n\nexport class BulkImportVendorProductDto implements IBulkImportVendorProductDto {\n /** The product type's unique identifier. */\n productTypeCode!: string;\n /** The product region's unique identifier. */\n regionCode?: string | undefined;\n /** The date. */\n date?: Date | undefined;\n\n constructor(data?: IBulkImportVendorProductDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.productTypeCode = _data[\"productTypeCode\"];\n this.regionCode = _data[\"regionCode\"];\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): BulkImportVendorProductDto {\n data = typeof data === \"object\" ? data : {};\n let result = new BulkImportVendorProductDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"productTypeCode\"] = this.productTypeCode;\n data[\"regionCode\"] = this.regionCode;\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n return data;\n }\n}\n\nexport interface IBulkImportVendorProductDto {\n /** The product type's unique identifier. */\n productTypeCode: string;\n /** The product region's unique identifier. */\n regionCode?: string | undefined;\n /** The date. */\n date?: Date | undefined;\n}\n\nexport class BulkImportVendorDto implements IBulkImportVendorDto {\n /** The vendor's unique code. */\n code?: string | undefined;\n /** The vendor's name. */\n name?: string | undefined;\n /** The vendor's type unique identifier. */\n typeCode?: string | undefined;\n /** The vendor's primary address. */\n primary_AddressLine1?: string | undefined;\n primary_AddressLine2?: string | undefined;\n primary_Building?: string | undefined;\n primary_City?: string | undefined;\n primary_StateProvince?: string | undefined;\n primary_CountryRegion?: string | undefined;\n primary_PostalCode?: string | undefined;\n /** The vendor's alternate address. */\n alternate_AddressLine1?: string | undefined;\n alternate_AddressLine2?: string | undefined;\n alternate_Building?: string | undefined;\n alternate_City?: string | undefined;\n alternate_StateProvince?: string | undefined;\n alternate_CountryRegion?: string | undefined;\n alternate_PostalCode?: string | undefined;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n /** The vendor's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the vendor operates in. */\n regionCode?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** A flag indicating if this vendor is bonded. */\n isBonded?: boolean;\n /** The rate at which this vendor is bonded. */\n bondRate?: number;\n /** Notes about this vendor. */\n note?: string | undefined;\n contacts?: BulkImportVendorContactDto[] | undefined;\n minorityStatuses?: BulkImportVendorMinorityStatusDto[] | undefined;\n products?: BulkImportVendorProductDto[] | undefined;\n\n constructor(data?: IBulkImportVendorDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.code = _data[\"code\"];\n this.name = _data[\"name\"];\n this.typeCode = _data[\"typeCode\"];\n this.primary_AddressLine1 = _data[\"primary_AddressLine1\"];\n this.primary_AddressLine2 = _data[\"primary_AddressLine2\"];\n this.primary_Building = _data[\"primary_Building\"];\n this.primary_City = _data[\"primary_City\"];\n this.primary_StateProvince = _data[\"primary_StateProvince\"];\n this.primary_CountryRegion = _data[\"primary_CountryRegion\"];\n this.primary_PostalCode = _data[\"primary_PostalCode\"];\n this.alternate_AddressLine1 = _data[\"alternate_AddressLine1\"];\n this.alternate_AddressLine2 = _data[\"alternate_AddressLine2\"];\n this.alternate_Building = _data[\"alternate_Building\"];\n this.alternate_City = _data[\"alternate_City\"];\n this.alternate_StateProvince = _data[\"alternate_StateProvince\"];\n this.alternate_CountryRegion = _data[\"alternate_CountryRegion\"];\n this.alternate_PostalCode = _data[\"alternate_PostalCode\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.webAddress = _data[\"webAddress\"];\n this.regionCode = _data[\"regionCode\"];\n this.communicationMethod = _data[\"communicationMethod\"];\n this.isBonded = _data[\"isBonded\"];\n this.bondRate = _data[\"bondRate\"];\n this.note = _data[\"note\"];\n if (Array.isArray(_data[\"contacts\"])) {\n this.contacts = [] as any;\n for (let item of _data[\"contacts\"])\n this.contacts!.push(BulkImportVendorContactDto.fromJS(item));\n }\n if (Array.isArray(_data[\"minorityStatuses\"])) {\n this.minorityStatuses = [] as any;\n for (let item of _data[\"minorityStatuses\"])\n this.minorityStatuses!.push(\n BulkImportVendorMinorityStatusDto.fromJS(item)\n );\n }\n if (Array.isArray(_data[\"products\"])) {\n this.products = [] as any;\n for (let item of _data[\"products\"])\n this.products!.push(BulkImportVendorProductDto.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): BulkImportVendorDto {\n data = typeof data === \"object\" ? data : {};\n let result = new BulkImportVendorDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"code\"] = this.code;\n data[\"name\"] = this.name;\n data[\"typeCode\"] = this.typeCode;\n data[\"primary_AddressLine1\"] = this.primary_AddressLine1;\n data[\"primary_AddressLine2\"] = this.primary_AddressLine2;\n data[\"primary_Building\"] = this.primary_Building;\n data[\"primary_City\"] = this.primary_City;\n data[\"primary_StateProvince\"] = this.primary_StateProvince;\n data[\"primary_CountryRegion\"] = this.primary_CountryRegion;\n data[\"primary_PostalCode\"] = this.primary_PostalCode;\n data[\"alternate_AddressLine1\"] = this.alternate_AddressLine1;\n data[\"alternate_AddressLine2\"] = this.alternate_AddressLine2;\n data[\"alternate_Building\"] = this.alternate_Building;\n data[\"alternate_City\"] = this.alternate_City;\n data[\"alternate_StateProvince\"] = this.alternate_StateProvince;\n data[\"alternate_CountryRegion\"] = this.alternate_CountryRegion;\n data[\"alternate_PostalCode\"] = this.alternate_PostalCode;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"webAddress\"] = this.webAddress;\n data[\"regionCode\"] = this.regionCode;\n data[\"communicationMethod\"] = this.communicationMethod;\n data[\"isBonded\"] = this.isBonded;\n data[\"bondRate\"] = this.bondRate;\n data[\"note\"] = this.note;\n if (Array.isArray(this.contacts)) {\n data[\"contacts\"] = [];\n for (let item of this.contacts) data[\"contacts\"].push(item.toJSON());\n }\n if (Array.isArray(this.minorityStatuses)) {\n data[\"minorityStatuses\"] = [];\n for (let item of this.minorityStatuses)\n data[\"minorityStatuses\"].push(item.toJSON());\n }\n if (Array.isArray(this.products)) {\n data[\"products\"] = [];\n for (let item of this.products) data[\"products\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IBulkImportVendorDto {\n /** The vendor's unique code. */\n code?: string | undefined;\n /** The vendor's name. */\n name?: string | undefined;\n /** The vendor's type unique identifier. */\n typeCode?: string | undefined;\n /** The vendor's primary address. */\n primary_AddressLine1?: string | undefined;\n primary_AddressLine2?: string | undefined;\n primary_Building?: string | undefined;\n primary_City?: string | undefined;\n primary_StateProvince?: string | undefined;\n primary_CountryRegion?: string | undefined;\n primary_PostalCode?: string | undefined;\n /** The vendor's alternate address. */\n alternate_AddressLine1?: string | undefined;\n alternate_AddressLine2?: string | undefined;\n alternate_Building?: string | undefined;\n alternate_City?: string | undefined;\n alternate_StateProvince?: string | undefined;\n alternate_CountryRegion?: string | undefined;\n alternate_PostalCode?: string | undefined;\n phoneNumber?: string | undefined;\n faxNumber?: string | undefined;\n /** The vendor's website address. */\n webAddress?: string | undefined;\n /** The unique identifier of the region the vendor operates in. */\n regionCode?: string | undefined;\n communicationMethod?: CommunicationMethod;\n /** A flag indicating if this vendor is bonded. */\n isBonded?: boolean;\n /** The rate at which this vendor is bonded. */\n bondRate?: number;\n /** Notes about this vendor. */\n note?: string | undefined;\n contacts?: BulkImportVendorContactDto[] | undefined;\n minorityStatuses?: BulkImportVendorMinorityStatusDto[] | undefined;\n products?: BulkImportVendorProductDto[] | undefined;\n}\n\nexport class BulkImport implements IBulkImport {\n minorityTypes?: BulkImportTypeDto[] | undefined;\n productTypes?: BulkImportTypeDto[] | undefined;\n companyTypes?: BulkImportTypeDto[] | undefined;\n regions?: BulkImportTypeDto[] | undefined;\n vendors?: BulkImportVendorDto[] | undefined;\n\n constructor(data?: IBulkImport) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n if (Array.isArray(_data[\"minorityTypes\"])) {\n this.minorityTypes = [] as any;\n for (let item of _data[\"minorityTypes\"])\n this.minorityTypes!.push(BulkImportTypeDto.fromJS(item));\n }\n if (Array.isArray(_data[\"productTypes\"])) {\n this.productTypes = [] as any;\n for (let item of _data[\"productTypes\"])\n this.productTypes!.push(BulkImportTypeDto.fromJS(item));\n }\n if (Array.isArray(_data[\"companyTypes\"])) {\n this.companyTypes = [] as any;\n for (let item of _data[\"companyTypes\"])\n this.companyTypes!.push(BulkImportTypeDto.fromJS(item));\n }\n if (Array.isArray(_data[\"regions\"])) {\n this.regions = [] as any;\n for (let item of _data[\"regions\"])\n this.regions!.push(BulkImportTypeDto.fromJS(item));\n }\n if (Array.isArray(_data[\"vendors\"])) {\n this.vendors = [] as any;\n for (let item of _data[\"vendors\"])\n this.vendors!.push(BulkImportVendorDto.fromJS(item));\n }\n }\n }\n\n static fromJS(data: any): BulkImport {\n data = typeof data === \"object\" ? data : {};\n let result = new BulkImport();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n if (Array.isArray(this.minorityTypes)) {\n data[\"minorityTypes\"] = [];\n for (let item of this.minorityTypes)\n data[\"minorityTypes\"].push(item.toJSON());\n }\n if (Array.isArray(this.productTypes)) {\n data[\"productTypes\"] = [];\n for (let item of this.productTypes)\n data[\"productTypes\"].push(item.toJSON());\n }\n if (Array.isArray(this.companyTypes)) {\n data[\"companyTypes\"] = [];\n for (let item of this.companyTypes)\n data[\"companyTypes\"].push(item.toJSON());\n }\n if (Array.isArray(this.regions)) {\n data[\"regions\"] = [];\n for (let item of this.regions) data[\"regions\"].push(item.toJSON());\n }\n if (Array.isArray(this.vendors)) {\n data[\"vendors\"] = [];\n for (let item of this.vendors) data[\"vendors\"].push(item.toJSON());\n }\n return data;\n }\n}\n\nexport interface IBulkImport {\n minorityTypes?: BulkImportTypeDto[] | undefined;\n productTypes?: BulkImportTypeDto[] | undefined;\n companyTypes?: BulkImportTypeDto[] | undefined;\n regions?: BulkImportTypeDto[] | undefined;\n vendors?: BulkImportVendorDto[] | undefined;\n}\n\n/** A data transfer object for requesting the creation of a company contact. */\nexport class CreateProfileContactDto implements ICreateProfileContactDto {\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n\n constructor(data?: ICreateProfileContactDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.title = _data[\"title\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.cellPhoneNumber = _data[\"cellPhoneNumber\"];\n this.emailAddress = _data[\"emailAddress\"];\n this.note = _data[\"note\"];\n this.isMainContact = _data[\"isMainContact\"];\n }\n }\n\n static fromJS(data: any): CreateProfileContactDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateProfileContactDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"title\"] = this.title;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"cellPhoneNumber\"] = this.cellPhoneNumber;\n data[\"emailAddress\"] = this.emailAddress;\n data[\"note\"] = this.note;\n data[\"isMainContact\"] = this.isMainContact;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of a company contact. */\nexport interface ICreateProfileContactDto {\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n}\n\n/** A data transfer object for requesting the creation of an company minority status. */\nexport class CreateProfileMinorityStatusDto\n implements ICreateProfileMinorityStatusDto {\n /** The minority status type's unique identifier. */\n minorityTypeId!: string;\n /** The company's minority certification number. */\n certificationNumber?: string | undefined;\n /** The company's minority percentage. */\n percent?: number;\n\n constructor(data?: ICreateProfileMinorityStatusDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.minorityTypeId = _data[\"minorityTypeId\"];\n this.certificationNumber = _data[\"certificationNumber\"];\n this.percent = _data[\"percent\"];\n }\n }\n\n static fromJS(data: any): CreateProfileMinorityStatusDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateProfileMinorityStatusDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"minorityTypeId\"] = this.minorityTypeId;\n data[\"certificationNumber\"] = this.certificationNumber;\n data[\"percent\"] = this.percent;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of an company minority status. */\nexport interface ICreateProfileMinorityStatusDto {\n /** The minority status type's unique identifier. */\n minorityTypeId: string;\n /** The company's minority certification number. */\n certificationNumber?: string | undefined;\n /** The company's minority percentage. */\n percent?: number;\n}\n\n/** A data transfer object for requesting the creation of company products. */\nexport class CreateProfileProductDto implements ICreateProfileProductDto {\n /** The product type's unique identifier. */\n productTypeId!: string;\n /** The product region's unique identifier. */\n regionId?: string | undefined;\n /** The date. */\n date?: Date;\n\n constructor(data?: ICreateProfileProductDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.productTypeId = _data[\"productTypeId\"];\n this.regionId = _data[\"regionId\"];\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): CreateProfileProductDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateProfileProductDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"productTypeId\"] = this.productTypeId;\n data[\"regionId\"] = this.regionId;\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of company products. */\nexport interface ICreateProfileProductDto {\n /** The product type's unique identifier. */\n productTypeId: string;\n /** The product region's unique identifier. */\n regionId?: string | undefined;\n /** The date. */\n date?: Date;\n}\n\n/** A data transfer object for requesting the creation of a vendor contact. */\nexport class CreateVendorContactDto implements ICreateVendorContactDto {\n /** The vendor's unique identifier. */\n vendorId!: string;\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n /** A string specifying a contact's role. */\n role?: string | undefined;\n /** A DateTime when this contact was last contacted. */\n lastContacted?: Date | undefined;\n /** A location this contact tie to. */\n vendorLocationId?: string | undefined;\n /** Products this contact tie to. */\n products?: IContactProduct | undefined;\n constructor(data?: ICreateVendorContactDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.vendorId = _data[\"vendorId\"];\n this.firstName = _data[\"firstName\"];\n this.lastName = _data[\"lastName\"];\n this.title = _data[\"title\"];\n this.phoneNumber = _data[\"phoneNumber\"];\n this.faxNumber = _data[\"faxNumber\"];\n this.cellPhoneNumber = _data[\"cellPhoneNumber\"];\n this.emailAddress = _data[\"emailAddress\"];\n this.note = _data[\"note\"];\n this.isMainContact = _data[\"isMainContact\"];\n this.role = _data[\"role\"];\n this.lastContacted = _data[\"lastContacted\"]\n ? new Date(_data[\"lastContacted\"].toString())\n : undefined;\n this.vendorLocationId = _data[\"vendorLocationId\"];\n this.products = _data[\"products\"];\n }\n }\n\n static fromJS(data: any): CreateVendorContactDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateVendorContactDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"vendorId\"] = this.vendorId;\n data[\"firstName\"] = this.firstName;\n data[\"lastName\"] = this.lastName;\n data[\"title\"] = this.title;\n data[\"phoneNumber\"] = this.phoneNumber;\n data[\"faxNumber\"] = this.faxNumber;\n data[\"cellPhoneNumber\"] = this.cellPhoneNumber;\n data[\"emailAddress\"] = this.emailAddress;\n data[\"note\"] = this.note;\n data[\"isMainContact\"] = this.isMainContact;\n data[\"role\"] = this.role;\n data[\"lastContacted\"] = this.lastContacted\n ? this.lastContacted.toISOString()\n : undefined;\n data[\"vendorLocationId\"] = this.vendorLocationId;\n data[\"products\"] = this.products;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of a vendor contact. */\nexport interface ICreateVendorContactDto {\n /** The vendor's unique identifier. */\n vendorId: string;\n /** The contact's first name. */\n firstName?: string | undefined;\n /** The contact's last name. */\n lastName?: string | undefined;\n /** The contact's title. */\n title?: string | undefined;\n /** The contact's phone number. */\n phoneNumber?: string | undefined;\n /** The contact's fax number. */\n faxNumber?: string | undefined;\n /** The contact's cell phone number. */\n cellPhoneNumber?: string | undefined;\n /** The contact's email address. */\n emailAddress?: string | undefined;\n /** The contact's note. */\n note?: string | undefined;\n /** A boolean indicating whether this contact is the company's main contact. */\n isMainContact?: boolean;\n /** A string specifying a contact's role. */\n role?: string | undefined;\n /** A DateTime when this contact was last contacted. */\n lastContacted?: Date | undefined;\n}\n\n/** A data transfer object for requesting the creation of an vendor minority status. */\nexport class CreateVendorMinorityStatusDto\n implements ICreateVendorMinorityStatusDto {\n /** The vendor's unique identifier. */\n vendorId!: string;\n /** The minority status type's unique identifier. */\n minorityTypeId!: string;\n /** The vendor's minority status certification number. */\n certificationNumber?: string | undefined;\n /** The vendor's minority percentage. */\n percent?: number;\n\n constructor(data?: ICreateVendorMinorityStatusDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.vendorId = _data[\"vendorId\"];\n this.minorityTypeId = _data[\"minorityTypeId\"];\n this.certificationNumber = _data[\"certificationNumber\"];\n this.percent = _data[\"percent\"];\n }\n }\n\n static fromJS(data: any): CreateVendorMinorityStatusDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateVendorMinorityStatusDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"vendorId\"] = this.vendorId;\n data[\"minorityTypeId\"] = this.minorityTypeId;\n data[\"certificationNumber\"] = this.certificationNumber;\n data[\"percent\"] = this.percent;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of an vendor minority status. */\nexport interface ICreateVendorMinorityStatusDto {\n /** The vendor's unique identifier. */\n vendorId: string;\n /** The minority status type's unique identifier. */\n minorityTypeId: string;\n /** The vendor's minority status certification number. */\n certificationNumber?: string | undefined;\n /** The vendor's minority percentage. */\n percent?: number;\n}\n\n/** A data transfer object for requesting the creation of vendor products. */\nexport class CreateVendorProductDto implements ICreateVendorProductDto {\n /** The vendor's unique identifier. */\n vendorId!: string;\n /** The product type's unique identifier. */\n productTypeId!: string;\n /** The product region's unique identifier. */\n regionId?: string | undefined;\n /** The date. */\n date?: Date | undefined;\n\n constructor(data?: ICreateVendorProductDto) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.vendorId = _data[\"vendorId\"];\n this.productTypeId = _data[\"productTypeId\"];\n this.regionId = _data[\"regionId\"];\n this.date = _data[\"date\"]\n ? new Date(_data[\"date\"].toString())\n : undefined;\n }\n }\n\n static fromJS(data: any): CreateVendorProductDto {\n data = typeof data === \"object\" ? data : {};\n let result = new CreateVendorProductDto();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"vendorId\"] = this.vendorId;\n data[\"productTypeId\"] = this.productTypeId;\n data[\"regionId\"] = this.regionId;\n data[\"date\"] = this.date ? this.date.toISOString() : undefined;\n return data;\n }\n}\n\n/** A data transfer object for requesting the creation of vendor products. */\nexport interface ICreateVendorProductDto {\n /** The vendor's unique identifier. */\n vendorId: string;\n /** The product type's unique identifier. */\n productTypeId: string;\n /** The product region's unique identifier. */\n regionId?: string | undefined;\n /** The date. */\n date?: Date | undefined;\n}\n\nexport class Body implements IBody {\n logo?: string | undefined;\n\n constructor(data?: IBody) {\n if (data) {\n for (var property in data) {\n if (data.hasOwnProperty(property))\n (this)[property] = (data)[property];\n }\n }\n }\n\n init(_data?: any) {\n if (_data) {\n this.logo = _data[\"logo\"];\n }\n }\n\n static fromJS(data: any): Body {\n data = typeof data === \"object\" ? data : {};\n let result = new Body();\n result.init(data);\n return result;\n }\n\n toJSON(data?: any) {\n data = typeof data === \"object\" ? data : {};\n data[\"logo\"] = this.logo;\n return data;\n }\n}\n\nexport interface IBody {\n logo?: string | undefined;\n}\n\nexport interface FileParameter {\n data: any;\n fileName: string;\n}\n\nexport class ApiException extends Error {\n message: string;\n status: number;\n response: string;\n headers: { [key: string]: any };\n result: any;\n\n constructor(\n message: string,\n status: number,\n response: string,\n headers: { [key: string]: any },\n result: any\n ) {\n super();\n\n this.message = message;\n this.status = status;\n this.response = response;\n this.headers = headers;\n this.result = result;\n }\n\n protected isApiException = true;\n\n static isApiException(obj: any): obj is ApiException {\n return obj.isApiException === true;\n }\n}\n\nfunction throwException(\n message: string,\n status: number,\n response: string,\n headers: { [key: string]: any },\n result?: any\n): any {\n if (result !== null && result !== undefined) throw result;\n else throw new ApiException(message, status, response, headers, null);\n}\n\nfunction isAxiosError(obj: any | undefined): obj is AxiosError {\n return obj && obj.isAxiosError === true;\n}\n","import { View } from \"api\";\nimport axios, { AxiosInstance } from \"axios\";\n\nexport class ViewsApi {\n instance: AxiosInstance;\n businessUnitId: string;\n\n constructor(accessToken: string, businessUnitId: string) {\n this.instance = axios.create();\n this.instance.interceptors.request.use(config => {\n config.headers.Authorization = `Bearer ${accessToken}`;\n return config;\n });\n this.businessUnitId = businessUnitId;\n }\n\n claimView = (viewId: string) => {\n const url = `/api/v1/businessUnits/${this.businessUnitId}/views/${viewId}/claim`;\n return this.instance.post(url);\n };\n}\n\nexport default ViewsApi;\n","import { call, put, select, takeEvery, takeLatest } from \"redux-saga/effects\";\nimport { ActionType, getType } from \"typesafe-actions\";\nimport { Schema, View } from \"api\";\nimport * as notify from \"core/components/notify\";\nimport {\n selectors as accountSelectors,\n actions as accountActions\n} from \"modules/account\";\nimport { selectors as schemaSelectors } from \"modules/schemas\";\nimport {\n apiSagaFactory,\n getSelectedBusinessUnitIdSaga,\n getTokenSaga\n} from \"api/api-saga-factory\";\nimport { actions, StateSlice } from \"./state\";\nimport { UserPreferences } from \"api/index\";\nimport { sortBy } from \"lodash-es\";\nimport { strings } from \"localization\";\nimport RestApi from \"api/RestApi\";\nimport { AxiosResponse } from \"axios\";\nimport ViewsApi from \"api/ViewsApi\";\n\nconst genericSagas = apiSagaFactory({\n isBusinessUnitApi: true,\n apiPath: \"/views\",\n stateKey: \"views\",\n onLoadSuccess: data => actions.loadViews.success(data),\n onLoadFail: err => actions.loadViews.failure(err)\n});\n\nfunction* saveViews(action: ActionType) {\n const { view, meta } = action.payload;\n\n if (meta?.setAsSelected && meta?.tableId) {\n yield put(actions.setSelectedView(meta.tableId, view.id));\n }\n\n try {\n const api: RestApi = yield call(genericSagas.getApi);\n const data: AxiosResponse = yield call(\n [api, meta?.isNewView ? api.create : api.update],\n view\n );\n const savedView = data.data;\n yield put(actions.saveView.success(savedView));\n meta?.isNewView ? notify.add(savedView.name) : notify.save(savedView.name);\n if (\n view.createdByUserId !== meta?.userId &&\n !view.isPublic &&\n meta?.tableId\n ) {\n yield put(actions.setDefaultView(view, meta?.tableId));\n yield put(actions.hideView(view.id));\n }\n } catch (error) {\n console.error(error);\n yield put(actions.saveView.failure(view));\n notify.error(\n strings.formatString(strings.views.errors.saveView, view.name) as string\n );\n }\n}\n\nfunction* claimView(action: ActionType) {\n const { viewId } = action.payload;\n const token = yield call(getTokenSaga);\n const businessUnitId = yield call(getSelectedBusinessUnitIdSaga);\n\n try {\n const api = new ViewsApi(token, businessUnitId);\n const data: AxiosResponse = yield call(api.claimView, viewId);\n const savedView = data.data;\n yield put(actions.claimView.success(savedView));\n notify.save(savedView.name);\n } catch (error) {\n console.error(error);\n yield put(actions.claimView.failure(viewId));\n notify.error(strings.views.errors.claimView);\n }\n}\n\nfunction* deleteView(action: ActionType) {\n const viewId = action.payload.viewId;\n try {\n const api: RestApi = yield call(genericSagas.getApi);\n const view: View = yield select(\n ({ views }: StateSlice) => views.original[viewId]\n );\n yield call([api, api.delete], viewId);\n yield put(actions.deleteView.success(viewId));\n yield put(actions.setDefaultView(view, action.payload.meta?.tableId ?? \"\"));\n notify.remove(view.name);\n } catch (error) {\n console.error(error);\n yield put(actions.deleteView.failure(viewId));\n }\n}\n\nfunction* setDefaultView(action: ActionType) {\n const { view, tableId } = action.payload;\n //Change Preferences when template with default deleted\n const userPreferences: UserPreferences = yield select(\n accountSelectors.getPreferences\n );\n\n const schemas: Record = yield select(\n schemaSelectors.getSchemaHash\n );\n\n if (tableId && userPreferences?.tablePreferences?.[tableId]) {\n const tablePreferences = userPreferences.tablePreferences[tableId];\n if (tablePreferences.selectedView === view.id) {\n const views: Record = yield select(\n ({ views }: StateSlice) => views.workingCopy\n );\n const values = Object.values(views);\n const viewsUnSorted = values.filter(\n v =>\n schemas[v.schemaId].schemaName === schemas[view.schemaId].schemaName\n );\n const viewsSorted = sortBy(viewsUnSorted, (view: View) =>\n view.name.toLocaleLowerCase()\n );\n yield put(\n actions.setSelectedView(tableId, viewsSorted[0].id) //always first if default project deleted\n );\n const { lastModified, ...existingPreferences } = userPreferences;\n yield put(\n accountActions.updatePreferences.request({\n ...existingPreferences,\n tablePreferences: {\n project: { id: tableId, selectedView: viewsSorted[0].id }\n }\n })\n );\n }\n }\n}\n\nexport const sagas = [\n takeLatest(getType(actions.loadViews.request), genericSagas.load),\n takeEvery(getType(actions.saveView.request), saveViews),\n takeEvery(getType(actions.deleteView.request), deleteView),\n takeEvery(getType(actions.claimView.request), claimView),\n takeEvery(getType(actions.setDefaultView), setDefaultView)\n];\n","import axios, { AxiosInstance } from \"axios\";\n\nexport class EmailSubscriptionApi {\n instance: AxiosInstance;\n\n constructor(accessToken: string) {\n this.instance = axios.create();\n this.instance.interceptors.request.use(config => {\n config.headers.Authorization = `Bearer ${accessToken}`;\n return config;\n });\n }\n\n pauseSubscription = (emailId: string) => {\n const url = `/api/v1/emails/projects/${emailId}/pause`;\n return this.instance.post(url);\n };\n\n resumeSubscription = (emailId: string) => {\n const url = `/api/v1/emails/projects/${emailId}/resume`;\n return this.instance.post(url);\n };\n\n stopSubscription = (emailId: string) => {\n const url = `/api/v1/emails/projects/${emailId}/stop`;\n return this.instance.post(url);\n };\n\n sendEmail = (emailId: string) => {\n const url = `/api/v1/emails/projects/${emailId}/sendEmail`;\n return this.instance.post(url);\n };\n\n previewEmail = (viewIds: string[], timeZoneId: string) => {\n const url = `/api/v1/emails/projects/preview`;\n return this.instance.post(url, { viewIds, timeZoneId });\n };\n}\n\nexport default EmailSubscriptionApi;\n","import { useRef, useEffect } from \"react\";\n\nexport function usePrevious(value: T): T | undefined {\n const ref = useRef();\n\n useEffect(() => {\n ref.current = value;\n });\n\n return ref.current;\n}\n","import * as React from \"react\";\nimport ClipLoader from \"react-spinners/ClipLoader\";\nimport styled from \"styled-components\";\nimport { strings } from \"localization\";\n\nexport interface FullPageLoadingProps {\n loading: boolean;\n showTitle?: boolean;\n}\n\nexport class FullPageLoading extends React.PureComponent<\n FullPageLoadingProps,\n {}\n> {\n render() {\n return (\n \n {this.props.showTitle && (\n \n \n Heavy\n <b>Bid</b>\n \n \n )}\n \n {strings.layout.loading}\n \n );\n }\n}\n\nexport default FullPageLoading;\n\nexport const TitleContainer = styled.div`\n font-size: 30px;\n display: flex;\n align-items: baseline;\n justify-content: center;\n`;\n\nconst Light = styled.div`\n font-family: \"ProximaNova\";\n`;\n\nconst Title = styled.span`\n font-family: \"ProximaNova\";\n color: rgb(0, 150, 57);\n\n & strong {\n font-family: \"ProximaNova Heavy\";\n }\n\n & .darktext {\n color: #444;\n }\n`;\n\nconst FullFlexContainer = styled.div`\n height: 175px;\n width: 100%;\n margin-top: 100px;\n display: flex;\n justify-content: space-around;\n align-items: center;\n flex-direction: column;\n`;\n"],"sourceRoot":""}
\n \n \n {React.Children.map(props.children as any, (child: any) =>\n React.isValidElement(child)\n ? React.cloneElement(child, {\n ...child.props,\n tableRow: props.tableRow\n } as any)\n : child\n )}\n \n \n \n \n {props.children}\n \n \n \n \n \n \n {strings.smartdrive.copyLink}\n \n \n \n {strings.smartdrive.download}\n \n \n \n \n \n \n \n \n \n
{value}
\n
\n \n {strings.smartdrive.size} \n {formatFileSize(Number(documentRow.size))}\n \n \n {strings.smartdrive.uploaded} \n {formatDate(documentRow.modified || documentRow.created)}\n \n
\n \n
\n
\n \n {getNoDataMessage()}\n \n