{"version":3,"sources":["App.js","components/Home.js","redux/actionTypes.js","components/Pages/Summary.js","components/ConfigContainer.js","components/Shared/PageWrapper.js","components/Shared/SearchControl.js","components/Pages/CompanySearchDialog.js","components/Pages/CompanyLinkedDropdown.js","components/Pages/DuplicateConfigsDialog.js","components/Pages/CompanyLinking.js","components/Shared/ConfirmPrompt.js","components/Shared/Recommended.js","components/Shared/NumberInput.js","components/Pages/Mapping.js","components/Pages/MappingsPage.js","redux/actions.js","redux/reducers/setup.js","redux/reducers/mapping.js","redux/reducers/configs.js","redux/reducers/duplicates.js","redux/reducers/index.js","redux/store.js","registerServiceWorker.js","index.js","components/Shared/AppInsights.js","components/Shared/PageLogoHeader.js","components/Shared/NavButtons.jsx","components/Shared/Dropdown.jsx","components/Shared/SplitFrame.js","components/Shared/SplitFrameScrollPadding.js","components/Popup.js","components/Shared/FileDialog.js","components/Pages/Setup.jsx"],"names":["reactPlugin","ReactPlugin","App","props","displayName","name","state","showPopup","messageTitle","messageText","settingsLoaded","instrumentationKey","togglePopup","bind","popupMessage","displayError","getManageInfoHeader","appSettingsLoaded","setInstrumentationKey","response","isError","Error","message","errorMessage","isApiError","this","setState","key","title","manageInfo","headers","Headers","basicAuth","Buffer","from","site","companyId","memberId","memberContext","memberHash","toString","append","initiateAppInsightsWithReactPlugin","path","component","Home","exact","render","handleFetchErrors","text","closePopup","Component","withAITracking","SELECT_CONFIGURATION_TYPE","SELECT_VENDOR","SELECT_FILE","ADD_DATA_PREVIEW","ADD_CONFIGURATION_TYPE_QUESTIONS","ADD_CONFIGURATION_TYPES","ADD_VENDORS","TOGGLE_RENEWABLE","SET_MAPPING","REMOVE_MAPPING","LOAD_MAPPINGS","ADD_UNIQUE_COMPANIES","SET_COMPANY_AND_SITE_LINK","SET_SITE_LINK","RESET_MAPPING_SCREEN","RESET_COMPANY_LINKING_SCREEN","RESET_SETUP_SCREEN","SET_START_LINE","SELECT_MAPPING_TEMPLATE","SET_CONFIGS","SET_DUPES","SET_IMPORT_WITH_DUPLICATES","Summary","jobId","displaySpinner","jobStatus","errorFile","redirect","redirectRoute","saveCompanyLinkings","createConfigs","startUpdateTimer","endUpdateTimer","fetchJobStatus","evaluateJobStatus","handleSpreadsheetDownload","handleFirstPageReturn","sendAppInsights","appSettings","initiateAppInsights","trackPageView","show","timerId","setInterval","intervalInSeconds","clearInterval","uniqueCompanies","uniqueCompaniesArray","Object","keys","forEach","companySite","push","company","linkedCompany","linkedSite","toSend","templateName","configTypeId","fetch","method","body","JSON","stringify","then","res","json","catch","error","console","log","data","jsonConversionStatus","formData","FormData","file","vendor","selectConfigType","configTypeQuestions","mappingArray","mapping","propName","substr","renewable","startLine","importWithDuplicates","duplicateConfigurations","importId","errorLink","url","window","open","resetSetupScreen","resetMappingScreen","route","forwardRoute","imageSource","textHeader","textRows","showDownloadLink","className","resultMessageDiv","style","src","to","id","loaderCnt","onClick","mapDispatchToProps","connect","setup","configTypeQuestionDictionary","mappings","mappingHeaders","configType","configs","duplicates","ConfigContainer","componentDidMount","fetchBackendConfigs","newConfigs","setConfigs","result","PageWrapper","currentPage","setCurrentPage","dataSize","pageSize","Math","ceil","newPageNumber","page","pageCount","distanceFromPageToCurrentPage","abs","distanceFromPageToFirstPage","distanceFromPageToLastPage","calculatePageCount","pageButtons","backButton","icon","disabled","ellipsesCheck","i","showOrHidePageNumber","buttonClassName","button","value","gap","forwardButton","children","SearchControl","onKeyPress","onSearch","onChange","event","keyCode","which","returnParams","searchValue","e","changeSearchValue","spreadsheetName","target","width","type","placeholder","React","CompanySearchDialog","defaultColumnProperties","sortable","triggerIcon","columnDefs","label","cellType","selectCompany","handleColumnFilterChange","handleSearch","col","filterValues","searchDialogValue","searchDialogId","setTemporarySearchDetails","height","searchDialogResults","onColumnFilterChange","noResultsText","useAltColors","CompanyLinkedDropdown","option","handleOptionChange","companyName","items","siteOptions","clickAreaToExpand","cwId","selectedSite","DuplicateConfigsDialog","buildSpreadsheetPreview","getStartIndex","getPage","continue","pageNumber","dataArray","numOfColumns","length","numOfRows","headerColumns","rows","row","rowData","cellData","pageDetails","startIndex","endIndex","pageNames","tableData","slice","cancelFrame","dataTable","tableHeaders","spreadsheetPreviewFrame","SplitFrameScrollPadding","tableId","leftId","rightId","leftFrameWidth","rightFrameWidth","frameHeight","frameWidth","leftChildren","rightChildren","header","getDialogPosition","dialogId","toggleImportWithDuplicates","isStandard","cancelDuplicates","CompanyLinking","searchCompany","temporarySearchDetails","tempCompanyResults","attemptedSiteFetch","showDuplicates","loading","checkDuplicates","fetchCompanies","checkForwardLinkActive","handleCompanySearch","displaySearchDialog","setDialogSearchResults","processLinkForReduxStorage","handleClick","parentWithIdExists","resetSearchState","fetchCompanySites","handleSiteSearch","handleSiteOptionChange","toggleCheckDuplicates","checkDupes","fetchDupes","addEventListener","removeEventListener","prevProps","searchAutoLinkedCompaniesForSites","mapped","uniqueCompanyNames","searchCompanyName","maptoCompanyId","dictionary","companyResults","setCompanyAndSiteLink","Company","linkedCompanyId","siteResults","results","allSiteOptions","SearchDialogId","initialCompanyResults","convertCompaniesToDataGridRows","spreadsheetCompanyName","manageCompanyName","defaultSite","details","columns","tempCompResults","compId","compResult","rawData","rowId","some","col1","col2","leadStatus","col3","territory","col4","col5","market","col6","status","col7","enteredDate","col8","col9","addressLine1","addressLine2","col10","city","col11","col12","zip","searchResults","tempSearchFields","resetTempSearchField","tempSearchDictionary","spreadsheetCompany","newTempSearchDictionary","newSearchDetails","siteName","setSiteLink","undefined","index","tempSearchDetails","companySiteOptions","tempSearchValue","tempSearchProp","left","innerWidth","document","documentElement","clientWidth","screen","top","innerHeight","clientHeight","searchControlId","inputId","serachId","getAttribute","el","found","parentElement","siteColumn","serialColumn","setDupes","Promise","resolve","reject","PageLogoHeader","align","NavButtons","forwardLinkActive","forwardCustom","finalButton","forwardTooltipText","backRoute","backCustom","resetCompanyLinkingScreen","setDialogSearchResult","applyDuplicates","setImportWithDuplicates","ConfirmPrompt","confirmButton","confirmAction","buttonList","cancelAction","dialogContent","showPrompt","buttons","Recommended","dragstart_handler","dragStartHandler","values","item","displayname","onMouseDown","ev","NumberInput","setStartLine","selectableItems","Mapping","skipHeaders","firstLineIndex","draggedItemId","startLineValues","onDragStartHandler","onDropHandler","removeMapping","mappingDictionary","recommendedRows","additionalRows","mappingHeaderDictionary","mappingLabel","truncateHeaderLabel","mappingValue","dictionaryProperty","returnRows","preventDefault","getElementById","cursor","substring","colid","rowid","dict","mappingDetail","setMapping","propid","dataPreview","maxLength","dropHandler","headerRows","propId","onMouseUp","idName","rowColumns","lineNumber","rowState","buildMappingHeadersFromMappings","recommended","additionalFields","checkMappedHeaders","leftFrame","rightFrame","MappingsPage","templateTextEntry","templateSelection","templates","loadingTemplates","templateLoadError","getRecommendedValues","getAdditionalValues","postFileForProcessing","onDropWindowHandler","getSaveElement","selectTemplate","createNameLine","createSaveButton","nameChange","validateChars","saveOnClick","getTemplates","processTemplates","addNewTemplateToState","postNewTemplate","newSelectedTemplate","activateConfirmPrompt","duplicateMappingCancelAction","duplicateMappingConfirmAction","loadMappingFromDatabase","fetchMappingTemplate","templateList","unshift","companyData","parseCompanies","checkCompaniesForValidLinks","linkData","uniqueCompaniesWithLinkedData","mergeCompanyAndLinkData","addUniqueCompanies","link","companies","companiesOutput","companiesAndSites","manageInfoHeaders","getCompanyLinksRequest","importMappingName","configurationTypeId","tempadditionalvalues","question","dropdownWatermark","Dropdown","options","selection","loadingText","placeholderText","selectedTemplate","loadFromDatabase","selectMappingTemplate","selectedTemplateName","loadMappings","constructValidTemplate","template","startLineNumber","validTemplate","propertyMap","apiUrl","newName","test","saveProperties","saveDisabled","enableSaveButton","disable","trim","existingTemplates","sanitizedTemplateName","replace","duplicate","checkTemplatesForDuplicate","targetTemplateName","sortedTemplates","sort","a","b","nameA","toUpperCase","nameB","localeCompare","mapdata","nameTemplate","saveButton","selectionTable","SplitFrame","temporaryMappingName","mappingName","saveElement","payload","selectVendor","selectFile","addDataPreview","addConfigTypeQuestions","addConfigTypes","configTypes","addVendors","vendors","toggleRenewable","mappingId","reset","dupeList","initialState","configTypesLoading","vendorsLoading","configsLoaded","combineReducers","action","assign","questions","newState","currentState","mappingProperty","noMapping","noId","companyDetails","createStore","rootReducer","isLocalhost","Boolean","location","hostname","match","registerValidSW","swUrl","navigator","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","connectWiseClientApi","timer","baseUrl","getElementsByTagName","rootElement","receiveMessage","origin","indexOf","parse","handleAuthData","authData","clearTimeout","memberid","companyid","codeBase","memberEmail","ReactDOM","store","backend","HTML5Backend","basename","onLoadCallback","post","DisplayError","errorText","setTimeout","targetWindow","parent","postMessage","ConnectWiseHostedAPI","onReady","URL","process","get","ready","unregister","reload","checkValidServiceWorker","registerServiceWorker","browserHistory","createBrowserHistory","appInsights","ApplicationInsights","config","extensions","extensionConfig","identifier","history","loadAppInsights","prompt","handleBackButtonClick","handleForwardButtonClick","reroute","blockRoute","backProps","forwardDisabled","backButtonDisabled","forwardProps","finalProps","imageState","finalText","finalTooltip","when","disableBackButton","optionList","selectedOption","map","leftWidth","rightWidth","Popup","FileDialog","handleInputSelect","files","handleFiles","checkValidFileTypes","handleBrowseClick","docIcon","includes","handleFileChange","inputField","click","fileMessage","selectedFileName","accept","tabIndex","ref","input","alt","readOnly","Setup","handleConfigurationTypeChange","loadConfigurationTypeQuestions","loadVendors","loadConfigurationTypes","fileList","reader","FileReader","rABS","readAsBinaryString","onload","bstr","wb","XLSX","read","sheetRows","wsname","SheetNames","ws","Sheets","utils","sheet_to_json","raw","readAsArrayBuffer"],"mappings":"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","file":"static/js/main.dcc917a5.chunk.js","sourcesContent":["import React, { Component } from 'react';\nimport { Route } from 'react-router';\nimport { Home } from './components/Home';\nimport Setup from './components/Pages/Setup';\nimport Popup from './components/Popup';\nimport CompanyLinking from './components/Pages/CompanyLinking';\nimport Summary from './components/Pages/Summary';\nimport ConfigContainer from './components/ConfigContainer';\nimport MappingsPage from './components/Pages/MappingsPage';\n\n\nimport { ReactPlugin, withAITracking } from '@microsoft/applicationinsights-react-js';\nimport initiateAppInsightsWithReactPlugin from \"./components/Shared/AppInsights\";\n\nvar reactPlugin = new ReactPlugin();\n\nclass App extends Component {\n displayName = App.name;\n\n constructor(props) {\n super(props)\n\n this.state = {\n showPopup: false,\n messageTitle: \"\",\n messageText: \"\",\n settingsLoaded: false,\n instrumentationKey: \"\"\n }\n this.togglePopup = this.togglePopup.bind(this);\n this.popupMessage = this.popupMessage.bind(this);\n this.displayError = this.displayError.bind(this);\n this.getManageInfoHeader = this.getManageInfoHeader.bind(this);\n this.appSettingsLoaded = this.appSettingsLoaded.bind(this);\n this.setInstrumentationKey = this.setInstrumentationKey.bind(this);\n }\n\n handleFetchErrors(response) {\n if (response.isError) {\n throw Error(response.message);\n }\n return response;\n }\n\n displayError(errorMessage, isApiError) {\n var message = isApiError ? 'Sorry we are unable to load this page. The error has been logged. Please try again later.' : '';\n if (errorMessage) {\n message += ' The Error was: ' + errorMessage;\n }\n this.popupMessage('Error', message);\n }\n\n togglePopup() {\n this.setState({\n showPopup: !this.state.showPopup,\n });\n }\n\n appSettingsLoaded() {\n this.setState({\n settingsLoaded: true\n });\n }\n\n setInstrumentationKey(key) {\n this.setState({\n instrumentationKey: key\n });\n }\n\n popupMessage(title, message) {\n this.setState({\n messageTitle: title,\n messageText: message,\n showPopup: true\n });\n }\n\n getManageInfoHeader(manageInfo) {\n let headers = new Headers();\n let basicAuth = Buffer.from(manageInfo.site + \"+\" + manageInfo.companyId + \"+\" + manageInfo.memberId + \"+\" + manageInfo.memberContext + \":\" + manageInfo.memberHash).toString(\"base64\");\n headers.append('Authorization', 'Basic ' + basicAuth);\n headers.append('Content-Type', 'application/json');\n return headers;\n }\n\n render() {\n var manageInfo = this.props.manageInfo;\n\n if (!this.state.settingsLoaded) {\n return
\n \n
\n }\n else {\n initiateAppInsightsWithReactPlugin(reactPlugin, this.state.instrumentationKey);\n return (\n
\n \n \n }\n />\n \n }\n />\n \n }\n />\n \n }\n />\n \n }\n />\n {this.state.showPopup ?\n \n : null\n }\n
\n );\n }\n }\n}\nexport default withAITracking(reactPlugin, App);","import React, { Component } from 'react';\nexport class Home extends Component {\n displayName = Home.name\n\n\n render() {\n return (\n
\n

Hello, world!

\n
\n );\n }\n}\n","export const SELECT_CONFIGURATION_TYPE = \"SELECT_CONFIGURATION_TYPE\";\nexport const SELECT_VENDOR = \"SELECT_VENDOR\";\nexport const SELECT_FILE = \"SELECT_FILE\";\nexport const ADD_DATA_PREVIEW = \"ADD_DATA_PREVIEW\";\nexport const ADD_CONFIGURATION_TYPE_QUESTIONS = \"ADD_CONFIGURATION_TYPE_QUESTIONS\";\nexport const ADD_CONFIGURATION_TYPES = \"ADD_CONFIGURATION_TYPES\";\nexport const ADD_VENDORS = \"ADD_VENDORS\";\nexport const TOGGLE_RENEWABLE = \"TOGGLE_RENEWABLE\";\n\nexport const SET_MAPPING = \"SET_MAPPING\";\nexport const REMOVE_MAPPING = \"REMOVE_MAPPING\";\nexport const LOAD_MAPPINGS = \"LOAD_MAPPINGS\";\nexport const ADD_UNIQUE_COMPANIES = \"ADD_UNIQUE_COMPANIES\";\nexport const SET_COMPANY_AND_SITE_LINK = \"SET_COMPANY_AND_SITE_LINK\";\nexport const SET_SITE_LINK = \"SET_SITE_LINK\";\nexport const RESET_MAPPING_SCREEN = \"RESET_MAPPING_SCREEN\";\nexport const RESET_COMPANY_LINKING_SCREEN = \"RESET_COMPANY_LINKING_SCREEN\";\nexport const RESET_SETUP_SCREEN = \"RESET_SETUP_SCREEN\";\nexport const SET_START_LINE = \"SET_START_LINE\";\nexport const SELECT_MAPPING_TEMPLATE = \"SELECT_MAPPING_TEMPLATE\";\n\nexport const SET_CONFIGS = \"SET_CONFIGS\";\n\nexport const SET_DUPES = \"SET_DUPES\";\nexport const SET_IMPORT_WITH_DUPLICATES = \"SET_IMPORT_WITH_DUPLICATES\";","import React, { Component } from 'react';\nimport { CwImage, CwLoader } from 'cw-widgets';\nimport { connect } from \"react-redux\";\nimport '../Shared/Page.css';\nimport '../Shared/SplitFrame.css';\nimport { Redirect } from 'react-router';\nimport { resetSetupScreen, resetMappingScreen} from \"../../redux/actions\";\n\nimport initiateAppInsights from \"../Shared/AppInsights\";\n\nexport class Summary extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n jobId: null,\n displaySpinner: true,\n jobStatus: \"pending\",\n errorFile: null,\n redirect: false,\n redirectRoute: ''\n };\n\n this.saveCompanyLinkings = this.saveCompanyLinkings.bind(this);\n this.createConfigs = this.createConfigs.bind(this);\n this.displaySpinner = this.displaySpinner.bind(this);\n\n this.startUpdateTimer = this.startUpdateTimer.bind(this);\n this.endUpdateTimer = this.endUpdateTimer.bind(this);\n this.fetchJobStatus = this.fetchJobStatus.bind(this);\n this.evaluateJobStatus = this.evaluateJobStatus.bind(this);\n this.handleSpreadsheetDownload = this.handleSpreadsheetDownload.bind(this);\n this.handleFirstPageReturn = this.handleFirstPageReturn.bind(this);\n this.sendAppInsights();\n }\n\n sendAppInsights() {\n if (this.props.appSettings) {\n if (this.props.appSettings.instrumentationKey) {\n var instrumentationKey = this.props.appSettings.instrumentationKey;\n var appInsights = initiateAppInsights(instrumentationKey);\n appInsights.trackPageView({\n name: \"Summary Screen\"\n });\n }\n }\n }\n\n displaySpinner(show) {\n this.setState({ displaySpinner: show });\n }\n\n componentDidMount() {\n this.saveCompanyLinkings();\n }\n\n componentWillUnmount() {\n this.endUpdateTimer();\n }\n\n startUpdateTimer() {\n let intervalInSeconds = 15;\n this.timerId = setInterval(\n () => this.fetchJobStatus(),\n intervalInSeconds * 1000\n );\n }\n\n endUpdateTimer() {\n clearInterval(this.timerId);\n }\n\n saveCompanyLinkings() {\n let manageInfo = this.props.manageInfo\n let headers = this.props.getManageInfoHeader(manageInfo);\n let uniqueCompanies = this.props.uniqueCompanies;\n let uniqueCompaniesArray = [];\n let keys = Object.keys(this.props.uniqueCompanies);\n keys.forEach(companySite => {\n uniqueCompaniesArray.push({ \"company\": uniqueCompanies[companySite].company, \"site\": uniqueCompanies[companySite].site, \"companySite\": companySite, \"linkedCompany\": uniqueCompanies[companySite].linkedCompany, \"linkedSite\": uniqueCompanies[companySite].linkedSite })\n });\n\n let toSend = {\n \"importMappingName\": this.props.templateName,\n \"configurationTypeId\": this.props.configTypeId,\n \"companyMaps\": uniqueCompaniesArray\n }\n\n fetch('api/database/SaveCompanyLinks/', {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(toSend)\n }).then(res => res.json())\n .then(response => this.props.handleFetchErrors(response))\n .then(() => {\n this.createConfigs();\n })\n .catch(function (error) {\n console.log(error);\n this.createConfigs();\n });\n }\n\n fetchJobStatus() {\n let jobId = this.state.jobId;\n let displayError = this.props.displayError;\n let manageInfo = this.props.manageInfo\n let headers = this.props.getManageInfoHeader(manageInfo);\n\n fetch('api/importToolAPI/GetImportStatus/' + jobId, {\n method: 'GET',\n headers: headers\n }).then(res => res.json()).then(response => this.props.handleFetchErrors(response))\n .then(data => {\n this.evaluateJobStatus(data);\n }).catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n });\n }\n\n evaluateJobStatus(data) {\n switch (data.jobStatus) {\n case \"Pending\":\n this.setState({\n jobStatus: \"Pending\"\n });\n break;\n case \"Processing\":\n this.setState({\n jobStatus: \"Processing\"\n });\n break;\n case \"Completed\":\n this.setState({\n jobStatus: \"Completed\"\n });\n this.endUpdateTimer();\n break;\n case \"CompletedWithErrors\":\n this.setState({\n jobStatus: \"CompletedWithErrors\",\n errorFile: data.errorFile\n });\n if (data.errorFile) {\n this.endUpdateTimer();\n }\n break;\n case \"Failed\":\n this.setState({\n jobStatus: \"Failed\"\n });\n if (data.errorFile || data.jsonConversionStatus === \"Failed\") {\n this.endUpdateTimer();\n }\n break;\n default:\n this.props.displayError(\"Job status was not recognized. User will need to check jobs screen\", false);\n this.endUpdateTimer();\n }\n }\n\n createConfigs() {\n const formData = new FormData();\n formData.append(\"file\", this.props.file);\n formData.append(\"manageInfo\", JSON.stringify(this.props.manageInfo));\n formData.append(\"vendor\", this.props.vendor.name);\n formData.append(\"configType\", JSON.stringify(this.props.selectConfigType));\n formData.append(\"configTypeQuestions\", JSON.stringify(this.props.configTypeQuestions));\n\n let mappingArray = [];\n let mapping = this.props.mapping;\n let keys = Object.keys(this.props.mapping);\n keys.forEach(propName => {\n mappingArray.push({ \"propName\": propName, \"colIndex\": mapping[propName].substr(3) })\n });\n formData.append(\"mapping\", JSON.stringify(mappingArray));\n formData.append(\"renewable\", JSON.stringify(this.props.renewable));\n let uniqueCompanies = this.props.uniqueCompanies;\n let uniqueCompaniesArray = [];\n keys = Object.keys(this.props.uniqueCompanies);\n keys.forEach(companySite => {\n uniqueCompaniesArray.push({ \"company\": uniqueCompanies[companySite].company, \"site\": uniqueCompanies[companySite].site, \"companySite\": companySite, \"linkedCompany\": uniqueCompanies[companySite].linkedCompany, \"linkedSite\": uniqueCompanies[companySite].linkedSite })\n });\n formData.append(\"uniqueCompanies\", JSON.stringify(uniqueCompaniesArray));\n formData.append(\"firstLineIndex\", this.props.startLine);\n let displayError = this.props.displayError;\n let displaySpinner = this.displaySpinner;\n\n if (!this.props.importWithDuplicates) {\n formData.append(\"duplicateCompanies\", JSON.stringify(this.props.duplicateConfigurations));\n }\n\n fetch('api/importToolAPI/CreateCompanyConfigurations/', {\n method: 'POST',\n body: formData\n }).then(res => res.json()).then(response => this.props.handleFetchErrors(response))\n .then(data => {\n this.setState({\n jobId: data.importId\n });\n displaySpinner(false);\n this.startUpdateTimer();\n }).catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n displaySpinner(false);\n });\n }\n\n handleSpreadsheetDownload() {\n let errorLink = this.state.errorFile\n let manageInfo = this.props.manageInfo\n\n let headers = this.props.getManageInfoHeader(manageInfo);\n fetch(errorLink, {\n method: 'GET',\n headers: headers\n }).then(res => res.json()).then(response => {\n if (response.url) {\n window.open(response.url, '_blank');\n }\n })\n }\n\n handleFirstPageReturn() {\n if (this.props.resetSetupScreen) {\n this.props.resetSetupScreen();\n }\n if (this.props.resetMappingScreen) {\n this.props.resetMappingScreen();\n }\n let route = this.props.forwardRoute ? this.props.forwardRoute : '/';\n this.setState({ redirect: true, redirectRoute: route })\n }\n\n render() {\n let imageSource = null;\n let textHeader = null;\n let textRows = [];\n let showDownloadLink = false;\n switch (this.state.jobStatus) {\n case \"Failed\":\n case \"CompletedWithErrors\":\n imageSource = \"https://files.connectwise.com/UI/Icons/v1.0/Status_CredsMissing.svg\";\n showDownloadLink = this.state.errorFile ? true : false;\n textHeader = \"Uh oh! Your import completed with errors\";\n textRows.push(
Download a list of items that failed due to import errors.
); \n textRows.push(
);\n textRows.push(
Review the Summary tab of the spreadsheet for failure reasons.
);\n textRows.push(

);\n textRows.push(
Please fix the import errors and try importing again.
);\n break;\n case \"Completed\":\n imageSource = \"https://files.connectwise.com/UI/Icons/v1.0/Status_Success.svg\";\n textHeader = \"Success! Your import is complete\";\n textRows.push(
Navigate to System and select Data Import to import more configurations.
);\n break;\n case \"Pending\":\n case \"Processing\":\n default:\n imageSource = \"https://files.connectwise.com/UI/Icons/v1.0/Application_Time.svg\";\n textHeader = \"Almost there! Your import is in progress\";\n textRows.push(
You can now close this screen or keep it open to see when your import is complete.
);\n textRows.push(
);\n textRows.push(
Navigate to System and select Data Import, then Jobs for import details.
);\n }\n\n let resultMessageDiv =
\n
\n \n
\n
\n {textHeader}\n
\n
\n {textRows}\n
\n
;\n\n //If button is pressed, activate redirect to new page\n if (this.state.redirect === true) {\n return
\n \n
;\n } \n \n \n return
\n
\n
\n \n
\n {this.state.displaySpinner ?\n
\n
\n \n
\n
:\n resultMessageDiv\n }\n
\n
\n {\n this.state.displaySpinner === false ?\n
\n
Import Another File
\n
:\n null\n } \n
\n {\n showDownloadLink ? \n
\n
Download Error Details
\n
:\n null\n }\n
\n\n
;\n }\n}\n\nconst mapStateToProps = state => {\n let id = state.setup.configTypeId;\n return {\n uniqueCompanies: state.mapping.uniqueCompanies,\n configTypeQuestions: state.setup.configTypeQuestionDictionary[id],\n file: state.setup.file,\n mapping: state.mapping.mappings,\n mappingHeaders: state.mapping.mappingHeaders,\n vendor: state.setup.vendor,\n startLine: state.mapping.startLine,\n renewable: state.setup.renewable,\n selectConfigType: state.setup.configType,\n appSettings: state.configs.appSettings,\n templateName: state.mapping.templateName,\n configTypeId: state.setup.configTypeId,\n duplicateConfigurations: state.duplicates.duplicateConfigurations,\n importWithDuplicates: state.duplicates.importWithDuplicates\n };\n};\n\nconst mapDispatchToProps = {\n resetSetupScreen,\n resetMappingScreen\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Summary);\n\n","import { Component } from 'react';\nimport { connect } from \"react-redux\";\nimport { setConfigs } from \"../redux/actions\";\n\nexport class ConfigContainer extends Component {\n constructor(props) {\n super(props);\n\n this.componentDidMount = this.componentDidMount.bind(this);\n this.fetchBackendConfigs = this.fetchBackendConfigs.bind(this);\n }\n\n componentDidMount() {\n //Call fetch and perform any additional necessary data manipulation here\n this.fetchBackendConfigs()\n .then(newConfigs => {\n this.props.setInstrumentationKey(newConfigs.instrumentationKey);\n this.props.setConfigs(newConfigs);\n })\n .then(result => {\n this.props.appSettingsLoaded();\n })\n }\n\n fetchBackendConfigs() {\n var displayError = this.props.displayError;\n return fetch('api/Configurations', {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json'\n }\n })\n .then(res => res.json())\n .then(response => this.props.handleFetchErrors(response))\n .catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n });\n }\n\n render() {\n return null;\n }\n}\n\nconst mapDispatchToProps = {\n setConfigs\n};\n\nexport default connect(\n null,\n mapDispatchToProps\n)(ConfigContainer);","import React, { Component } from 'react';\nimport { CwButton } from 'cw-widgets';\nimport './PageWrapper.css';\n\nexport class PageWrapper extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n currentPage: 1\n };\n\n this.setCurrentPage = this.setCurrentPage.bind(this);\n }\n\n calculatePageCount(dataSize, pageSize) {\n return Math.ceil(dataSize / pageSize);\n }\n\n setCurrentPage(newPageNumber) {\n this.setState({\n currentPage: newPageNumber\n })\n }\n\n //Choose whether to show or hide a page. return value is True if page number is displayed and False if page number is hidden\n showOrHidePageNumber(page, currentPage, pageCount) {\n let distanceFromPageToCurrentPage = Math.abs(currentPage - page);\n let distanceFromPageToFirstPage = Math.abs(page - 1);\n let distanceFromPageToLastPage = Math.abs(pageCount - page);\n\n let showPage = distanceFromPageToCurrentPage <= 1 || distanceFromPageToFirstPage <= 1 || distanceFromPageToLastPage <= 1;\n return showPage;\n }\n\n render() {\n let pageCount = this.calculatePageCount(this.props.dataSize, this.props.pageSize);\n\n let pageButtons = [];\n\n let currentPage = this.state.currentPage\n let backButton = \n\n pageButtons.push(backButton);\n\n //First\n let ellipsesCheck = true;\n\n for (let i = 1; i <= pageCount; i++) {\n //If page should be shown, create element\n if (this.showOrHidePageNumber(i, this.state.currentPage, pageCount)) {\n let buttonClassName = \"pageButton\";\n if (this.state.currentPage === i) {\n buttonClassName = \"pageButton pageButtonSelected\";\n }\n\n let button = ;\n pageButtons.push(button);\n ellipsesCheck = true;\n }\n //If not, check if ellipses should be shown\n else {\n if (ellipsesCheck) {\n let gap = \n ellipsesCheck = false;\n pageButtons.push(gap);\n }\n }\n }\n\n let forwardButton = \n\n pageButtons.push(forwardButton);\n\n return
\n
\n {this.props.children}\n \n {pageButtons}\n \n
\n
\n {this.props.render(this.state)}\n
\n
;\n }\n}","import React from 'react';\nimport './Page.css';\nimport { CwImage } from 'cw-widgets';\n\nexport class SearchControl extends React.Component {\n constructor(props) {\n super(props);\n\n this.onKeyPress = this.onKeyPress.bind(this);\n this.onSearch = this.onSearch.bind(this);\n this.onChange = this.onChange.bind(this);\n }\n onKeyPress(event) {\n if (event.keyCode === 13 || event.which === 13) {\n this.onSearch();\n }\n }\n onSearch() {\n this.props.onSearch(this.props.returnParams, this.props.searchValue);\n }\n onChange(e) {\n this.props.changeSearchValue(this.props.spreadsheetName, e.target.value)\n }\n render() {\n return
\n
\n \n \n \n \n \n \n \n
\n \n \n \n
\n
\n
\n }\n}","import React, { Component } from 'react';\nimport { CwDataGrid } from 'cw-widgets';\nimport { SearchControl } from '../Shared/SearchControl';\n\n//props:\n//searchCompanies: function to check new search value\n//selectCompany: function to set selected company and close dialog\n//initialSearchResults: array of data pulled from first data call from company linking screen\nexport class CompanySearchDialog extends Component {\n constructor(props) {\n super(props);\n\n let defaultColumnProperties = {\n width: 150,\n sortable: true,\n triggerIcon:'',\n }\n\n //Define columns that will be used by data table to display search results\n this.columnDefs = [\n {\n key: 'col1',\n label: 'Company',\n cellType: 'link',\n onClick: this.props.selectCompany,\n ...defaultColumnProperties, \n width: 250\n },\n {\n key: 'col2',\n label: 'Lead Status',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col3',\n label: 'Territory',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col4',\n label: 'Type',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col5',\n label: 'Market',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col6',\n label: 'Status',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col7',\n label: 'Entered',\n cellType: 'date',\n ...defaultColumnProperties\n },\n {\n key: 'col8',\n label: 'Site',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col9',\n label: 'Address',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col10',\n label: 'City',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col11',\n label: 'State',\n cellType: 'text',\n ...defaultColumnProperties\n },\n {\n key: 'col12',\n label: 'Zip Code',\n cellType: 'text',\n ...defaultColumnProperties\n },\n ]\n\n this.handleColumnFilterChange = this.handleColumnFilterChange.bind(this);\n this.handleSearch = this.handleSearch.bind(this);\n }\n\n handleColumnFilterChange(col, value) {\n this.setState({\n filterValues: {\n ...this.state.filterValues,\n [col.key]: value,\n },\n });\n }\n\n handleSearch(companyId) {\n this.props.handleSearch(companyId, this.props.searchDialogValue);\n }\n\n render() {\n let id = \"companyLinkDialog\" + this.props.searchDialogId;\n\n return
\n \n \n
;\n }\n}","import React, { Component } from 'react';\nimport { CwComboBox } from 'cw-widgets';\nimport '../Shared/Page.css';\n\nexport class CompanyLinkedDropdown extends Component {\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n\n onChange(option) {\n this.props.handleOptionChange(this.props.companyName, option.name);\n }\n\n render() {\n return
\n \n
\n }\n}","import React, { Component } from 'react';\nimport { SplitFrameScrollPadding } from '../Shared/SplitFrameScrollPadding';\nimport { CwLabel, CwCheckBox, CwButton, CwDialog } from 'cw-widgets';\nimport { Redirect } from 'react-router';\nimport './Mapping.css';\nimport { PageWrapper } from '../Shared/PageWrapper';\n\nexport class DuplicateConfigsDialog extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n redirect: false\n };\n this.buildSpreadsheetPreview = this.buildSpreadsheetPreview.bind(this);\n this.getStartIndex = this.getStartIndex.bind(this);\n this.getPage = this.getPage.bind(this);\n this.continue = this.continue.bind(this);\n }\n\n getStartIndex(pageSize, pageNumber) {\n return (pageSize * (pageNumber - 1));\n }\n\n buildSpreadsheetPreview(headers, dataArray) {\n let numOfColumns = headers ? headers.length : 0;\n let numOfRows = dataArray ? dataArray.length : 0;\n //create header columns\n let headerColumns = [];\n for (let col = 0; col <= numOfColumns; col++) {\n if (col === 0) {\n headerColumns.push(
);\n }\n else {\n headerColumns.push(
{headers[col - 1].displayName}
);\n }\n }\n\n //create rows\n let rows = [];\n //iterate over row quantity\n for (let row = 0; row < numOfRows; row++) {\n let rowData = [];\n //...and then iterate over column quantity\n for (let col = 0; col <= numOfColumns; col++) {\n if (col === 0) {\n rowData.push();\n }\n else {\n let cellData =
{dataArray[row][headers[col - 1].name]}
|| null;\n rowData.push({cellData});\n }\n }\n rows.push({rowData});\n }\n\n //return final table object\n return \n \n \n {headerColumns}\n \n \n \n {rows}\n \n
;\n }\n\n continue() {\n this.setState({redirect: true})\n }\n\n getPage(pageDetails, pageSize) {\n let startIndex = this.getStartIndex(pageSize, pageDetails.currentPage);\n let endIndex = startIndex + pageSize;\n let pageNames = this.props.tableData.slice(startIndex, endIndex);\n\n let cancelFrame =
\n let dataTable = this.buildSpreadsheetPreview(this.props.tableHeaders, pageNames);\n let spreadsheetPreviewFrame =
\n {dataTable}\n
\n\n let table =
\n \n
;\n\n return table;\n }\n\n render() { \n let pageSize = 4;\n let dataSize = this.props.tableData ? this.props.tableData.length : 0;\n\n if (this.state.redirect === true) {\n return
\n \n
;\n }\n\n return (\n
\n
\n
\n \n
\n
The potential duplicate configurations this import will create are shown below. Please indicate if you want to Import With Duplicates to create new configurations for each line listed, or Import Without Duplicates to skip the lines shown and avoid creating duplicates when importing.
\n
\n (\n this.getPage(pageDetails, pageSize)\n )}\n dataSize={dataSize}\n pageSize={pageSize}\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, { Component } from 'react';\nimport { NavButtons } from '../Shared/NavButtons';\nimport { PageWrapper } from '../Shared/PageWrapper';\nimport { CwLabel, CwDialog, CwCheckBox} from 'cw-widgets';\nimport { connect } from \"react-redux\";\nimport { setCompanyAndSiteLink, setSiteLink, resetCompanyLinkingScreen, setDupes, setImportWithDuplicates } from \"../../redux/actions\";\nimport '../Shared/Page.css';\nimport { SearchControl } from '../Shared/SearchControl';\nimport { CompanySearchDialog } from './CompanySearchDialog';\nimport { CompanyLinkedDropdown } from './CompanyLinkedDropdown';\nimport { PageLogoHeader } from '../Shared/PageLogoHeader';\nimport { DuplicateConfigsDialog } from './DuplicateConfigsDialog';\n\n\nimport initiateAppInsights from \"../Shared/AppInsights\";\n\nexport class CompanyLinking extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n mappings: {},\n showPopup: false,\n searchDialogResults: null,\n searchCompany: null,\n searchDialogValue: null,\n searchDialogId: null,\n temporarySearchDetails: {},\n siteOptions: {},\n tempCompanyResults: {},\n attemptedSiteFetch: false,\n showDuplicates: false,\n loading: false,\n checkDuplicates: true\n };\n\n this.fetchCompanies = this.fetchCompanies.bind(this);\n this.checkForwardLinkActive = this.checkForwardLinkActive.bind(this);\n this.handleCompanySearch = this.handleCompanySearch.bind(this);\n this.displaySearchDialog = this.displaySearchDialog.bind(this);\n this.setDialogSearchResults = this.setDialogSearchResults.bind(this);\n this.processLinkForReduxStorage = this.processLinkForReduxStorage.bind(this);\n this.selectCompany = this.selectCompany.bind(this);\n this.setTemporarySearchDetails = this.setTemporarySearchDetails.bind(this);\n this.getPage = this.getPage.bind(this);\n this.getDialogPosition = this.getDialogPosition.bind(this);\n this.handleClick = this.handleClick.bind(this);\n this.parentWithIdExists = this.parentWithIdExists.bind(this);\n this.resetSearchState = this.resetSearchState.bind(this);\n this.fetchCompanySites = this.fetchCompanySites.bind(this);\n this.handleSiteSearch = this.handleSiteSearch.bind(this);\n this.handleSiteOptionChange = this.handleSiteOptionChange.bind(this);\n this.cancelDuplicates = this.cancelDuplicates.bind(this);\n this.toggleCheckDuplicates = this.toggleCheckDuplicates.bind(this);\n this.checkDupes = this.checkDupes.bind(this);\n this.fetchDupes = this.fetchDupes.bind(this);\n this.sendAppInsights();\n }\n\n sendAppInsights() {\n if (this.props.appSettings) {\n if (this.props.appSettings.instrumentationKey) {\n var instrumentationKey = this.props.appSettings.instrumentationKey;\n var appInsights = initiateAppInsights(instrumentationKey);\n appInsights.trackPageView({\n name: \"Company Linking page\"\n });\n }\n }\n }\n\n componentDidMount() {\n window.addEventListener('click', this.handleClick);\n }\n\n componentWillUnmount() {\n window.removeEventListener('click', this.handleClick);\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.uniqueCompanies !== prevProps.uniqueCompanies && !this.state.attemptedSiteFetch) {\n this.searchAutoLinkedCompaniesForSites(this.props.uniqueCompanies);\n }\n }\n\n cancelDuplicates() {\n this.setState({\n showDuplicates: false\n });\n }\n\n toggleCheckDuplicates(checkDuplicates) {\n this.setState({\n checkDuplicates: checkDuplicates\n });\n }\n checkForwardLinkActive() {\n var mapped = true;\n let uniqueCompanyNames = Object.keys(this.props.uniqueCompanies);\n if (uniqueCompanyNames.length === 0) {\n mapped = false;\n }\n for (var i = 0; i < uniqueCompanyNames.length; i++) {\n if (!this.props.uniqueCompanies[uniqueCompanyNames[i]].linkedCompany ||\n !this.props.uniqueCompanies[uniqueCompanyNames[i]].linkedSite\n ) {\n mapped = false;\n break;\n }\n }\n return mapped; //true if mappings exists, will expand rules later\n }\n\n getStartIndex(pageSize, pageNumber) {\n return (pageSize * (pageNumber - 1));\n }\n\n fetchCompanies(searchCompanyName) {\n var toSend = this.props.manageInfo;\n\n toSend[\"searchParameter\"] = searchCompanyName;\n return fetch('api/cwRestApi/GetCompaniesByName/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(toSend)\n }).then(res => res.json()).then(response => this.props.handleFetchErrors(response));\n }\n\n handleCompanySearch(maptoCompanyId, searchCompanyName) {\n var displayError = this.props.displayError;\n let dictionary = this.props.uniqueCompanies;\n this.fetchCompanies(searchCompanyName)\n .then(companyResults => {\n this.setState({\n tempCompanyResults: companyResults\n });\n if (companyResults && companyResults.length === 1) {\n let company = companyResults[0];\n if (dictionary[maptoCompanyId].linkedCompany !== company.name) {\n this.handleSiteSearch(company.companyId, maptoCompanyId);\n this.props.setCompanyAndSiteLink(this.processLinkForReduxStorage(maptoCompanyId, company.name, company.site));\n }\n this.resetSearchState(maptoCompanyId);\n }\n else {\n this.displaySearchDialog(maptoCompanyId, searchCompanyName, companyResults);\n }\n }).catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n return null;\n });\n }\n\n fetchCompanySites(companyId) {\n let manageInfo = this.props.manageInfo\n let headers = this.props.getManageInfoHeader(manageInfo);\n\n return fetch('api/cwRestApi/GetCompanySites/' + companyId, {\n method: 'GET',\n headers: headers\n }).then(res => res.json()).then(response => this.props.handleFetchErrors(response));\n }\n\n searchAutoLinkedCompaniesForSites(uniqueCompanies) {\n this.setState({ attemptedSiteFetch: true })\n for (let Company in uniqueCompanies) {\n if (uniqueCompanies[Company].linkedCompanyId) {\n this.handleSiteSearch(uniqueCompanies[Company].linkedCompanyId, Company)\n }\n }\n }\n\n handleSiteSearch(companyId, companyName) {\n var displayError = this.props.displayError;\n this.fetchCompanySites(companyId)\n .then(siteResults => {\n var results = siteResults;\n let allSiteOptions = this.state.siteOptions;\n allSiteOptions[companyName] = results;\n this.setState({ siteOptions: allSiteOptions });\n }).catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n return null;\n });\n }\n\n displaySearchDialog(SearchDialogId, searchCompanyName, initialCompanyResults) {\n this.setState({\n showPopup: true,\n searchDialogId: SearchDialogId,\n searchDialogValue: searchCompanyName,\n searchDialogResults: this.convertCompaniesToDataGridRows(initialCompanyResults)\n });\n }\n\n processLinkForReduxStorage(spreadsheetCompanyName, manageCompanyName, defaultSite) {\n let newCompanyLink = {\n linkedCompany: manageCompanyName,\n linkedSite: defaultSite,\n }\n let companyPayload = {\n id: spreadsheetCompanyName,\n details: newCompanyLink\n }\n return companyPayload;\n }\n\n //Used to set a company in the search dialog as the selected company link\n selectCompany(companyName, columns) {\n var tempCompResults = this.state.tempCompanyResults;\n var compId = 0;\n for (var compResult of tempCompResults) {\n if (compResult.name === companyName) {\n compId = compResult.companyId;\n }\n }\n this.handleSiteSearch(compId, this.state.searchDialogId);\n this.props.setCompanyAndSiteLink(this.processLinkForReduxStorage(this.state.searchDialogId, companyName, columns[\"col8\"]));\n this.resetSearchState(this.state.searchDialogId);\n }\n\n convertCompaniesToDataGridRows(rawData) {\n let rows = []\n let rowId = 1;\n rawData.some(function addToList(company) {\n let row = {\n id: rowId,\n col1: company.name,\n col2: company.leadStatus === true ? \"Lead\" : \"Active\",\n col3: company.territory ? company.territory.name : null,\n col4: company.type,\n col5: company.market ? company.market.name : null,\n col6: company.status,\n col7: company.enteredDate,\n col8: company.site,\n col9: company.addressLine1 + \" \" + company.addressLine2,\n col10: company.city,\n col11: company.state,\n col12: company.zip\n };\n rows.push(row);\n rowId++;\n\n return rowId > 10;\n });\n return rows;\n }\n\n setDialogSearchResults(searchResults) {\n this.setState({\n searchDialogResults: searchResults\n });\n }\n\n resetSearchState(maptoCompanyId) {\n let tempSearchFields = this.resetTempSearchField(this.state.temporarySearchDetails, maptoCompanyId);\n this.setState({\n showPopup: false,\n searchDialogResults: null,\n searchDialogId: null,\n searchDialogValue: null,\n searchCompany: null,\n temporarySearchDetails: tempSearchFields\n });\n }\n\n resetTempSearchField(tempSearchDictionary, spreadsheetCompany) {\n let newTempSearchDictionary = tempSearchDictionary;\n newTempSearchDictionary[spreadsheetCompany] = null;\n return newTempSearchDictionary;\n }\n\n setTemporarySearchDetails(spreadsheetCompanyName, searchValue) {\n let newSearchDetails = this.state.temporarySearchDetails;\n newSearchDetails[spreadsheetCompanyName] = searchValue;\n this.setState({\n temporarySearchDetails: newSearchDetails,\n searchDialogValue: searchValue,\n searchCompany: spreadsheetCompanyName\n });\n }\n\n handleSiteOptionChange(companyName, siteName) {\n this.props.setSiteLink(this.processLinkForReduxStorage(companyName, null, siteName));\n }\n\n getPage(pageDetails, pageSize) {\n let rows = [];\n let isUniqueCompanies = this !== undefined && this.props !== undefined && this.props.uniqueCompanies !== undefined && this.props.uniqueCompanies !== null;\n if (isUniqueCompanies) {\n let index = 0;\n let handleCompanySearch = this.handleCompanySearch;\n let uniqueCompanies = this.props.uniqueCompanies;\n let uniqueCompanyNames = Object.keys(uniqueCompanies);\n\n let startIndex = this.getStartIndex(pageSize, pageDetails.currentPage);\n let endIndex = startIndex + pageSize;\n let pageNames = uniqueCompanyNames.slice(startIndex, endIndex);\n\n let tempSearchDetails = this.state.temporarySearchDetails;\n let setTemporarySearchDetails = this.setTemporarySearchDetails;\n let handleSiteOptionChange = this.handleSiteOptionChange;\n let siteOptions = this.state.siteOptions;\n pageNames.forEach(function addToList(companyName) {\n let spreadsheetName = companyName;\n let id = \"companyLink\" + companyName;\n let text = uniqueCompanies[companyName].linkedCompany || '';\n let site = uniqueCompanies[companyName].linkedSite || '';\n site = site ? site : '';\n let selectedSite = null;\n if (site) {\n selectedSite = { id: site, name: site };\n }\n let companySiteOptions = siteOptions[companyName] || [];\n let tempSearchValue = tempSearchDetails[companyName];\n let tempSearchProp = tempSearchValue ? tempSearchValue : text;\n let row = \n {companyName}\n \n \n \n \n
\n \n
\n \n ;\n rows.push(row);\n index++;\n })\n }\n\n let page =
\n \n \n \n \n \n \n {rows}\n \n
\n \n \n
\n
;\n return page;\n }\n\n getDialogPosition() {\n var width = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth ? document.documentElement.clientWidth : window.screen.width;\n var height = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight ? document.documentElement.clientHeight : window.screen.height;\n\n var left = (width / 2) - (800 / 2);\n var top = (height / 3) - (400 / 2);\n\n left = left < 0 ? 0 : left;\n top = top < 0 ? 0 : top;\n\n return { top, left };\n }\n\n handleClick(e) {\n if (this.state.searchDialogValue && this.state.searchCompany && !this.state.showPopup) {\n let maptoCompanyId = this.state.searchCompany;\n let searchControlId = \"companyLink\" + maptoCompanyId;\n let inputId = searchControlId + \"Input\";\n let serachId = searchControlId + \"Search\";\n if (e && e.target.getAttribute('id') !== inputId && !this.parentWithIdExists(e.target, serachId)) {\n if (this.props.uniqueCompanies[maptoCompanyId].linkedCompany !== null) {\n this.props.setCompanyAndSiteLink(this.processLinkForReduxStorage(maptoCompanyId, null, null));\n }\n this.resetSearchState(maptoCompanyId);\n }\n }\n }\n\n parentWithIdExists(el, id) {\n let found = false;\n while (el !== undefined && el != null && el !== document && !found) {\n if (el.getAttribute('id') === id) {\n found = true;\n }\n el = el.parentElement;\n }\n return found;\n }\n\n fetchDupes(file, mappings, startLine, manageInfo, uniqueCompanies, handleFetchErrors, displayError) {\n const formData = new FormData();\n formData.append(\"manageInfo\", JSON.stringify(manageInfo));\n let siteColumn = mappings[\"siteName\"] !== null ? mappings[\"siteName\"] : \"\";\n let serialColumn = mappings[\"serialNumber\"] !== null ? mappings[\"serialNumber\"] : \"\";\n let uniqueCompaniesArray = [];\n let keys = Object.keys(uniqueCompanies);\n keys.forEach(companySite => {\n uniqueCompaniesArray.push({ \"company\": uniqueCompanies[companySite].company, \"site\": uniqueCompanies[companySite].site, \"companySite\": companySite, \"linkedCompany\": uniqueCompanies[companySite].linkedCompany, \"linkedSite\": uniqueCompanies[companySite].linkedSite })\n });\n formData.append(\"uniqueCompanies\", JSON.stringify(uniqueCompaniesArray));\n formData.append(file.name, file);\n return fetch('api/file/CheckForDuplicateConfigs/', {\n method: 'POST',\n headers: {\n 'companyColumn': this.props.mapping[\"companyName\"],\n 'configColumn': this.props.mapping[\"name\"],\n 'serialColumn': serialColumn,\n 'firstLineIndex': startLine,\n 'siteColumn': siteColumn\n },\n body: formData\n }).then(res => res.json()).then(response => handleFetchErrors(response))\n .catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n return null;\n });\n }\n\n checkDupes() {\n let serialColumn = this.props.mapping[\"serialNumber\"] !== null ? this.props.mapping[\"serialNumber\"] : \"\";\n \n if (serialColumn && this.state.checkDuplicates) {\n this.setState({ loading: true });\n let manageInfo = this.props.manageInfo;\n return this.fetchDupes(this.props.file, this.props.mapping, this.props.startLine, manageInfo, this.props.uniqueCompanies, this.props.handleFetchErrors, this.props.displayError)\n .then(duplicates => {\n this.setState({ loading: false });\n if (!!duplicates && duplicates.length > 0) {\n this.setState({ showDuplicates: true });\n this.props.setDupes(duplicates);\n return true;\n }\n else {\n return false;\n }\n });\n }\n\n let falsePromise = new Promise(function (resolve, reject) {\n resolve(false);\n });\n\n return falsePromise;\n \n }\n\n render() {\n let uniqueCompanyNames = Object.keys(this.props.uniqueCompanies);\n\n let dataSize = uniqueCompanyNames.length;\n let pageSize = 10;\n\n let duplicateTableHeaders = [{ \"name\": \"configurationName\", \"displayName\": \"Configuration Name\" }, { \"name\": \"companyName\", \"displayName\": \"Company\" }, { \"name\": \"serialNumber\", \"displayName\": \"Serial Number\" }];\n\n return
\n \n
\n
\n \n
\n
\n
\n COMPANY LINKING \n
\n
Click the fields below to link discovered companies in your import file to Manage companies and sites. Click the import icon to continue.
\n
\n
\n
\n \n
\n
\n (\n this.getPage(pageDetails, pageSize)\n )}\n dataSize={dataSize}\n pageSize={pageSize}\n >\n Discovered Companies\n \n
\n {this.state.showPopup ?\n
\n
\n
\n \n \n \n
\n : null\n }\n {this.state.showDuplicates ?\n
\n \n
\n : null\n }\n
\n
\n }\n}\n\nconst mapStateToProps = state => {\n return {\n uniqueCompanies: state.mapping.uniqueCompanies,\n appSettings: state.configs.appSettings,\n configTypeId: state.setup.configTypeId,\n file: state.setup.file,\n mapping: state.mapping.mappings,\n startLine: state.mapping.startLine,\n duplicateConfigurations: state.duplicates.duplicateConfigurations,\n importWithDuplicates: state.duplicates.importWithDuplicates\n };\n};\n\nconst mapDispatchToProps = {\n setCompanyAndSiteLink,\n setSiteLink,\n setDupes,\n setImportWithDuplicates,\n resetCompanyLinkingScreen\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(CompanyLinking);","import React, { Component } from 'react';\nimport { CwDialog, CwButton } from 'cw-widgets';\nimport './Page.css';\n\nexport class ConfirmPrompt extends Component {\n\n render() {\n let confirmButton = \n let cancelButton = \n let buttonList = [cancelButton, confirmButton];\n let dialogContent = this.props.dialogContent;\n\n if (!this.props.showPrompt) {\n return null;\n }\n\n return
\n
\n \n {dialogContent}\n \n
\n
;\n }\n}","import React, { Component } from 'react';\nimport { CwLabel, CwImage } from 'cw-widgets';\nimport './Page.css';\n\nexport class Recommended extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n\n render() {\n let index = 1;\n let rows = [];\n let dragstart_handler = this.props.dragStartHandler;\n let row = \"\";\n let values = this.props.values;\n for (let item in values) {\n row = dragstart_handler(ev, item)} >\n \n {values[item]}\n ;\n \n rows.push(row);\n index++;\n };\n\n return
\n
\n {this.props.title}\n
\n
\n \n {rows}\n
\n
\n
\n }\n}","import React from 'react';\nimport './Page.css';\nimport {CwComboBox} from 'cw-widgets';\n\nexport class NumberInput extends React.Component {\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n }\n onChange(e) {\n this.props.setStartLine(e.id);\n }\n render() {\n return
\n \n \n \n \n \n \n \n
\n \n \n \n \n
\n
;\n }\n}","import React, { Component } from 'react';\nimport { SplitFrameScrollPadding } from '../Shared/SplitFrameScrollPadding';\nimport { CwLabel, CwImage } from 'cw-widgets';\nimport { Recommended } from '../Shared/Recommended';\nimport { NumberInput } from '../Shared/NumberInput';\nimport './Mapping.css';\n\nexport class Mapping extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n skipHeaders: false,\n firstLineIndex: 0,\n draggedItemId: null,\n mappingHeaders: {}\n };\n this.startLineValues = [];\n this.buildSpreadsheetPreview = this.buildSpreadsheetPreview.bind(this);\n\n this.onDragStartHandler = this.onDragStartHandler.bind(this);\n this.onDropHandler = this.onDropHandler.bind(this);\n\n this.removeMapping = this.removeMapping.bind(this);\n }\n\n buildMappingHeadersFromMappings(mappingDictionary, recommendedRows, additionalRows) {\n let mappingHeaderDictionary = {};\n for (let mapping in mappingDictionary) {\n\n let mappingLabel = recommendedRows[mapping] || additionalRows[mapping];\n if (!mappingLabel) {\n continue;\n }\n mappingLabel = this.truncateHeaderLabel(mappingLabel);\n let mappingValue = mappingDictionary[mapping];\n let dictionaryProperty = mappingHeaderDictionary[mappingValue];\n if (dictionaryProperty === undefined || dictionaryProperty === null) {\n dictionaryProperty = [];\n }\n dictionaryProperty.push({ id: mapping, label: mappingLabel });\n mappingHeaderDictionary[mappingValue] = dictionaryProperty;\n }\n return mappingHeaderDictionary;\n }\n\n checkMappedHeaders(mappings, rows) {\n let returnRows = [];\n for (let row in rows) {\n if (!mappings[row]) {\n returnRows[row] = rows[row];\n }\n }\n return returnRows;\n }\n\n onDragStartHandler(ev, id) {\n ev.preventDefault();\n this.setState({ draggedItemId: id });\n document.getElementById(\"mappingframe\").style.cursor = \"move\"; \n }\n\n truncateHeaderLabel(label) {\n if (label.length > 17) {\n label = label.substring(0, 17);\n label = label + \"...\";\n return label;\n }\n else {\n return label;\n }\n }\n\n onDropHandler(ev, colid) {\n ev.preventDefault();\n document.getElementById(\"mappingframe\").style.cursor = \"auto\"; \n\n // Get the id of the target and add the moved element to the target's DOM\n let rowid = this.state[\"draggedItemId\"];\n this.setState({ draggedItemId: null });\n if (colid === undefined || rowid === undefined || rowid === null || rowid === \"\") {\n return;\n }\n \n let dict = this.props.mapping;\n dict[rowid] = colid;\n let mappingDetail = { colid: rowid, mappings: dict[rowid] }\n this.props.setMapping(mappingDetail);\n }\n removeMapping(colid, propid) {\n this.props.removeMapping(propid);\n }\n\n buildSpreadsheetPreview(mappingHeaders) {\n\n function countforeach(value) {\n let length = value.length;\n if (length > maxLength) {\n maxLength = length;\n }\n }\n let dataArray = this.props.dataPreview;\n let maxLength = 0;\n dataArray.forEach(countforeach);\n this.startLineValues = [];\n //create header columns\n let headerColumns = [];\n let removeMapping = this.removeMapping;\n let dropHandler = this.onDropHandler;\n for (let i = 0; i < maxLength; i++) {\n let id = \"col\" + i;\n let headerRows = [];\n if (mappingHeaders && mappingHeaders[id]) {\n mappingHeaders[id].forEach(item => {\n let propId = \"\";\n propId = item.id;\n let label = item.label;\n headerRows.push({label} removeMapping(id, propId)} />);\n });\n }\n if (i === 0) {\n headerColumns.push(
dropHandler(ev, id)}>\n {headerRows}\n
);\n }\n else {\n headerColumns.push(
dropHandler(ev, id)}>\n {headerRows}\n
);\n }\n }\n\n //Make sure start line can't be set to greater than number of import rows\n\n //create rows\n let rows = [];\n //iterate over row quantity\n for (let row = 0; row < dataArray.length; row++) {\n let idName = (row + 1).toString();\n this.startLineValues.push({ id: row, name: idName })\n let rowColumns = [];\n //...and then iterate over column quantity\n for (let col = 0; col < maxLength; col++) {\n\n\n let cellData =
{dataArray[row][col]}
|| null;\n let lineNumber =
{row+1}
\n if (col === 0) {\n rowColumns.push({lineNumber}{cellData});\n }\n else {\n rowColumns.push({cellData});\n }\n\n }\n let rowState = \"normalDataRow\";\n if (row < this.props.startLine) {\n rowState = \"skippedDataRow\";\n }\n rows.push({rowColumns});\n }\n\n //return final table object\n return \n \n \n {headerColumns}\n \n \n \n {rows}\n \n
;\n }\n render() {\n let mappingHeaders = this.buildMappingHeadersFromMappings(this.props.mapping, this.props.recommended, this.props.additionalFields);\n\n let recommendedRows = this.checkMappedHeaders(this.props.mapping, this.props.recommended);\n let additionalRows = this.checkMappedHeaders(this.props.mapping, this.props.additionalFields);\n\n let leftFrame =
\n
\n \n
\n
\n \n
;\n\n let cancelFrame =
\n\n let dataTable = this.buildSpreadsheetPreview(mappingHeaders);\n\n let spreadsheetPreviewFrame =
\n {dataTable}\n
\n\n //Display data preview table and columns for mappings here\n let rightFrame =
\n \n
;\n\n return (\n
\n
\n \n
\n
\n \n
\n
\n\n )\n };\n}\n","import React, { Component } from 'react';\nimport { NavButtons } from '../Shared/NavButtons';\nimport { PageLogoHeader } from '../Shared/PageLogoHeader'\nimport initiateAppInsights from \"../Shared/AppInsights\";\nimport { Dropdown } from '../Shared/Dropdown';\nimport { SplitFrame } from '../Shared/SplitFrame';\nimport { ConfirmPrompt } from '../Shared/ConfirmPrompt';\nimport { connect } from \"react-redux\";\nimport { Mapping } from './Mapping';\nimport { CwLabel } from 'cw-widgets';\nimport {\n setMapping,\n removeMapping,\n loadMappings,\n setStartLine,\n addUniqueCompanies,\n resetMappingScreen,\n selectMappingTemplate\n} from \"../../redux/actions\";\nimport './Mapping.css';\nimport '../Shared/Page.css';\nimport '../Shared/SplitFrame.css';\n\nimport { CwTextField, CwButton, CwImage } from 'cw-widgets';\n\n\nexport class MappingsPage extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n skipHeaders: false,\n firstLineIndex: 0,\n templateTextEntry: this.props.templateName ? this.props.templateName : \"\",\n templateSelection: this.props.templateName ? { id: this.props.templateName, name: this.props.templateName } : null,\n templates: [],\n loadingTemplates: true,\n templateLoadError: false,\n showPrompt: false\n }; \n this.getRecommendedValues = this.getRecommendedValues.bind(this);\n this.getAdditionalValues = this.getAdditionalValues.bind(this);\n this.postFileForProcessing = this.postFileForProcessing.bind(this);\n this.checkForwardLinkActive = this.checkForwardLinkActive.bind(this);\n\n this.onDropWindowHandler = this.onDropWindowHandler.bind(this);\n\n this.sendAppInsights();\n this.getSaveElement = this.getSaveElement.bind(this);\n this.selectTemplate = this.selectTemplate.bind(this);\n this.createNameLine = this.createNameLine.bind(this);\n this.createSaveButton = this.createSaveButton.bind(this);\n this.nameChange = this.nameChange.bind(this);\n this.validateChars = this.validateChars.bind(this);\n this.saveOnClick = this.saveOnClick.bind(this);\n this.getTemplates(props.manageInfo, props.displayError, props.handleFetchErrors);\n this.processTemplates = this.processTemplates.bind(this);\n this.addNewTemplateToState = this.addNewTemplateToState.bind(this);\n this.postNewTemplate = this.postNewTemplate.bind(this);\n this.newSelectedTemplate = this.newSelectedTemplate.bind(this);\n this.activateConfirmPrompt = this.activateConfirmPrompt.bind(this);\n this.duplicateMappingCancelAction = this.duplicateMappingCancelAction.bind(this);\n this.duplicateMappingConfirmAction = this.duplicateMappingConfirmAction.bind(this);\n this.loadMappingFromDatabase = this.loadMappingFromDatabase.bind(this);\n this.fetchMappingTemplate = this.fetchMappingTemplate.bind(this);\n }\n\n sendAppInsights() {\n if (this.props.appSettings) {\n if (this.props.appSettings.instrumentationKey) {\n var instrumentationKey = this.props.appSettings.instrumentationKey;\n var appInsights = initiateAppInsights(instrumentationKey);\n appInsights.trackPageView({\n name: \"Mapping page\"\n });\n }\n }\n }\n\n getTemplates(manageInfo, displayError, handleFetchErrors) {\n if (this.props.getManageInfoHeader) {\n let headers = this.props.getManageInfoHeader(manageInfo);\n fetch('api/database/GetSavedMappings/' + this.props.configTypeId, {\n method: 'GET',\n headers: headers\n }).then(res => res.json())\n .then(response => handleFetchErrors(response))\n .then(data => {\n var templateList = data;\n templateList.unshift('');\n this.processTemplates(templateList);\n }).catch (function (error) {\n console.log(error);\n displayError(error.message, true);\n this.setState({templateLoadError: true})\n });\n }\n }\n\n processTemplates(templates) {\n var result = [];\n for (var index in templates) {\n result.push({ name: templates[index], id: templates[index] });\n }\n this.setState({\n templates: result,\n loadingTemplates: false\n });\n }\n\n onDropWindowHandler(ev) {\n ev.preventDefault();\n document.getElementById(\"mappingframe\").style.cursor = \"auto\";\n }\n\n\n postFileForProcessing() {\n const formData = new FormData();\n let file = this.props.file;\n let siteColumn = this.props.mapping[\"siteName\"] !== null ? this.props.mapping[\"siteName\"] : \"\";\n formData.append(file.name, file);\n return fetch('api/file/GetUniqueValuesFromColumn/', {\n method: 'POST',\n headers: {\n 'companyColumn': this.props.mapping[\"companyName\"],\n 'siteColumn': siteColumn,\n 'firstLineIndex': this.props.startLine\n },\n body: formData\n }).then(res => res.json()).then(response => this.props.handleFetchErrors(response))\n .then(companyData => {\n let uniqueCompanies = this.parseCompanies(companyData);\n this.checkCompaniesForValidLinks(Object.keys(uniqueCompanies))\n .then(linkData => {\n let uniqueCompaniesWithLinkedData = this.mergeCompanyAndLinkData(linkData, uniqueCompanies);\n this.props.addUniqueCompanies(uniqueCompaniesWithLinkedData);\n })\n return false;\n }).catch(function (error) {\n console.log(error);\n this.props.displayError(error.message, true);\n });\n }\n\n mergeCompanyAndLinkData(linkData, uniqueCompanies) {\n for (let index in linkData) {\n let link = linkData[index];\n if (uniqueCompanies[link.companySite]) {\n uniqueCompanies[link.companySite].linkedCompany = link.linkedCompany;\n uniqueCompanies[link.companySite].linkedSite = link.linkedSite;\n uniqueCompanies[link.companySite].linkedCompanyId = link.id\n }\n }\n return uniqueCompanies;\n }\n\n parseCompanies(companies) {\n var companiesOutput = {};\n for (var i = 0; i < companies.length; i++) {\n let hasSite = (companies[i].site === undefined || companies[i].site == null || companies[i].site.length <= 0) ? false : true;\n let combinedName = hasSite ? companies[i].company + ' - ' + companies[i].site : companies[i].company;\n companiesOutput[combinedName] = {\n site: companies[i].site,\n company: companies[i].company,\n };\n }\n return companiesOutput;\n }\n\n checkCompaniesForValidLinks(companiesAndSites) {\n let manageInfo = this.props.manageInfo;\n let manageInfoHeaders = this.props.getManageInfoHeader(manageInfo);\n let handleFetchErrors = this.props.handleFetchErrors;\n let displayError = this.props.displayError;\n\n let getCompanyLinksRequest = {\n importMappingName: this.props.templateName,\n configurationTypeId: this.props.configTypeId,\n companiesAndSites: companiesAndSites\n }\n\n return fetch('api/database/GetCompanyLinkDetails/', {\n method: 'POST',\n headers: manageInfoHeaders,\n body: JSON.stringify(getCompanyLinksRequest)\n })\n .then(res => res.json())\n .then(response => handleFetchErrors(response))\n .catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n });\n }\n\n getRecommendedValues() {\n let recommendedValues = {\n \"companyName\": \"Company*\",\n \"name\": \"Configuration Name*\",\n \"siteName\": \"Site\",\n \"manufacturerPartNumber\": \"Manufacturer Part Number\",\n \"manufacturerName\": \"Manufacturer\",\n \"warrantyExpirationDate\": \"Expiration Date\",\n \"serialNumber\": \"Serial Number\"\n };\n\n return recommendedValues;\n }\n\n getAdditionalValues() {\n let tempadditionalvalues = {\n \"installationDate\": \"Install Date\",\n \"installedBy\": \"Installed by\",\n \"purchaseDate\": \"Purchase Date\",\n //\"locationId\": \"Location\", // cutomer won't be able to map this\n \"modelNumber\": \"Model Number\",\n \"tagNumber\": \"Tag number\",\n \"notes\": \"Notes\",\n \"vendorNotes\": \"Vendor Notes\"\n };\n\n if (this.props.configTypeQuestions) {\n this.props.configTypeQuestions.forEach(item => {\n tempadditionalvalues[\"question_\" + item.id] = item.question\n });\n };\n\n return tempadditionalvalues;\n }\n \n checkForwardLinkActive() {\n if (this.props.mapping[\"companyName\"] && this.props.mapping[\"name\"] && this.props.startLine < this.props.dataPreview.length) {\n return true;\n }\n else {\n return false;\n }\n }\n \n selectTemplate() {\n var selectId = \"selectTemplate\";\n var selectText = \"Loading Mapping Templates...\";\n var noTemplatesText = \"No Saved Mappings\";\n var selectTemplateWatermark = \"Select a Mapping Template\";\n\n let noTemplates = !this.state.loadingTemplates && !(this.state.templates.length > 1);\n let dropdownWatermark = noTemplates ? noTemplatesText : selectTemplateWatermark;\n let returnTemplate = \n return returnTemplate;\n }\n\n newSelectedTemplate(selectedTemplate, loadFromDatabase = true) {\n let name = selectedTemplate.name === null || selectedTemplate.name.length === 0 ? \"\" : selectedTemplate.name;\n this.nameChange(name);\n this.props.selectMappingTemplate(name);\n\n this.setState({\n templateSelection: selectedTemplate,\n templateTextEntry: selectedTemplate.name\n });\n\n if (name !== \"\" && loadFromDatabase) {\n this.loadMappingFromDatabase(name, this.props.dataPreview);\n }\n }\n\n loadMappingFromDatabase(selectedTemplateName, dataPreview) {\n let setStartLine = this.props.setStartLine;\n let loadMappings = this.props.loadMappings;\n let constructValidTemplate = this.constructValidTemplate;\n\n this.fetchMappingTemplate(selectedTemplateName)\n .then(function (template) {\n setStartLine(template.startLineNumber);\n let validTemplate = constructValidTemplate(template.propertyMap, dataPreview);\n loadMappings(validTemplate);\n });\n }\n\n constructValidTemplate(propertyMap, dataPreview) {\n //calculate widest row of spreadsheet\n function countforeach(value) {\n let length = value.length;\n if (length > maxLength) {\n maxLength = length;\n }\n }\n let maxLength = 0;\n dataPreview.forEach(countforeach);\n\n let validTemplate = {}\n for (let mapping in propertyMap) {\n let colNumber = propertyMap[mapping];\n\n let intColNumber = colNumber.slice(3)\n if (intColNumber < maxLength) {\n validTemplate[mapping] = propertyMap[mapping];\n }\n }\n\n return validTemplate;\n }\n\n fetchMappingTemplate(selectedTemplateName) {\n let manageInfo = this.props.manageInfo;\n let configTypeId = this.props.configTypeId;\n let apiUrl = configTypeId + \"/\" + selectedTemplateName;\n let displayError = this.props.displayError;\n if (this.props.getManageInfoHeader) {\n let headers = this.props.getManageInfoHeader(manageInfo);\n return fetch('api/database/GetSavedMappingDetails/' + apiUrl, {\n method: 'GET',\n headers: headers\n }).then(res => res.json())\n .then(response => this.props.handleFetchErrors(response))\n .catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n });\n }\n }\n\n createNameLine() {\n var nameId = \"nameTemplate\";\n var nameTemplateWatermark = \"Enter Template Name\";\n let nameTemplate = this.validateChars(e)}\n />\n return nameTemplate;\n }\n\n nameChange(newName) {\n this.setState({\n templateTextEntry: newName\n })\n }\n\n validateChars(e) {\n const regex = /^[0-9a-zA-Z _]+$/;\n if (!regex.test(e.key)) {\n e.preventDefault();\n }\n }\n\n createSaveButton() {\n let saveProperties = {};\n let saveDisabled = !this.enableSaveButton();\n saveProperties.onClick = this.saveOnClick;\n saveProperties.disable = saveDisabled;\n saveProperties.className = saveDisabled ? \"saveButtonDisabled\" : \"saveButtonEnabled\";\n saveProperties.value = ;\n let saveButton =\n
\n \n

Save

\n
; \n return saveButton;\n }\n \n enableSaveButton() {\n if (this.state.templateTextEntry && this.props.mapping[\"companyName\"] && this.props.mapping[\"name\"] && !!this.state.templateTextEntry.trim()) {\n return true;\n }\n else {\n return false;\n }\n }\n\n saveOnClick() {\n //if the template name matches an existing template name show a pop-up asking stuff\n var existingTemplates = this.state.templates;\n var newTemplateName = this.state.templateTextEntry;\n let sanitizedTemplateName = newTemplateName.trim().replace(/[^0-9a-zA-Z_ ]/g, '').substring(0, 100);;\n //find duplicates\n let duplicate = false;\n if (sanitizedTemplateName.length > 0) {\n if (existingTemplates) {\n duplicate = this.checkTemplatesForDuplicate(sanitizedTemplateName, existingTemplates);\n }\n\n if (duplicate) {\n this.activateConfirmPrompt(sanitizedTemplateName);\n }\n else {\n this.postNewTemplate(sanitizedTemplateName);\n this.addNewTemplateToState(sanitizedTemplateName);\n }\n }\n }\n\n checkTemplatesForDuplicate(targetTemplateName, templates) {\n for (var template in templates) {\n if (templates[template].name === targetTemplateName) {\n return true;\n }\n }\n\n return false;\n }\n\n addNewTemplateToState(name) {\n let sortedTemplates = this.state.templates;\n\n sortedTemplates.push({ name: name, id: name });\n\n sortedTemplates.sort(function (a, b) {\n var nameA = a.name.toUpperCase();\n var nameB = b.name.toUpperCase();\n return nameA.localeCompare(nameB);\n })\n\n this.setState({\n templates: sortedTemplates\n });\n\n this.newSelectedTemplate({ name: name, id: name }, false)\n }\n\n postNewTemplate(name) {\n let manageInfo = this.props.manageInfo\n let headers = this.props.getManageInfoHeader(manageInfo);\n let mapdata = {\n \"importMappingName\": name,\n \"companyIdentifier\": manageInfo.companyId,\n \"configurationTypeId\": this.props.configTypeId,\n \"propertyMap\": this.props.mapping,\n \"startLineNumber\": this.props.startLine\n }\n fetch('api/database/SaveConfigurationMapping/', {\n method: 'POST',\n headers: headers,\n body: JSON.stringify(mapdata)\n }).then(res => res.json())\n .then(response => this.props.handleFetchErrors(response))\n .catch(function (error) {\n console.log(error);\n this.props.displayError(error.message, true);\n });\n\n }\n\n getSaveElement() {\n\n var selectedTemplate = this.selectTemplate();\n var nameTemplate = this.createNameLine();\n var saveButton = this.createSaveButton(); \n\n let selectionTable = ;\n\n return (\n
\n \n
\n );\n }\n\n activateConfirmPrompt(name) {\n this.setState({\n showPrompt: true,\n temporaryMappingName: name\n })\n }\n\n duplicateMappingConfirmAction() {\n let mappingName = this.state.templateTextEntry;\n this.postNewTemplate(mappingName);\n this.setState({ showPrompt: false });\n }\n\n duplicateMappingCancelAction() {\n this.setState({ showPrompt: false });\n }\n\n render() {\n var recommended = this.getRecommendedValues();\n var additionalFields = this.getAdditionalValues();\n var saveElement = this.getSaveElement();\n\n let duplicateMappingDialogText = \"A mapping with this name already exists. Click Save to overwrite the existing mapping, or Cancel to close this dialog and enter a different name\";\n\n return (\n
\n \n
\n
\n \n
\n
\n
\n
\n PREVIEW AND MAPPING\n
\n
Drag and drop fields from the panel to assign Manage fields to columns in your import file. You can assign multiple fields to a single column, if needed. You must map required fields to continue.
\n
\n
\n {saveElement}\n \n
\n
\n \n
\n );\n }\n}\n\nconst mapStateToProps = state => {\n let id = state.setup.configTypeId;\n return {\n configTypeQuestions: state.setup.configTypeQuestionDictionary[id],\n dataPreview: state.setup.dataPreview,\n file: state.setup.file,\n mapping: state.mapping.mappings,\n startLine: state.mapping.startLine,\n appSettings: state.configs.appSettings,\n configTypeId: state.setup.configTypeId,\n templateName: state.mapping.templateName\n };\n};\n\nconst mapDispatchToProps = {\n setMapping,\n removeMapping,\n loadMappings,\n setStartLine,\n addUniqueCompanies,\n resetMappingScreen,\n selectMappingTemplate\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(MappingsPage);\n\n","import {\n SELECT_CONFIGURATION_TYPE,\n SELECT_VENDOR,\n SELECT_FILE,\n ADD_DATA_PREVIEW,\n ADD_CONFIGURATION_TYPE_QUESTIONS,\n ADD_CONFIGURATION_TYPES,\n ADD_VENDORS,\n TOGGLE_RENEWABLE,\n SET_MAPPING,\n REMOVE_MAPPING,\n LOAD_MAPPINGS,\n ADD_UNIQUE_COMPANIES,\n SET_COMPANY_AND_SITE_LINK,\n SET_SITE_LINK,\n RESET_MAPPING_SCREEN,\n RESET_COMPANY_LINKING_SCREEN,\n SET_START_LINE,\n SET_CONFIGS,\n RESET_SETUP_SCREEN,\n SELECT_MAPPING_TEMPLATE,\n SET_DUPES,\n SET_IMPORT_WITH_DUPLICATES\n} from './actionTypes';\n\nexport const selectConfigType = configType => ({\n type: SELECT_CONFIGURATION_TYPE,\n payload: { configType }\n});\n\nexport const setStartLine = startLine => ({\n type: SET_START_LINE,\n payload: { startLine }\n});\n\nexport const selectVendor = vendor => ({\n type: SELECT_VENDOR,\n payload: { vendor }\n});\n\nexport const selectFile = file => ({\n type: SELECT_FILE,\n payload: { file }\n})\n\nexport const addDataPreview = dataPreview => ({\n type: ADD_DATA_PREVIEW,\n payload: { dataPreview }\n})\n\nexport const addConfigTypeQuestions = configTypeQuestions => ({\n type: ADD_CONFIGURATION_TYPE_QUESTIONS,\n payload: { configTypeQuestions }\n})\n\nexport const addConfigTypes = configTypes => ({\n type: ADD_CONFIGURATION_TYPES,\n payload: { configTypes }\n});\n\nexport const addVendors = vendors => ({\n type: ADD_VENDORS,\n payload: { vendors }\n});\n\nexport const toggleRenewable = renewable => ({\n type: TOGGLE_RENEWABLE,\n payload: { renewable }\n})\n\n\nexport const setMapping = mapping => ({\n type: SET_MAPPING,\n payload: { mapping }\n})\n\nexport const removeMapping = mappingId => ({\n type: REMOVE_MAPPING,\n payload: { mappingId }\n})\n\nexport const loadMappings = mappings => ({\n type: LOAD_MAPPINGS,\n payload: { mappings }\n})\n\nexport const addUniqueCompanies = companies => ({\n type: ADD_UNIQUE_COMPANIES,\n payload: { companies }\n})\n\nexport const setCompanyAndSiteLink = company => ({\n type: SET_COMPANY_AND_SITE_LINK,\n payload: { company }\n})\n\nexport const setSiteLink = company => ({\n type: SET_SITE_LINK,\n payload: { company }\n})\n\nexport const resetMappingScreen = reset => ({\n type: RESET_MAPPING_SCREEN,\n payload: { reset }\n})\n\nexport const resetCompanyLinkingScreen = reset => ({\n type: RESET_COMPANY_LINKING_SCREEN,\n payload: { reset }\n})\n\nexport const setConfigs = configs => ({\n type: SET_CONFIGS,\n payload: { configs }\n})\n\nexport const resetSetupScreen = reset => ({\n type: RESET_SETUP_SCREEN,\n payload: { reset }\n})\n\nexport const selectMappingTemplate = template => ({\n type: SELECT_MAPPING_TEMPLATE,\n payload: { template }\n})\n\nexport const setDupes = dupeList => ({\n type: SET_DUPES,\n payload: { dupeList }\n})\n\nexport const setImportWithDuplicates = importWithDuplicates => ({\n type: SET_IMPORT_WITH_DUPLICATES,\n payload: { importWithDuplicates }\n})","import {\n SELECT_CONFIGURATION_TYPE,\n SELECT_VENDOR,\n SELECT_FILE,\n ADD_DATA_PREVIEW,\n ADD_CONFIGURATION_TYPE_QUESTIONS,\n ADD_CONFIGURATION_TYPES,\n ADD_VENDORS,\n TOGGLE_RENEWABLE,\n RESET_SETUP_SCREEN\n} from \"../actionTypes\";\n\nconst initialState = {\n configType: null,\n configTypeId: null,\n configTypeQuestionDictionary: {},\n vendor: null,\n file: null,\n dataPreview: [],\n configTypes: [],\n vendors: [],\n configTypesLoading: true,\n vendorsLoading: true,\n renewable: true\n};\n\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case SELECT_CONFIGURATION_TYPE: {\n return Object.assign({}, state, {\n configType: action.payload.configType,\n configTypeId: action.payload.configType.id\n })\n }\n case SELECT_VENDOR: {\n return Object.assign({}, state, {\n vendor: action.payload.vendor\n })\n }\n case SELECT_FILE: {\n return Object.assign({}, state, {\n file: action.payload.file,\n })\n }\n case ADD_DATA_PREVIEW: {\n return Object.assign({}, state, {\n dataPreview: action.payload.dataPreview\n })\n }\n case ADD_CONFIGURATION_TYPE_QUESTIONS: {\n let id = action.payload.configTypeQuestions.id;\n let questions = action.payload.configTypeQuestions.questions;\n return {\n ...state,\n configTypeQuestionDictionary: {\n ...state.configTypeQuestionDictionary,\n [id]: questions\n }\n }\n }\n case ADD_CONFIGURATION_TYPES: {\n return Object.assign({}, state, {\n configTypes: action.payload.configTypes,\n configTypesLoading: false\n })\n }\n case ADD_VENDORS: {\n return Object.assign({}, state, {\n vendors: action.payload.vendors,\n vendorsLoading: false\n })\n }\n case TOGGLE_RENEWABLE: {\n return Object.assign({}, state, {\n renewable: action.payload.renewable\n })\n }\n case RESET_SETUP_SCREEN: {\n return Object.assign({}, state, {\n mappings: {},\n mappingHeaders: {},\n uniqueCompanies: {},\n startLine: 0,\n configType: null,\n configTypeId: null,\n configTypes: [],\n configTypeQuestionDictionary: {},\n file: null,\n dataPreview: [],\n vendor: null,\n vendors: [],\n configTypesLoading: true,\n vendorsLoading: true,\n renewable: true\n })\n }\n default: {\n return state;\n }\n }\n}","import {\n SET_MAPPING,\n REMOVE_MAPPING,\n LOAD_MAPPINGS,\n ADD_UNIQUE_COMPANIES,\n SET_COMPANY_AND_SITE_LINK,\n SET_SITE_LINK,\n RESET_MAPPING_SCREEN,\n RESET_COMPANY_LINKING_SCREEN,\n SET_START_LINE,\n SELECT_MAPPING_TEMPLATE\n} from \"../actionTypes\";\n\nconst initialState = {\n mappings: {},\n startLine: 0,\n uniqueCompanies: {},\n templateName: \"\"\n}\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case SET_MAPPING: {\n let id = action.payload.mapping.colid;\n let mapping = action.payload.mapping.mappings;\n let newState = {\n ...state,\n mappings: {\n ...state.mappings,\n [id]: mapping\n }\n }\n return newState;\n }\n case REMOVE_MAPPING: {\n let currentState = state;\n let mappingProperty = \"mappings\";\n let id = action.payload.mappingId;\n\n let { [mappingProperty]: mappingValue, ...noMapping } = currentState;\n let { [id]: idValue, ...noId } = mappingValue;\n let newState = { ...noMapping, [mappingProperty]: noId }\n\n return newState;\n }\n case LOAD_MAPPINGS: {\n return Object.assign({}, state, {\n mappings: action.payload.mappings\n })\n }\n case SET_START_LINE: {\n return Object.assign({}, state, {\n startLine: action.payload.startLine\n })\n }\n case ADD_UNIQUE_COMPANIES: {\n return Object.assign({}, state, {\n uniqueCompanies: action.payload.companies\n })\n }\n case SET_COMPANY_AND_SITE_LINK: {\n let companyName = action.payload.company.id;\n let companyDetails = action.payload.company.details;\n return {\n ...state,\n uniqueCompanies: {\n ...state.uniqueCompanies,\n [companyName]: {\n ...state.uniqueCompanies[companyName],\n linkedSite: companyDetails.linkedSite,\n linkedCompany: companyDetails.linkedCompany\n }\n }\n }\n }\n\n case SET_SITE_LINK: {\n let companyName = action.payload.company.id;\n let companyDetails = action.payload.company.details;\n return {\n ...state,\n uniqueCompanies: {\n ...state.uniqueCompanies,\n [companyName]: {\n ...state.uniqueCompanies[companyName],\n linkedSite: companyDetails.linkedSite\n }\n }\n }\n }\n case RESET_MAPPING_SCREEN: {\n return Object.assign({}, state, {\n mappings: {},\n uniqueCompanies: {},\n startLine: 0,\n selectedTemplate: null,\n templateName: \"\"\n })\n } \n case RESET_COMPANY_LINKING_SCREEN: {\n return {\n ...state,\n uniqueCompanies: {}\n }\n }\n case SELECT_MAPPING_TEMPLATE: {\n return Object.assign({}, state, {\n templateName: action.payload.template\n })\n }\n default: {\n return state;\n }\n }\n}; ","import {\n SET_CONFIGS\n} from \"../actionTypes\";\n\nconst initialState = {\n appSettings: null,\n configsLoaded: false\n}\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case SET_CONFIGS: {\n return Object.assign({}, state, {\n appSettings: action.payload.configs,\n configsLoaded: true\n })\n }\n default: {\n return state;\n }\n }\n}; ","import {\n SET_DUPES, SET_IMPORT_WITH_DUPLICATES\n} from \"../actionTypes\";\n\nconst initialState = {\n duplicateConfigurations: [],\n importWithDuplicates: false \n}\n\nexport default function (state = initialState, action) {\n switch (action.type) {\n case SET_DUPES: {\n return Object.assign({}, state, {\n duplicateConfigurations: action.payload.dupeList\n })\n }\n case SET_IMPORT_WITH_DUPLICATES: {\n return Object.assign({}, state, {\n importWithDuplicates: action.payload.importWithDuplicates\n })\n }\n default: {\n return state;\n }\n }\n}; ","import { combineReducers } from \"redux\";\nimport setup from \"./setup\";\nimport mapping from \"./mapping\";\nimport configs from \"./configs\";\nimport duplicates from \"./duplicates\";\n\nexport default combineReducers({ setup, mapping, configs, duplicates });","import { createStore } from \"redux\";\nimport rootReducer from \"./reducers\";\n\nexport default createStore(rootReducer);","// 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(process.env.PUBLIC_URL, window.location);\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 } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\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 .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl) {\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').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\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 './index.css';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport { Provider } from 'react-redux';\nimport store from './redux/store';\nimport App from './App';\nimport registerServiceWorker from './registerServiceWorker';\nimport { DndProvider } from 'react-dnd'\nimport HTML5Backend from 'react-dnd-html5-backend'\n\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href');\nconst rootElement = document.getElementById('root');\n\nlet connectWiseClientApi;\nlet timer;\n\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\n onReady();\n});\n\nfunction onReady() {\n timer = setTimeout(DisplayError, 60000, \"Authentication request to Manage timed out.\"); // \"Authentication request to Manage Hosted API timed out.\"\n let targetWindow = window.parent;\n if (targetWindow) {\n let message = JSON.stringify({ 'message': 'wizardloaded' });\n window.addEventListener(\"message\", receiveMessage, false);\n targetWindow.postMessage(message, \"*\");\n }\n else {\n // Old code to work with HostedAPI authentication\n connectWiseClientApi = new window.ConnectWiseHostedAPI('*',\n {\n \"eventHandlers\": [\n { \"event\": \"onLoad\", \"callback\": onLoadCallback }\n ]\n }\n , true); \n }\n};\n\nfunction receiveMessage(event) {\n // Do we trust the sender of this message?\n if (event.origin.indexOf(\"localhost\") === -1 && event.origin.indexOf(\"connectwisedev.com\") === -1 &&\n event.origin.indexOf(\"myconnectwise.net\") === -1 && event.origin.indexOf(\"cw.connectwise.net\") === -1) {\n return;\n }\n\n if (event.data) {\n let data = JSON.parse(event.data);\n if (data.memberHash) {\n window.removeEventListener(\"message\", receiveMessage);\n handleAuthData(data);\n }\n }\n }\n\nfunction handleAuthData(authData) {\n clearTimeout(timer);\n const manageInfo = {\n 'memberHash': authData.memberHash,\n 'memberId': authData.memberid ? authData.memberid : authData.memberId,\n 'companyId': authData.companyid ? authData.companyid : authData.companyId,\n 'site': authData.site,\n 'version': authData.codeBase,\n 'memberEmail': authData.memberEmail,\n 'memberContext': authData.memberContext\n }\n ReactDOM.render(\n \n \n \n \n \n \n ,\n rootElement);\n}\n\nasync function onLoadCallback() {\n connectWiseClientApi.post({ \"request\": \"getMemberAuthentication\" },\n async function (authData) {\n clearTimeout(timer);\n if (authData && authData.memberHash) {\n handleAuthData(authData);\n }\n else {\n let errorText = \"Member hash was not present for attempted access\";\n DisplayError(errorText);\n } \n })\n};\n\nfunction DisplayError(errorText)\n{\n let error = {};\n error[\"errorText\"] = errorText;\n fetch('api/cwRestApi/logFrontEndError/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(error)\n });\n ReactDOM.render(\n

Sorry we are unable to load this page. The error has been logged. Please try again later.

,\n rootElement);\n}\n\n//display some message like \"loading, please wait?\nReactDOM.render(\n

Loading Your Page

,\n rootElement);\n\n///////////////////////////////\nregisterServiceWorker();\n\n\n","import { ApplicationInsights } from '@microsoft/applicationinsights-web';\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\nimport { createBrowserHistory } from \"history\";\n\nexport default function initiateAppInsights(instrumentationKey) {\n var browserHistory = createBrowserHistory({ basename: '' });\n var reactPlugin = new ReactPlugin();\n var appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: instrumentationKey,\n extensions: [reactPlugin],\n extensionConfig: {\n [reactPlugin.identifier]: { history: browserHistory }\n }\n }\n });\n appInsights.loadAppInsights();\n return appInsights;\n};\n\nexport function initiateAppInsightsWithReactPlugin(reactPlugin, instrumentationKey) {\n var browserHistory = createBrowserHistory({ basename: '' });\n var appInsights = new ApplicationInsights({\n config: {\n instrumentationKey: instrumentationKey,\n extensions: [reactPlugin],\n extensionConfig: {\n [reactPlugin.identifier]: { history: browserHistory }\n }\n }\n });\n appInsights.loadAppInsights();\n return appInsights;\n};\n\n\n","import React, { Component } from 'react';\nimport { CwImage } from 'cw-widgets';\nimport './Page.css';\n\nexport class PageLogoHeader extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n };\n }\n render() {\n return
\n
\n
\n \n
\n
\n
{this.props.pageNumber} of 3 Steps
\n
\n
\n
;\n }\n}","import React, { Component } from 'react';\nimport './NavButtons.css';\nimport { Redirect, Prompt } from 'react-router';\nimport { CwButton, CwImage } from 'cw-widgets';\n\nexport class NavButtons extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n redirect: false,\n prompt: false,\n redirectRoute: \"\"\n };\n this.handleBackButtonClick = this.handleBackButtonClick.bind(this);\n this.handleForwardButtonClick = this.handleForwardButtonClick.bind(this);\n this.reroute = this.reroute.bind(this);\n }\n\n handleBackButtonClick() {\n if (this.props.backCustom) {\n this.props.backCustom();\n }\n let route = this.props.backRoute ? this.props.backRoute : '/';\n this.reroute(route);\n }\n\n handleForwardButtonClick() {\n let route = this.props.forwardRoute ? this.props.forwardRoute : '/home';\n if (this.props.forwardCustom) {\n this.props.forwardCustom()\n .then(blockRoute => {\n if (!blockRoute) {\n this.reroute(route);\n }\n });\n }\n else {\n this.reroute(route);\n }\n }\n\n reroute(route) {\n this.setState({ redirect: true, prompt: false, redirectRoute: route })\n }\n\n render() {\n let backProps = {};\n let forwardDisabled = !this.props.forwardLinkActive();\n\n //If back button is expected to be visible\n if (!this.props.backButtonDisabled) {\n backProps.onClick = this.handleBackButtonClick;\n backProps.className = \"backButton\"\n backProps.value = ;\n }\n\n let forwardProps = {};\n forwardProps.disabled = forwardDisabled;\n forwardProps.onClick = this.handleForwardButtonClick;\n forwardProps.className = forwardDisabled ? \"forwardButtonDisabled\" : \"forwardButton\";\n\n forwardProps.value = ;\n\n let backButton = ;\n let forwardButton = ; \n\n if (this.props.finalButton) {\n let finalProps = {};\n let imageState = forwardDisabled ? \"finalNavButtonImageDisabled\" : \"finalNavButtonImage\";\n finalProps.disabled = forwardDisabled;\n finalProps.onClick = this.handleForwardButtonClick;\n finalProps.className = forwardDisabled ? \"finalButtonDisabled\" : \"finalButton\";\n\n finalProps.value = ;\n\n let finalText = this.props.forwardTooltipText;\n let finalTooltip = {finalText};\n forwardButton = { finalText ? finalTooltip : null }\n }\n\n //If button is pressed, activate redirect to new page\n if (this.state.redirect === true) {\n return
\n \n \n
;\n }\n\n if (this.props.disableBackButton) {\n return
\n {forwardButton}\n
\n }\n return
\n {backButton}{forwardButton}\n
;\n }\n}","import React, { Component } from 'react';\nimport { CwComboBox, CwLabel } from 'cw-widgets';\nimport './Page.css';\n\nexport class Dropdown extends Component {\n\n render() {\n let id = this.props.id;\n let optionList = [];\n let selectedOption = this.props.selection\n if (this.props.options) {\n this.props.options.map((option) => optionList.push({ id: option.id, name: option.name }));\n }\n return
\n {this.props.header ?\n
\n {this.props.header}\n
\n :null}\n
\n \n
\n
;\n }\n}","import React from 'react';\nimport './SplitFrame.css';\n\nexport class SplitFrame extends React.Component {\n\n render() {\n let leftWidth = this.props.leftFrameWidth || \"50%\";\n let rightWidth = this.props.rightFrameWidth || \"50%\";\n let frameHeight = this.props.frameHeight || \"auto\";\n\n return \n \n \n \n \n \n \n
\n {this.props.leftChildren}\n \n {this.props.rightChildren}\n
\n }\n}","import React from 'react';\nimport './SplitFrame.css';\n\nexport class SplitFrameScrollPadding extends React.Component {\n\n render() {\n let leftWidth = this.props.leftFrameWidth || \"50%\";\n let rightWidth = this.props.rightFrameWidth || \"50%\";\n let frameHeight = this.props.frameHeight || \"auto\";\n\n return \n \n \n \n \n \n \n \n
\n {this.props.leftChildren}\n \n {this.props.rightChildren}\n \n
\n }\n}","import React from 'react';\nimport './Popup.css';\nimport { CwButton, CwDialog } from 'cw-widgets';\n\n\nclass Popup extends React.Component {\n render() {\n const dialogButtons = () => {\n return [];\n }\n return (\n \n

{this.props.text}

\n \n );\n }\n}\nexport default Popup;","import React from 'react';\nimport './FileDialog.css';\nimport { CwLabel, CwButton } from 'cw-widgets';\n\n\nexport class FileDialog extends React.Component {\n constructor(props) {\n super(props);\n this.handleFiles = this.handleFiles.bind(this);\n this.checkValidFileTypes = this.checkValidFileTypes.bind(this);\n this.handleBrowseClick = this.handleBrowseClick.bind(this);\n this.handleInputSelect = this.handleInputSelect.bind(this);\n\n this.state = {\n showPopup: false,\n docIcon: \"https://files.connectwise.com/UI/Icons/v1.0/Document.svg\"\n };\n }\n checkValidFileTypes(value) {\n var validTypes = [\n 'application/vnd.ms-excel',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n 'text/csv'\n ];\n\n if (typeof value != 'undefined' && !validTypes.includes(value[0].type)) {\n return false;\n }\n\n if (typeof value != 'undefined' && value[0].name.includes(\".xls\")) {\n this.setState({\n docIcon: \"https://files.connectwise.com/UI/Icons/v1.0/Action_File_Excel.svg\"\n });\n }\n else {\n this.setState({\n docIcon: \"https://files.connectwise.com/UI/Icons/v1.0/Document.svg\"\n });\n }\n\n return true;\n }\n handleFiles(file) {\n if (this.checkValidFileTypes(file) !== true) {\n this.props.showPopup('Invalid File Type', 'Only .csv and .xls type files are supported for the import. Please select a file of this type and try again.');\n }\n else {\n this.props.handleFileChange(file);\n }\n }\n\n handleBrowseClick() {\n this.inputField.click();\n }\n\n handleInputSelect = (event) => {\n // Update\n if (!event.target.files || event.target.files.length < 1) {\n return;\n }\n let files = event.target.files;\n\n this.handleFiles(files)\n }\n\n render() {\n let fileMessage = this.props.selectedFileName ? this.props.selectedFileName : \"\";\n\n return (\n
\n
\n Upload File\n
\n this.inputField = input}\n onChange={this.handleInputSelect}\n />\n
\n
\n \n \n\n
\n
\n \n
\n );\n }\n}\nexport default FileDialog;","import React, { Component } from 'react';\nimport '../Shared/Page.css';\nimport { Dropdown } from '../Shared/Dropdown';\nimport { FileDialog } from '../Shared/FileDialog';\nimport { SplitFrame } from '../Shared/SplitFrame';\nimport { PageLogoHeader } from '../Shared/PageLogoHeader'\nimport { NavButtons } from '../Shared/NavButtons';\nimport Popup from '../Popup';\nimport { CwLabel, CwCheckBox } from 'cw-widgets';\nimport { connect } from \"react-redux\";\nimport {\n selectConfigType,\n selectVendor,\n selectFile,\n addDataPreview,\n addConfigTypeQuestions,\n addConfigTypes,\n addVendors,\n toggleRenewable\n} from \"../../redux/actions\";\nimport XLSX from \"xlsx\";\nimport initiateAppInsights from \"../Shared/AppInsights\";\n\nexport class Setup extends Component {\n displayName = Setup.name\n\n constructor(props) {\n super(props);\n this.state = {\n showPopup: false\n };\n\n this.handleConfigurationTypeChange = this.handleConfigurationTypeChange.bind(this);\n this.checkForwardLinkActive = this.checkForwardLinkActive.bind(this);\n this.togglePopup = this.togglePopup.bind(this);\n this.popupMessage = this.popupMessage.bind(this);\n this.loadConfigurationTypeQuestions = this.loadConfigurationTypeQuestions.bind(this);\n this.handleFileChange = this.handleFileChange.bind(this);\n this.loadVendors(props.manageInfo);\n this.loadConfigurationTypes(props.manageInfo);\n\n this.sendAppInsights();\n }\n\n sendAppInsights() {\n if (this.props.appSettings) {\n if (this.props.appSettings.instrumentationKey) {\n var instrumentationKey = this.props.appSettings.instrumentationKey;\n var appInsights = initiateAppInsights(instrumentationKey);\n appInsights.trackPageView({\n name: \"Setup page\"\n });\n }\n }\n }\n\n togglePopup() {\n this.setState({\n showPopup: !this.state.showPopup,\n });\n }\n\n popupMessage(title, message) {\n this.setState({\n messageTitle: title,\n messageText: message,\n showPopup: true\n });\n }\n\n loadConfigurationTypes(manageInfo) {\n var displayError = this.props.displayError;\n fetch('api/cwRestApi/getCompanyConfigurationTypes/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(manageInfo)\n }).then(res => res.json()).then(response => this.props.handleFetchErrors(response))\n .then(data => {\n this.props.addConfigTypes(data);\n }).catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n });\n }\n\n loadVendors(manageInfo) {\n var displayError = this.props.displayError;\n fetch('api/cwRestApi/getVendors/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(manageInfo)\n }).then(res => res.json()).then(response => this.props.handleFetchErrors(response))\n .then(data => {\n this.props.addVendors(data);\n }).catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n });\n }\n\n loadConfigurationTypeQuestions(manageInfo, id) {\n var displayError = this.props.displayError;\n var toSend = this.props.manageInfo;\n toSend[\"searchParameter\"] = id;\n fetch('api/cwRestApi/GetConfigurationTypeQuestions/', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify(toSend)\n }).then(res => res.json()).then(response => this.props.handleFetchErrors(response))\n .then(data => {\n let configTypeQuestions = { id: id, questions: data }\n this.props.addConfigTypeQuestions(configTypeQuestions);\n }).catch(function (error) {\n console.log(error);\n displayError(error.message, true);\n });\n }\n checkForwardLinkActive() {\n if (this.props.configType && this.props.file && this.props.vendor) {\n return true;\n }\n else {\n return false;\n }\n }\n\n handleConfigurationTypeChange(option) {\n if (option) {\n this.loadConfigurationTypeQuestions(this.props.manageInfo, option.id);\n this.props.selectConfigType(option);\n }\n }\n\n handleFileChange(fileList) {\n let file = fileList[0];\n\n /* Boilerplate to set up FileReader */\n const reader = new FileReader();\n const rABS = !!reader.readAsBinaryString;\n reader.onload = (e) => {\n /* Parse data */\n const bstr = e.target.result;\n const wb = XLSX.read(bstr, { type: rABS ? 'binary' : 'array', sheetRows: 10 });\n /* Get first worksheet */\n const wsname = wb.SheetNames[0];\n const ws = wb.Sheets[wsname];\n /* Convert array of arrays */\n const data = XLSX.utils.sheet_to_json(ws, { header: 1, raw: false });\n\n this.props.addDataPreview(data);\n };\n if (rABS) reader.readAsBinaryString(file); else reader.readAsArrayBuffer(file);\n this.props.selectFile(file);\n }\n\n render() {\n let configurationTypeId = \"ConfigurationType\";\n let configurationTypeHeader = \"Configuration Type *\";\n let configurationTypeText = \"Loading configuration types...\";\n let configurationTypeWatermark = \"Select Manage Configuration Type\";\n\n let vendorId = \"Vendor\";\n let vendorHeader = \"Vendor *\";\n let vendorText = \"Loading vendors...\";\n let vendorWatermark = \"Select Vendor Name\";\n\n let leftFrame = \n\n let rightFrame = \n return (\n
\n \n
\n
\n \n
\n
\n
\n CONFIGURATION TYPE\n
\n
The Configuration Type screen lets you import a list of configurations from a single vendor and assign one configuration type to each list. \n Select the Vendor and Manage Configuration Type you want to assign to imported configurations.\n
\n
\n
\n \n
\n
\n Select to indicate that imported items expire and renew. \n
\n
\n \n
\n
\n Upload Configurations\n \n
\n {this.state.showPopup ?\n \n : null\n }\n
\n
\n );\n }\n}\n\nconst mapStateToProps = state => {\n return {\n configType: state.setup.configType,\n vendor: state.setup.vendor,\n file: state.setup.file,\n configTypes: state.setup.configTypes,\n configTypeQuestions: state.setup.configTypeQuestions,\n vendors: state.setup.vendors,\n configTypesLoading: state.setup.configTypesLoading,\n vendorsLoading: state.setup.vendorsLoading,\n renewable: state.setup.renewable,\n appSettings: state.configs.appSettings,\n configsLoaded: state.configs.configsLoaded\n };\n};\n\nconst mapDispatchToProps = {\n selectConfigType,\n selectVendor,\n selectFile,\n addDataPreview,\n addConfigTypeQuestions,\n addConfigTypes,\n addVendors,\n toggleRenewable\n};\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n )(Setup);"],"sourceRoot":""}