{"version":3,"sources":["images/chevron-icon.png","images/excel-export.png","LocalizationMessages.js","components/smartSearch/smartSearchControls.js","components/common/columns.js","components/common/customCoumnMenu.js","components/common/functions.js","components/common/resultsGrid.js","components/common/LoadingPanel.js","appconfigs.js","components/smartSearch/notFoundHelperLink.js","msal/auth-utils.js","msal/AuthProvider.js","api/WhitePagesApi.js","components/common/loadingLabel.js","components/common/expandTable.js","components/common/SliderNotification.js","components/common/methods.js","components/smartSearch/helpfulLinks.js","components/smartSearch/smartSearch.js","components/personDetails/CompanyAndCCTable.js","api/RequestStatusCodes.js","components/personDetails/RotationsTable.js","components/personDetails/selectPreferredEmailForm.js","components/personDetails/ContactsTable.js","components/personDetails/JobRelatedTable.js","components/personDetails/InformationUpdateTable.js","components/personDetails/OrgStructTable.js","components/personDetails/PersonDetailsPage.js","components/advancedSearch/Filters.js","components/advancedSearch/filterTypes.js","components/advancedSearch/filter-components/TextFilter.js","components/advancedSearch/filter-components/AutocompleteTextFilter.js","components/advancedSearch/filter-components/SelectFilter.js","components/advancedSearch/filter-components/CostCenterTreeView.js","components/advancedSearch/filter-components/CostCenterFilter.js","components/advancedSearch/filter-components/homeCompanyFilter/HomeCompanyFilter.js","components/advancedSearch/filter-components/CheckboxFilter.js","components/advancedSearch/filter-components/common/RemoveFilterButton.js","components/advancedSearch/filter-components/common/ActiveFiltersLayout.js","components/advancedSearch/ActiveFilters.js","components/advancedSearch/MainControls.js","components/advancedSearch/FilterSelector.js","components/advancedSearch/filter-components/FormControls.js","components/advancedSearch/AdvancedSearch.js","components/advancedSearch/filter-components/excelExportProgressBar.js","components/common/ExportToExcel.js","components/common/BrowserNotSupported.js","components/common/AuthorizationInProgress.js","components/layout/Header.js","components/layout/Footer.js","components/layout/Layout.js","App.js","registerServiceWorker.js","index.js","images/phone.png","images/60px-Tengizchevroil_Logo.png","images/email.png"],"names":["module","exports","messages","SmartSearchControls","validationPattern","localizationService","this","context","localization","errorMessage","props","inputValue","length","toLanguageString","placeholder","searchButton","className","id","onSubmit","onSubmitHandler","value","aria-label","onChange","e","onInputChange","target","pattern","validityStyles","name","minLength","required","validationMessage","autoFocus","type","title","React","Component","registerForLocalization","columns","field","show","sortable","width","minResizableWidth","orderIndex","CustomColumnMenu","onToggleColumn","setState","state","map","column","idx","onReset","event","preventDefault","onColumnsSubmit","onCloseMenu","onFilterExpandChange","filterExpanded","columnsExpanded","oneVisibleColumn","filter","c","iconClass","style","maxHeight","key","readOnly","disabled","checked","onClick","htmlFor","userSelect","isStringEmpty","String","trim","TryParseInt","str","defaultValue","retValue","nullOrUndefined","isNaN","parseInt","isNullOrWhitespace","input","replace","formatWorkLocation","location","workLocationStr","appendEndignSlash","facility","area","building","room","getFormattedPhone","number","result","part1","substr","part2","part3","part4","undefined","getFullPopupContent","personExtended","ls","person","lang","position","primaryEmail","emails","personalEmails","typeCode","address","getPrimarydEmail","primaryPhone","phones","primaryPones","phone","getPrimaryPhone","supervisor","supervisorName","cyrllicName","englishName","hiddenStyle","rotations","employmentStatusCode","rotation","code","hasRotation","back2back","back2Back","backToBackName","rotationStatusText","statusName","arrivalDate","departureDate","getRotationStatusString","parserArrivalDate","Date","parse","localeArrivalDate","toLocaleDateString","parserDepartureDate","localeDepartureDate","getRotationStatusStringRu","getRotaionStatusText","locationText","workLocation","canonicalId","clearPopupTimeout","window","popupTimeout","clearTimeout","setAsyncTimeout","time","a","Promise","resolve","setTimeout","gridStyle","top","bottom","right","left","ResultsGrid","minGridWidth","setMinWidth","gridCurrent","rowHeight","handleResize","grid","offsetWidth","visibleColumns","item","forceUpdate","setWidth","minWidth","err","nextProps","gridUpdateCounter","showExpandIcon","document","querySelector","addEventListener","hideExpandIcon","data","metadata","sort","onRowClick","onSortChange","resizable","onColumnReorder","onScroll","scrollHandler","pageable","info","previousNext","buttonCount","pageSizes","total","totalCount","pageSize","reorderable","cell","fieldType","righBorder","columnMenu","CustomCell","getEmailCell","email","dataItem","toString","href","getCostCenterOwnersCell","primaryOwnerName","primaryOwnerEnglishName","primaryOwnerId","primaryOwnerCanonicalId","secondaryOwnerName","secondaryOwnerEnglishName","secondaryOwnerId","secondaryOwnerCanonicalId","primaryOwnerCyrllicName","secondaryOwnerCyrllicName","primaryOwnerElEn","getPersonLinkCell","secondaryOwnerElEn","delimiter","Fragment","fullName","url","data-id","data-container","data-toggle","data-placement","data-content","data-original-title","buildPersonLinkCell","supervisorCanonicalId","back2BackCanonicalId","getDataElement","colSpan","LoadingPanel","origin","loadingPanel","marginTop","gridContent","ReactDOM","createPortal","linkPath","NotFoundHelperLink","onLinkClick","changeUrl","hideLink","pathname","notFoundText","linkText","textAlign","GRAPH_AUTH_PARAMS","scopes","prompt","host","isProdEnv","ACCOMMODATION_GROUP","WP_AUTH_PARAMS","CLIENT_ID","msalInstance","UserAgentApplication","auth","authority","clientId","validateAuthority","tokenRefreshUri","cache","cacheLocation","storeAuthStateInCookie","system","navigateFrameWait","logger","Logger","logLevel","message","console","log","level","LogLevel","Verbose","piiLoggingEnabled","telemetry","applicationName","applicationVersion","telemetryEmitter","events","account","error","emailMessages","graphProfile","initialized","hasAccommodationRole","initialize","gettingAuthToken","isInAccommodationGroup","getAccount","token","claims","idTokenClaims","roles","includes","acquireToken","jkuHeaderValue","jku","jkuWhitelist","Error","tokenRequest","isUserSignedIn","onSignIn","__this","checkAsyncLogin","acquireTokenInner","retryCount","acquireTokenSilent","errorCode","indexOf","acquireTokenRedirect","loginRedirect","logout","isCallback","hash","handleRedirectCallback","acquireTokenWP","tokenResponse","graphClient","getUserProperties","accessToken","catch","ResponseType","TEXT","Symbol","JSON","BLOB","FORM_DATA","ARRAY_BUFFER","UNSUPPORTED_MEDIA_TYPE","Object","freeze","HttpResponseCache","PeopleApi","payloadType","itemFromCache","getItemFromCache","getHeaderOptions","options","fetch","encodeURI","response","status","authProvider","onSignOut","text","json","blob","formData","arrayBuffer","storeItem","method","mode","headers","Headers","requestUrl","getFromCacheOrLoad","searchValue","pageIndex","reqTotal","sortField","sortDirection","showAccomodation","includeInactive","query","parentCode","ccCode","optionName","filterName","includeAFE","includeHomeCCOnly","personId","emailAddress","newPreferredEmail","EmailAddress","body","stringify","wrapperStyle","zIndex","labelStyle","margin","paddingBottom","color","LoadingLabel","labelText","labelElement","tableFooter","ExpandTable","tableExpanded","element","toggleTableSize","gird","notificationGroupStyle","alignItems","notificationStyle","icon","SliderNotification","slideDirection","showNotification","notificationMessage","direction","closable","onClose","hideNotification","getSelection","userId","detailsUrl","open","openDetailsPage","prevState","values","b","x","newColumnsState","find","invisibleColumns","concat","index","saveColumnsState","formatDateString","dateInput","date","toggleSortDirection","hasMoreDataToLoad","loadFirstPage","sortData","dir","trackScrolling","loadNextPage","pageCount","requestData","getInitialSortField","getCurrentLanguage","getSortDirectionLongValue","isSortByNameField","requestingFirstPage","initialState","loadingNextPage","requestInProgress","orderBy","getNextPageIndex","updateStateWithTheResponse","newMetadata","getMergedMetadata","aggregateAndLocalizeDataForTable","newData","addLocalizedFields","forEach","rotationArrivalDateRu","rotationArrivalDate","rotationDepartureDateRu","rotationDepartureDate","employmentStartDateRu","employmentStartDate","employmentEndDateRu","employmentEndDate","primaryPhoneNumber","searchTypeRu","searchType","rotationStatusRu","rotationStatus","wlFacilityName","wlAreaName","wlBuildingName","wlRoom","buildLocationString","addWorkLocationField","retunAnalogIfMainEmpty","supervisorEnglishName","supervisorCyrllicName","back2BackEnglishName","back2BackCyrllicName","copyPersonNamesIfOnlyOnePresent","accommodationAreaDescription","accommodationBuildingDescription","accommodationRoom","addHousingData","main","analog","search","history","push","getStoredOrDefaultColumns","storedColumnsVersion","localStorage","getItem","removeItem","storedColumnsState","columnsState","setItem","nativeEvent","scrollTop","scrollHeight","clientHeight","language","showExpand","setNotificationTimeout","notificationTimeout","messageLabel","HelpfulLinks","contactAtyLabel","contactTengizLabel","facilityMgmAtyLabel","facilityMgmTenLabel","helpDeskLabel","chevronLabel","informationUpdateLabel","informationUpdateLink","submitFeedbackLabel","submitFeedbackURL","fontSize","src","phoneImg","height","alt","emailImg","tcoIcon","chevronIcon","SmartSearch","bind","currentLang","requestedValue","smartSearch","getRequestParameters","then","finally","stopPropagation","clearInputChangeTimeout","setInitialState","test","delay","inputChangeTimeout","click","newProps","CompanyAndCCTable","tableRows","rows","homeCompany","header","formatCodeNamePair","costCenter","getCostCenterOwners","divisionCode","divisionName","groupCode","groupName","departmentCode","departmentName","r","getRows","row","fullNameEn","rel","onMouseEnter","setImagePopup","onPersonClick","primaryOwnerElRu","secondaryOwnerElRu","delimeter","RotationsTable","counter","b2b","getPersonNameRow","rotationHeader","rotationData","getRotationDateStringRu","getRotationDateStringEn","tableHeaderLabel","SelectPreferredEmailForm","togglePopup","onSubmitPreferredEmail","selectedEmail","eAddress","handleClickOutside","domNode","findDOMNode","contains","emailsExpanded","Map","uniqueEmails","removeDupilcate","removeEventListener","boxShadow","showSpinner","loadingLabel","role","ContactsTable","anchor","offset","popupOpen","updateSuccess","updatePreferredEmail","isCurrentUser","normalizedPhones","resultList","order","normalizePhoneData","groupBy","group","numbers","items","Array","from","Set","getUniqueNumbersInPhonesGroup","padding","prefEmails","showSkypeIcon","personalEmail","personalEmailData","anchorElement","openDelay","showSelectEmailIcon","ref","svg","viewBox","fill","xmlns","fillRule","d","clipRule","popupClass","animate","display","loadingAccommodation","housingLocation","accomData","areaDescription","buildingDescription","JobRelatedTable","cai","networkId","badgeNumber","searchTypeData","employmentType","employmentStatusName","getTimeInTcoString","timeInTco","dateString","dateArr","split","year","month","getTimeInTcoRu","getTimeInTcoEn","InformationUpdateTable","infoUpdateInstructionHeader","OrgStructureTable","btnMessage","isSubordinatesOpen","hasSubOrdinates","hasSubOrdinate","tableHeaderClass","fullNameAccessor","now","hasSubordinates","fetchSubordinatesStatus","showSubordinates","positionName","preferredEmailAddress","PersonDetailsPage","getSubordinates","match","params","subordinates","getDirectReports","fetchAccommodation","accommodationData","getEmployeeAccommodation","fetchPersonDetails","IsLoading","$","popover","getPersonExtended","newState","FirstVisit","ResponseStatus","englishFullName","cyrillicFullName","selectNewPerson","persist","trigger","html","animation","placement","boundary","container","content","popupId","attr","on","newPersonId","failureMessage","personImageComponent","fontWeight","marginBottom","paddingTop","active","filterType","optionGroup","isLocaleAvailable","fetchOptionsFromServer","TextFilter","label","AutocompleteTextFilter","onFocus","isBlured","onBlur","isListOpen","validateInput","regex","RegExp","timeout","loading","inputText","PeopleAPI","searchAutocompleteText","autocompleteData","pervState","autocompletedata","isEmpty","opened","SelectFilter","allData","changeSelectOption","selectedItem","filterChange","filterData","getOptions","includeCodeToName","nameAsValue","option","setOrGetOptions","slice","filterBy","o","textField","dataItemKey","clearButton","filterable","onFilterChange","suggest","CostCenterTreeView","initialLoad","itemToFocus","isGetBranchDisabled","isInputDisabled","expandedItems","selectedCostCenterCodes","shouldScroll","scrollTreeBodyToFocusedItem","itemText","queryStr","targetElement","get","scrollIntoView","getBranch","itemToFocuseCode","getCostCenterBranch","assign","getMergedBranch","expandItemsFromTargetToRoot","targetItemCode","tree","searchTree","updateExpandedItems","onExpandChange","expanded","copyDataAndCategory","category","loadCostCenters","toggleCheckboxState","onCheckChange","updateselectedCostCenterCodes","setCostCenterCodes","onSearch","showSearchBox","getRootCostCenters","rootCostCenter","onItemClick","selected","getfilteredCostCenters","focusedItem","i","searchCostCentersInHierarchy","onSearchClick","onClickClose","arr","matches","isArray","isActive","hasActiveEmployee","hasChildren","hasCCChildren","hasInactiveCCChildren","hasChildrenCCWithActiveEmployees","hasAFEChildren","hasInactiveAFEChildren","hasChildrenAFEWithActiveEmployees","childResults","itemCode","isExpanded","isChecked","oldBranch","newBranch","parentElementInOldBranch","costCenterCode","getChildCostCenters","parentElement","targetElementIndex","rootCostCenters","isTreeVisible","isSearchBtnDisabled","aria-hidden","cursor","checkboxes","expandIcons","itemRender","iconClassName","matchingCode","CostCenterFilter","onSearchValChange","showCloseTreeView","visible","getSelectedItemsCSV","join","inputName","treeIconColor","HomeCompanyFilter","selectedHomeCompanies","isLoading","loadHomeCompanies","getActiveCompanies","handleInputChange","newValue","handleChange","selectedOptions","v","localeCompare","selectedHomeCompany","cacheOptions","defaultOptions","isMulti","classNamePrefix","CheckboxFilter","onCheck","RemoveFilterButton","ActiveFiltersLayout","children","deactivateFilter","ActiveFilters","activeFilters","filters","filter1","filter2","filterComponents","coreFilter","searchButtonStyle","MainControls","searchText","resetLabel","excelExportLabel","onClearForm","opacity","exportEnabled","export","exportExcelImg","FilterSelector","defaultItem","isOpen","onOpen","eventType","activateFilter","onPlusCick","itemIdex","filterOptions","li","itemProps","itemChildren","isGroupLabel","paddingLeft","float","border","cloneElement","FormControls","clearFilters","resetFilters","saveFiltersState","AdvancedSearch","columsOrderChanged","searchQuery","getStoredOrDefaultFilters","hideResultsTable","updatedFilters","getFiltersAfterActivation","getFiltersAfterDeactivation","clearNotificationTimeout","serialize","isQueryEmpty","decodeURI","some","pair","getFiltersWithGroupLabels","addedLabels","groupLabel","advancedSearch","exportUrl","storedFiltersState","activeFiltersCount","getActiveFiltersCount","fullNameField","ProgressBar","loadPercent","barStyle","ExportToExcel","storedColumns","loadPercentage","_export","save","startLoading","addCostCenterOwners","costCenterOwners","costCenterOwnersRu","amount","percent","Math","floor","calculatePercentage","exportColumns","getColumnsForExport","backgroundColor","flexDirection","flex","exporter","BrowserNotSupported","verticalAlign","AuthInProgress","Header","path","menuLink","menuLinkText","toggleLang","currentLanguage","pathName","langLabel","mainHeaderLabel","logo","borderRadius","data-target","aria-controls","aria-expanded","WrappedClass","withRouter","Footer","appVersionLabel","copyrightLabel","technicalContactLabel","footerPlaceholder","Layout","loadMessages","App","storedLanguage","navigator","languages","userLanguage","browserLanguage","startsWith","userSignedIn","appName","userAgent","browser","msie","exact","to","render","component","PersonsDetailsPage","Boolean","hostname","getElementById","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.6ac22c86.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,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\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAYAAAA7MK6iAAAABmJLR0QA/wD/AP+gvaeTAAACRUlEQVRIie2WvW/TQBjGn8dJFBXxUVA75AuGgoTYGq+wMFcMoLh8uhJDCCBVQgKJdioCNiaEQEFCgFOgddjbiQEmkFD/AWBpHFakglSU5F6G0GBHduKkaVn6m3zn573n9b135wN22CYYSiVgej43phR0TdN0EdEBjAP4RWG+MrW41Ktx1K8zXcod9piUkBVgmARExC3dL5QigIObMk69nJwA5akIEj4mQWRa8ZYRFFBpnxnN+16KABJhs+6B9N+ZaeE1JpJbYLpBxt3QglT94Jg2HdOmuy2QE37agRr7IYz47pwOxrzhmDZFtGyrR/DAMW2CMuEXkbIMcS+wlGWIJup9j8YyO2rndlenFlYAfAJQUw3tIQSE4G5wXDg6TfVobJ3XmjngMUGrenlhNTlvnAU47hcwsBoTuDXy7NSeOuNvG0o90Yv5GBXvdP+efwTV2PfkcjESj8WnHbN0H8DnSCmXh/BIkLj9AElZhkCUrzbEqub6xpMC17rrw9HFmN+Gfqw9Srw6fSj5/MzR6tdji4CsBKkHt48pM1+ml36zHr1KLVrA3JwiMds5WS991Fg+OhfL5QO8sJeqVgAklnx97l7l/JvllGW8A3CyPWIgNRbgJggZUrXrAPYB2MV6owAAmsbbTUn/eKahw2+tI+66usdxTJtJK3ec4Id23X87q7vt457YTI2dQSbSxmqwMeUKgO9bYUpK3mPlp8q8mBxTEdEpaF72SB3AcNCgjmn3fNkLd731TyYL4Ccp+cql8nKvxjtsG38AU8bsBuh/FDgAAAAASUVORK5CYII=\"","export const currentLanguage = 'currentLanguage';\r\n\r\nexport const emptyPhotoText = 'emptyPhotoText';\r\nexport const smartSearchInputPlaceholder = 'smartSearchInputPlaceholder';\r\nexport const advancedSearchLink = 'advancedSearchLink';\r\nexport const smartSearchLink = 'smartSearchLink';\r\nexport const mainHeader = 'mainHeader';\r\nexport const validationErrorMessage = 'validationErrorMessage';\r\nexport const tryAdvancedSearchLink = 'tryAdvancedSearchLink';\r\n\r\nexport const emergencyContactAtyrau = 'emergencyContactAtyrau';\r\nexport const emergencyContactTengiz = 'emergencyContactTengiz';\r\nexport const facilityManagementAtyrau = 'facilityManagementAtyrau';\r\nexport const tengizFMServicesCallCenter = 'tengizFMServicesCallCenter';\r\nexport const chevronWp = 'chevronWp';\r\nexport const informationUpdateWp = 'informationUpdateWp';\r\nexport const informationUpdateWpLink = 'informationUpdateWpLink';\r\nexport const submitFeedback = 'submitFeedback';\r\nexport const submitFeedbackLink = 'submitFeedbackLink';\r\n\r\nexport const appVersion = 'appVersion';\r\nexport const copyright = 'copyright';\r\nexport const contentContact = 'contentContact';\r\nexport const technicalContact = 'technicalContact';\r\nexport const serviceName = 'serviceName';\r\nexport const helpDesk = 'helpDesk';\r\n\r\nexport const addFilter = 'addFilter';\r\nexport const firstName = 'firstName';\r\nexport const lastName = 'lastName';\r\nexport const cai = 'cai';\r\nexport const badgeNumber = 'badgeNumber';\r\nexport const networkId = 'networkId';\r\nexport const phone = 'phone';\r\nexport const email = 'email';\r\nexport const includeInactive = 'includeInactive';\r\nexport const supervisor = 'supervisor';\r\nexport const offRotation = 'offRotation';\r\nexport const positionName = 'positionName';\r\nexport const jobTitle = 'jobTitle';\r\nexport const employmentTypeCode = 'employmentTypeCode';\r\nexport const workStatusCode = 'workStatusCode';\r\nexport const homeCompanyName = 'homeCompanyName';\r\nexport const wLBuildingCode = 'wlBuildingCode';\r\nexport const wLAreaCode = 'wlAreaCode';\r\nexport const wlRoom = 'wlRoom';\r\nexport const group = 'group';\r\nexport const department = 'department';\r\nexport const division = 'division';\r\nexport const costCenterName = 'costCenterName';\r\nexport const rotationCode = 'rotationCode';\r\nexport const search = 'search';\r\nexport const clear = 'clear';\r\nexport const showFilters = 'showFilters';\r\nexport const saveFilters = 'saveFilters';\r\nexport const excelExport = 'excelExport';\r\nexport const hideFilters = 'hideFilters';\r\nexport const selectOption = 'selectOption';\r\nexport const includeAFE = 'includeAFE';\r\nexport const apply = 'apply';\r\nexport const reset = 'reset';\r\nexport const costCenterHierarchy = 'costCenterHierarchy';\r\nexport const includeHomeCCOnly = 'includeHomeCCOnly';\r\nexport const allActive = 'allActive';\r\nexport const contractor = 'contractor';\r\nexport const employee = 'employee';\r\nexport const exEmployees = 'exEmployees';\r\nexport const searchType = 'searchType';\r\nexport const all = 'all';\r\nexport const isActive = 'isActive';\r\nexport const employmentStatusName = 'employmentStatusName';\r\nexport const save = 'save';\r\nexport const rotationStatus = 'rotationStatus';\r\nexport const selectFilter = 'selectFilter';\r\nexport const employeeDetails = 'employeeDetails';\r\nexport const organization = 'organization';\r\nexport const location = 'location';\r\nexport const accommodationAreaDescription = 'accommodationAreaDescription';\r\nexport const accommodationBuildingDescription = 'accommodationBuildingDescription';\r\nexport const accommodationRoom = 'accommodationRoom';\r\n\r\n\r\nexport const fullName = 'fullName';\r\nexport const position = 'position';\r\nexport const mail = 'mail';\r\nexport const id = 'id';\r\nexport const badge = 'TCO ID';\r\nexport const fullNameAccessorField = 'fullNameAccessorField';\r\nexport const status = 'status';\r\nexport const loading = 'loading';\r\nexport const rotationFrom = 'rotationFrom';\r\nexport const rotationThrough = 'rotationThrough';\r\nexport const onRotation = 'onRotation';\r\nexport const housing = 'housing';\r\nexport const housingFieldAccessor = 'housingFieldAccessor';\r\n\r\nexport const workLocation = 'workLocation';\r\nexport const area = 'area';\r\nexport const facility = 'facility';\r\nexport const building = 'building';\r\nexport const room = 'room';\r\nexport const companyAndCC = 'companyAndCC';\r\nexport const homeCompany = 'homeCompany';\r\nexport const ccDescription = 'ccDescription';\r\nexport const ccCode = 'ccCode';\r\nexport const jobRelatedInfo = 'jobRelatedInfo';\r\nexport const userID = 'userID';\r\nexport const employmentStatus = 'employmentStatus';\r\nexport const employmentType = 'employmentType';\r\nexport const employmentStartDate = 'employmentStartDate';\r\nexport const employmentEndDate = 'employmentEndDate';\r\nexport const timeInTCO = 'timeInTCO';\r\nexport const rotations = 'rotations';\r\nexport const rotationType = 'rotationType';\r\nexport const currentRotation = 'currentRotation';\r\nexport const nextRotation = 'nextRotation';\r\nexport const contactInfo = 'contactInfo';\r\nexport const personalEmail = 'personalEmail';\r\nexport const sharedEmail = 'sharedEmail';\r\nexport const preferred = 'preferred';\r\nexport const related = 'related';\r\nexport const lineSupervisor = 'lineSupervisor';\r\nexport const mobilePhone = 'mobilePhone';\r\nexport const backToBack = 'backToBack';\r\nexport const rotation = 'rotation';\r\nexport const primaryPhone = 'primaryPhone';\r\nexport const otherPrimaryPhone = 'otherPrimaryPhone';\r\nexport const otherPrimaryPhone2 = 'otherPrimaryPhone2';\r\nexport const secondaryPhone = 'secondaryPhone';\r\nexport const mobileNumber = 'mobileNumber';\r\nexport const accommodationPhone = 'accommodationPhone';\r\nexport const pagerNumber = 'pagerNumber';\r\nexport const faxNumber = 'faxNumber';\r\nexport const modemNumber = 'modemNumber';\r\nexport const directSubordinates = 'directSubordinates';\r\nexport const showSubordinates = 'showSubordinates';\r\nexport const hideSubordinates = 'hideSubordinates';\r\nexport const noSubordinates = 'noSubordinates';\r\nexport const ccPrimaryOwner = 'ccPrimaryOwner';\r\nexport const ccSecondaryOwner = 'ccSecondaryOwner';\r\nexport const notFound = 'notFound';\r\nexport const close = 'close';\r\nexport const selectPreferredEmail = 'selectPreferredEmail';\r\nexport const emailUpdateSuccess = 'emailUpdateSuccess';\r\nexport const emailUpdateFailure = 'emailUpdateFailure';\r\nexport const infoUpdateInstruction = 'infoUpdateInstruction';\r\nexport const infoUpdateInstructionWpHeader = 'infoUpdateInstructionWpHeader';\r\n\r\nexport const notSupportedBrowser = 'notSupportedBrowser';\r\nexport const useEdgeBrowser = 'useEdgeBrowser';\r\nexport const optionIsNotSelected = 'optionIsNotSelected';\r\nexport const emptyField = 'emptyField';\r\nexport const formatError = 'formatError';\r\nexport const emptyFieldNotification = 'emptyFieldNotification';\r\nexport const apiErrorNotification = 'apiErrorNotification';\r\n\r\nexport const authInProgress = 'authRedirect';\r\n\r\nexport const fullNameFieldAccessor = 'fullNameFieldAccessor';\r\nexport const positionFieldAccessor = 'positionFieldAccessor';\r\nexport const phoneFieldAccessor = 'phoneFieldAccessor';\r\nexport const emailFieldAccessor = 'emailFieldAccessor';\r\nexport const badgeFieldAccessor = 'badgeFieldAccessor';\r\nexport const networkIdFieldAccessor = 'networkIdFieldAccessor';\r\nexport const statusFieldAccessor = 'statusFieldAccessor';\r\nexport const rotationStatusFieldAccessor = 'rotationStatusFieldAccessor';\r\nexport const employmentStatusNameFieldAccessor = 'employmentStatusNameFieldAccessor';\r\nexport const rotationFromFieldAccessor = 'rotationFromFieldAccessor';\r\nexport const backToBackFieldAccessor = 'backToBackFieldAccessor';\r\nexport const rotationThroughFieldAccessor = 'rotationThroughFieldAccessor';\r\nexport const ccCodeFieldAccessor = 'ccCodeFieldAccessor';\r\nexport const ccNameFieldAccessor = 'ccNameFieldAccessor';\r\nexport const supervisorFieldAccessor = 'supervisorFieldAccessor';\r\nexport const workLocationFieldAccessor = 'workLocationFieldAccessor';\r\nexport const divisionFieldAccessor = 'divisionFieldAccessor';\r\nexport const groupFieldAccessor = 'groupFieldAccessor';\r\nexport const departmentFieldAccessor = 'departmentFieldAccessor';\r\nexport const ccPrimaryOwnerName = 'ccPrimaryOwnerName';\r\nexport const ccSecondaryOwnerName = 'ccSecondaryOwnerName';\r\nexport const costCenterOwners = 'costCenterOwners';\r\nexport const costCenterOwnersFieldAccessor = 'costCenterOwnersFieldAccessor';\r\nexport const searchTypeFieldAccessor = 'searchTypeFieldAccessor';\r\nexport const homeCompanyFieldAccessor = 'homeCompanyFieldAccessor'\r\nexport const employmentStartDateFieldAccessor = 'employmentStartDateFieldAccessor';\r\nexport const employmentEndDateFieldAccessor = 'employmentEndDateFieldAccessor';\r\nexport const caiFieldAccessor = 'caiFieldAccessor';\r\nexport const x = 'X';\r\nexport const e = 'E';\r\nexport const s = 'S';\r\nexport const off_Rotation = 'OFF-Rotation';\r\nexport const on_Rotation = 'ON-Rotation';\r\nexport const columnsLabel = 'columnsLabel';\r\nexport const searchButtonText = 'searchButtonText';\r\n\r\nexport const messages = {\r\n 'en': {\r\n [currentLanguage]: 'en',\r\n //********* HEADER LABELS *************/\r\n [advancedSearchLink]: 'Advanced Search',\r\n [smartSearchLink]: 'Smart Search',\r\n [mainHeader]: 'TCO White Pages',\r\n\r\n\r\n //********* FOOTER LABELS *************/\r\n [appVersion]: 'Version: 1.3.0.0',\r\n [copyright]: '© 2020 Tengizchevroil',\r\n [contentContact]: 'Content Contact: ',\r\n [technicalContact]: 'Technical Contact: ',\r\n [serviceName]: 'TCO White Pages Service',\r\n [helpDesk]: 'TCO IT Help Desk',\r\n\r\n //*********SMART SEARCH PAGE LABELS *************/\r\n [smartSearchInputPlaceholder]: 'Please enter a name, email, network ID, phone or badge number',\r\n [validationErrorMessage]: 'Search value contains invalid character(s)',\r\n [tryAdvancedSearchLink]: 'Try Advanced Search',\r\n [emergencyContactAtyrau]: 'Emergency contact Atyrau',\r\n [emergencyContactTengiz]: 'Emergency contact Tengiz',\r\n [facilityManagementAtyrau]: 'Facility Management Atyrau',\r\n [tengizFMServicesCallCenter]: 'Facility Maintenance and Services Call Center Tengiz',\r\n [chevronWp]: 'Chevron identity management system',\r\n [informationUpdateWp]: 'TCO White Pages information update',\r\n [informationUpdateWpLink]: 'https://chevron.sharepoint.com/sites/TCODigital/DIPlatform/SRChapter/WEProductLine/SitePages/TCO-White-Pages-information-update.aspx',\r\n [submitFeedback]: 'Submit feedback',\r\n [submitFeedbackLink]: 'https://apps.powerapps.com/play/804b66af-dce9-4aba-a6bd-490dac738459?tenantId=fd799da1-bfc1-4234-a91c-72b3a1cb9e26&RateProjectById=1',\r\n\r\n\r\n //*********ADVANCED SEARCH PAGE LABELS */\r\n [addFilter]: 'Add filter',\r\n [firstName]: 'First Name',\r\n [lastName]: 'Last Name',\r\n [cai]: 'CAI',\r\n [badgeNumber]: 'Badge Number',\r\n [networkId]: 'Network ID',\r\n [phone]: 'Phone',\r\n [email]: 'E-mail',\r\n [includeInactive]: 'Include Inactive',\r\n [supervisor]: 'Supervisor',\r\n [onRotation]: 'On Rotation',\r\n [offRotation]: 'Off Rotation',\r\n [positionName]: 'Title',\r\n [jobTitle]: 'Job Title',\r\n [employmentTypeCode]: 'Employment Category',\r\n [employmentStatusName]: 'Employment Status',\r\n [homeCompanyName]: 'Home Company',\r\n [wLBuildingCode]: 'Building',\r\n [wLAreaCode]: 'Area',\r\n [wlRoom]: 'Room/Workspace',\r\n [group]: 'Group',\r\n [department]: 'Department',\r\n [division]: 'Division',\r\n [costCenterName]: 'Cost Center',\r\n [rotationCode]: 'Rotation',\r\n [search]: 'Search',\r\n [clear]: 'Clear',\r\n [showFilters]: 'Show filters',\r\n [hideFilters]: 'Hide filters',\r\n [saveFilters]: 'Save Filters',\r\n [excelExport]: 'Export to Excel',\r\n [selectOption]: 'Select an option',\r\n [includeAFE]: 'Include AFEs',\r\n [apply]: 'Apply',\r\n [reset]: 'Reset',\r\n [costCenterHierarchy]: 'Cost Center Hierarchy',\r\n [includeHomeCCOnly]: 'Employee\\'s Home CCs Only',\r\n [allActive]: 'Employee/Contractor',\r\n [contractor]: 'Contractor',\r\n [employee]: 'Employee',\r\n [exEmployees]: 'Ex-employees',\r\n [searchType]: 'Employment Type',\r\n [employmentStatusName]: 'Employment Status',\r\n [all]: 'All',\r\n [isActive]: 'Active Only',\r\n [save]: 'Save',\r\n [rotationStatus]: 'Rotation Status',\r\n [selectFilter]: 'Add Filter',\r\n [employeeDetails]: 'Employee Details',\r\n [organization]: 'Organization',\r\n [location]: 'Location',\r\n [accommodationAreaDescription]: 'Accommodation Area',\r\n [accommodationBuildingDescription]: 'Accommodation Building',\r\n [accommodationRoom]:'Accommodation room',\r\n\r\n //**********RESULTS GRID LABELS *********/\r\n [fullName]: 'Full Name',\r\n [position]: 'Title',\r\n [mail]: 'E-Mail',\r\n [id]: 'ID',\r\n [badge]: 'TCO ID',\r\n [loading]: 'Loading...',\r\n [status]: 'Status',\r\n [rotationFrom]: 'Rotation From',\r\n [rotationThrough]: 'Rotation Thru',\r\n [housing]: 'Housing',\r\n [housingFieldAccessor]: 'housing',\r\n\r\n\r\n //*********DETAILS PAGE LABELS*********/\r\n [emptyPhotoText]: 'Warning! In compliance with TCO Data Privacy Policies and the Legislation of the Republic of Kazakhstan, the photos were removed.',\r\n [workLocation]: 'Work Location',\r\n [area]: 'Area',\r\n [facility]: 'Facility',\r\n [building]: 'Building',\r\n [room]: 'Room/Workspace',\r\n [companyAndCC]: 'Company & Cost Center',\r\n [homeCompany]: 'Home Company',\r\n [ccDescription]: 'Cost Center Description',\r\n [ccCode]: 'Cost Center Code',\r\n [jobRelatedInfo]: 'Employment information',\r\n [userID]: 'CAI',\r\n [employmentStatus]: 'Employment Status',\r\n [employmentType]: 'Employment Category',\r\n [employmentStartDate]: 'TCO Start Date',\r\n [employmentEndDate]: 'TCO End Date',\r\n [timeInTCO]: 'Time in TCO',\r\n [rotations]: 'Rotations',\r\n [rotationType]: 'Rotation Type',\r\n [currentRotation]: 'Current Rotation',\r\n [nextRotation]: 'Next Rotation',\r\n [contactInfo]: 'Contact Information',\r\n [personalEmail]: 'Individual email',\r\n [sharedEmail]: 'Shared Email',\r\n [preferred]: 'Preferred Email',\r\n [related]: 'Org Structure',\r\n [lineSupervisor]: 'Line Supervisor',\r\n [mobilePhone]: 'Mobile Phone',\r\n [backToBack]: 'Back To Back',\r\n [rotation]: 'Rotation',\r\n [primaryPhone]: 'Primary Phone',\r\n [otherPrimaryPhone]: 'Other Primary Phone',\r\n [otherPrimaryPhone2]: 'Other Primary Phone 2',\r\n [secondaryPhone]: 'Secondary Phone',\r\n [mobileNumber]: 'Mobile Number',\r\n [accommodationPhone]: 'Accommodation Phone',\r\n [pagerNumber]: 'Pager Number',\r\n [faxNumber]: 'Fax Number',\r\n [modemNumber]: 'Modem Number',\r\n [directSubordinates]: 'Direct Reports',\r\n [showSubordinates]: 'Show',\r\n [hideSubordinates]: 'Hide',\r\n [noSubordinates]: 'No Reports found',\r\n [ccPrimaryOwner]: 'Primary owner',\r\n [ccSecondaryOwner]: 'Secondary owner',\r\n [costCenterOwners]: 'Cost Center Owner(s)',\r\n [notFound]: 'Not Found',\r\n [close]: 'Close',\r\n [selectPreferredEmail]: 'Please select your preferred email',\r\n [emailUpdateSuccess]: 'Your email has been updated. Changes will be visible the next day',\r\n [emailUpdateFailure]: 'Update failed. Please try again later',\r\n [infoUpdateInstruction]: 'Personal data update instruction',\r\n [infoUpdateInstructionWpHeader]: 'Information update',\r\n\r\n //********ERROR MESSAGES *********//\r\n [notSupportedBrowser]: 'This browser is not supported',\r\n [useEdgeBrowser]: 'Please use Microsoft Edge',\r\n [emptyField]: 'This field is required',\r\n [formatError]: 'This field doesn\\'t match the pattern',\r\n [optionIsNotSelected]: 'Please select an option!',\r\n [emptyFieldNotification]: 'Please fill in at least one field',\r\n [apiErrorNotification]: 'Server responded with error message, please try again',\r\n\r\n [authInProgress]: 'Authorization in progress...',\r\n\r\n dropdowns: {\r\n 'nodata': 'No data found.',\r\n 'clear': 'clear'\r\n },\r\n grid: {\r\n 'noRecords': 'No records available.',\r\n 'pagerInfo': '{1} of {2} items'\r\n },\r\n\r\n //**********FIELD ACCESSORS *********/\r\n [fullNameAccessorField]: 'englishName',\r\n [fullNameFieldAccessor]: 'englishName',\r\n [positionFieldAccessor]: 'positionName',\r\n [phoneFieldAccessor]: 'primaryPhoneNumber',\r\n [emailFieldAccessor]: 'preferredEmailAddress',\r\n [badgeFieldAccessor]: 'badgeNumber',\r\n [networkIdFieldAccessor]: 'networkId',\r\n [statusFieldAccessor]: 'employmentStatusCode',\r\n [rotationStatusFieldAccessor]: 'rotationStatus',\r\n [employmentStatusNameFieldAccessor]: 'employmentStatusName',\r\n [rotationFromFieldAccessor]: 'rotationArrivalDate',\r\n [backToBackFieldAccessor]: 'back2BackEnglishName',\r\n [rotationThroughFieldAccessor]: 'rotationDepartureDate',\r\n [ccCodeFieldAccessor]: 'costCenterCode',\r\n [ccNameFieldAccessor]: 'costCenterName',\r\n [supervisorFieldAccessor]: 'supervisorEnglishName',\r\n [workLocationFieldAccessor]: 'workLocation',\r\n [divisionFieldAccessor]: 'division',\r\n [groupFieldAccessor]: 'group',\r\n [departmentFieldAccessor]: 'department',\r\n [ccPrimaryOwnerName]: 'primaryOwnerEnglishName',\r\n [ccSecondaryOwnerName]: 'secondaryOwnerEnglishName',\r\n [searchTypeFieldAccessor]: 'searchType',\r\n [costCenterOwnersFieldAccessor]: 'costCenterOwners',\r\n [homeCompanyFieldAccessor]: 'homeCompanyName',\r\n [employmentStartDateFieldAccessor]: 'employmentStartDate',\r\n [employmentEndDateFieldAccessor]: 'employmentEndDate',\r\n [caiFieldAccessor]: 'cai',\r\n [x]: 'Ex-employee',\r\n [e]: 'Employee',\r\n [s]: 'Contractor',\r\n [off_Rotation]: 'No',\r\n [on_Rotation]: 'Yes',\r\n [columnsLabel]: 'Columns',\r\n [searchButtonText]: 'Search'\r\n },\r\n 'ru': {\r\n\r\n [currentLanguage]: 'ru',\r\n //********* HEADER LABELS *************/\r\n [advancedSearchLink]: 'Расширенный поиск',\r\n [smartSearchLink]: 'Быстрый поиск',\r\n [mainHeader]: 'Справочник (сотрудников) ТШО',\r\n\r\n\r\n //********* FOOTER LABELS *************/\r\n [appVersion]: 'Версия: 1.3.0.0',\r\n [copyright]: '© 2020 Tengizchevroil',\r\n [contentContact]: 'Связаться с владельцем контента: ',\r\n [technicalContact]: 'Связаться с технической поддержкой: ',\r\n [serviceName]: 'Сервисное обслуживание Справочника ТШО',\r\n [helpDesk]: 'Служба техподдержки ТШО ИТ',\r\n [emptyFieldNotification]: 'Пожалуйста заполните хотя бы одно поле',\r\n [apiErrorNotification]: 'Ошибка сервера. Пожалуйста попробуйте еще раз',\r\n\r\n [authInProgress]: 'Авторизация в прогрессе...',\r\n\r\n\r\n //*********SMART SEARCH PAGE LABELS *************/\r\n [smartSearchInputPlaceholder]: 'Пожалуйста введите имя, email, Сетевой ID, номер телефона или пропуска',\r\n [validationErrorMessage]: 'Поиск содержит невалидные символ(ы)',\r\n [tryAdvancedSearchLink]: 'Попробуйте Расширенный поиск',\r\n [emergencyContactAtyrau]: 'Экстренный контакт Атырау',\r\n [emergencyContactTengiz]: 'Экстренный контакт Тенгиз',\r\n [facilityManagementAtyrau]: 'Управление недвижимостью Атырау',\r\n [tengizFMServicesCallCenter]: 'Колл-центр Технического обслуживания и Сервисных услуг Тенгиз',\r\n [chevronWp]: 'Система управления идентификацией Chevron',\r\n [informationUpdateWp]: 'Обновление информации в Справочнике (сотрудников) ТШО',\r\n [informationUpdateWpLink]: 'https://chevron.sharepoint.com/sites/TCODigital/DIPlatform/SRChapter/WEProductLine/SitePages/TCO-White-Pages-information-update-RU.aspx',\r\n [submitFeedback]: 'Оставить отзыв',\r\n [submitFeedbackLink]: 'https://apps.powerapps.com/play/804b66af-dce9-4aba-a6bd-490dac738459?tenantId=fd799da1-bfc1-4234-a91c-72b3a1cb9e26&RateProjectById=1',\r\n\r\n\r\n //*********ADVANCED SEARCH PAGE LABELS ********/\r\n [addFilter]: 'Выберите фильтр',\r\n [firstName]: 'Имя',\r\n [lastName]: 'Фамилия',\r\n [cai]: 'CAI',\r\n [badgeNumber]: 'Номер пропуска',\r\n [networkId]: 'Сетевой ID',\r\n [phone]: 'Телефон',\r\n [email]: 'Электронная почта',\r\n [includeInactive]: 'Включая неработающих',\r\n [supervisor]: 'Начальник',\r\n [onRotation]: 'На вахте',\r\n [offRotation]: 'Вне вахты',\r\n [positionName]: 'Позиция',\r\n [jobTitle]: 'Позиция',\r\n [employmentTypeCode]: 'Категория занятости',\r\n [homeCompanyName]: 'Основная компания',\r\n [wLBuildingCode]: 'Здание',\r\n [wLAreaCode]: 'Участок',\r\n [wlRoom]: 'Рабочее место',\r\n [group]: 'Группа',\r\n [department]: 'Отдел',\r\n [division]: 'Подразделение',\r\n [costCenterName]: 'Центр затрат',\r\n [rotationCode]: 'Смена',\r\n [search]: 'Поиск',\r\n [clear]: 'Очистить',\r\n [saveFilters]: 'Сохранить фильтры',\r\n [excelExport]: 'Выгрузка в Excel',\r\n [showFilters]: 'Показывать фильтры',\r\n [hideFilters]: 'Скрыть фильтры',\r\n [selectOption]: 'Выберите параметр',\r\n [includeAFE]: 'Включить AFE',\r\n [apply]: 'Применить',\r\n [reset]: 'Сбросить',\r\n [costCenterHierarchy]: 'Иерархия Центров затрат',\r\n [includeHomeCCOnly]: 'Employee\\'s Home CCs Only',\r\n [allActive]: 'Работник/Контрактник',\r\n [contractor]: 'Контрактник',\r\n [employee]: 'Работник',\r\n [exEmployees]: 'Бывший работник',\r\n [searchType]: 'Тип занятости',\r\n [all]: 'Все',\r\n [isActive]: 'Только Активные',\r\n [save]: 'Сохранить',\r\n [rotationStatus]: 'Статус Вахты',\r\n [selectFilter]: 'Выберите Фильтр',\r\n [employeeDetails]: 'Детали работника',\r\n [organization]: 'Организция',\r\n [location]: 'Локация',\r\n [accommodationAreaDescription]: 'Участок Размещения',\r\n [accommodationBuildingDescription]: 'Здание Размещения',\r\n [accommodationRoom]:'Комната Размещения',\r\n\r\n //**********RESULTS GRID LABELS *********/\r\n [fullName]: 'ФИО',\r\n [position]: 'Позиция',\r\n [mail]: 'Электронная почта',\r\n [id]: 'ID',\r\n [badge]: 'TCO ID',\r\n [loading]: 'Загрузка...',\r\n [status]: 'Статус',\r\n [rotationFrom]: 'Начало вахты',\r\n [rotationThrough]: 'Конец вахты',\r\n [housing]: 'Размещение',\r\n [housingFieldAccessor]: 'housing',\r\n\r\n\r\n\r\n //*********DETAILS PAGE LABELS *********/\r\n [emptyPhotoText]: 'Предупреждение: В соответствии с Политикой конфиденциальности данных ТШО и Законодательством Республики Казахстан фотографии удалены.',\r\n [workLocation]: 'Местоположение работы',\r\n [area]: 'Участок',\r\n [facility]: 'Объект',\r\n [building]: 'Здание',\r\n [room]: 'Рабочее место',\r\n [companyAndCC]: 'Компания & Центр Затрат',\r\n [homeCompany]: 'Основная компания',\r\n [ccDescription]: 'Описание Центра Затрат',\r\n [ccCode]: 'Код Центра Затрат',\r\n [jobRelatedInfo]: 'Информация о занятости',\r\n [userID]: 'CAI',\r\n [employmentStatus]: 'Трудовой статус',\r\n [employmentType]: 'Категоря занятости',\r\n [employmentStartDate]: 'Начало работы в ТШО',\r\n [employmentEndDate]: 'Окончание работы в ТШО',\r\n [timeInTCO]: 'Время в ТШО',\r\n [rotations]: 'Вахты',\r\n [rotationType]: 'Тип вахты',\r\n [currentRotation]: 'Текущая вахта',\r\n [nextRotation]: 'Следующая вахта',\r\n [contactInfo]: 'Контактные данные',\r\n [personalEmail]: 'Личная электронная почта',\r\n [sharedEmail]: 'Общая электронная почта',\r\n [preferred]: 'Предпочтительная электронная почта',\r\n [related]: 'Орг структура',\r\n [lineSupervisor]: 'Прямой руководитель',\r\n [mobilePhone]: 'Мобильный телефон',\r\n [backToBack]: 'Сменщик',\r\n [rotation]: 'Смена',\r\n [primaryPhone]: 'Основной телефон',\r\n [otherPrimaryPhone]: 'Другой Основной телефон',\r\n [otherPrimaryPhone2]: 'Другой Основной телефон 2',\r\n [secondaryPhone]: 'Второстепенный телефон',\r\n [mobileNumber]: 'Мобильный номер',\r\n [accommodationPhone]: 'Телефон по месту размещения',\r\n [pagerNumber]: 'Номер пейджера',\r\n [faxNumber]: 'Номер факса',\r\n [modemNumber]: 'Номер модема',\r\n [directSubordinates]: 'Прямые подчиненные',\r\n [showSubordinates]: 'Показать',\r\n [hideSubordinates]: 'Скрыть',\r\n [noSubordinates]: 'Прямых подчиненных не найдено',\r\n [ccPrimaryOwner]: 'Основной владелец',\r\n [ccSecondaryOwner]: 'Вторичный владелец',\r\n [costCenterOwners]: 'Владельцы Центра Затрат',\r\n [notFound]: 'Не найдено',\r\n [close]: 'Закрыть',\r\n [selectPreferredEmail]: 'Пожалуйста, выберите основную почту',\r\n [emailUpdateSuccess]: 'Ваша почта обновлена. Изменения будут видны на следующий день',\r\n [emailUpdateFailure]: 'Ошибка при обновлений. Пожалуйста, повторите позже',\r\n [infoUpdateInstruction]: 'Инструкция по обновлению персональных данных',\r\n [infoUpdateInstructionWpHeader]: 'Обновление данных',\r\n\r\n //********ERROR MESSAGES *********//\r\n [notSupportedBrowser]: 'Этот браузер не поддерживается',\r\n [useEdgeBrowser]: 'Пожалуйста, откройте сайт в браузере Microsoft Edge',\r\n [emptyField]: 'Поле не может быть пустым',\r\n [formatError]: 'Не соответствует шаблону',\r\n [optionIsNotSelected]: 'Пожалуйста, выберите опцию!',\r\n dropdowns: {\r\n 'nodata': 'Не найдено.',\r\n 'clear': 'очистить'\r\n },\r\n grid: {\r\n 'noRecords': 'Не найдено.',\r\n 'pagerInfo': '{1} из {2} результатов'\r\n },\r\n\r\n //**********RESULTS GRID FIELD ACCESSORS *********/\r\n [fullNameAccessorField]: 'cyrllicName',\r\n [fullNameFieldAccessor]: 'cyrllicName',\r\n [positionFieldAccessor]: 'positionName',\r\n [phoneFieldAccessor]: 'primaryPhoneNumber',\r\n [emailFieldAccessor]: 'preferredEmailAddress',\r\n [badgeFieldAccessor]: 'badgeNumber',\r\n [networkIdFieldAccessor]: 'networkId',\r\n [statusFieldAccessor]: 'employmentStatusCode',\r\n [rotationStatusFieldAccessor]: 'rotationStatusRu',\r\n [employmentStatusNameFieldAccessor]: 'employmentStatusName',\r\n [rotationFromFieldAccessor]: 'rotationArrivalDateRu',\r\n [rotationThroughFieldAccessor]: 'rotationDepartureDateRu',\r\n [backToBackFieldAccessor]: 'back2BackCyrllicName',\r\n [ccCodeFieldAccessor]: 'costCenterCode',\r\n [ccNameFieldAccessor]: 'costCenterName',\r\n [supervisorFieldAccessor]: 'supervisorCyrllicName',\r\n [workLocationFieldAccessor]: 'workLocation',\r\n [divisionFieldAccessor]: 'division',\r\n [groupFieldAccessor]: 'group',\r\n [departmentFieldAccessor]: 'department',\r\n [ccPrimaryOwnerName]: 'primaryOwnerCyrllicName',\r\n [ccSecondaryOwnerName]: 'secondaryOwnerCyrllicName',\r\n [searchTypeFieldAccessor]: 'searchTypeRu',\r\n [costCenterOwnersFieldAccessor]: 'costCenterOwnersRu',\r\n [homeCompanyFieldAccessor]: 'homeCompanyName',\r\n [employmentStartDateFieldAccessor]: 'employmentStartDateRu',\r\n [employmentEndDateFieldAccessor]: 'employmentEndDateRu',\r\n [caiFieldAccessor]: 'cai',\r\n [x]: 'Бывший работник',\r\n [e]: 'Работник',\r\n [s]: 'Контрактор',\r\n [off_Rotation]: 'Нет',\r\n [on_Rotation]: 'Да',\r\n [columnsLabel]: 'Колонки',\r\n [searchButtonText]: 'Поиск'\r\n }\r\n};\r\n","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { smartSearchInputPlaceholder, validationErrorMessage, emptyField, searchButtonText } from '../../LocalizationMessages';\r\nimport { Input } from '@progress/kendo-react-inputs';\r\n\r\n\r\nclass SmartSearchControls extends React.Component {\r\n\r\n validationPattern = `^[^#$%&*|?:;/<>{}()[!~'=^\\`\\\\]\\\\\\\\]+$`;\r\n render() {\r\n const localizationService = this.context.localization;\r\n let isEmpty = this.props.inputValue.length === 0;\r\n let errorMessage = isEmpty ? localizationService.toLanguageString(emptyField, '')\r\n : localizationService.toLanguageString(validationErrorMessage, '');\r\n let placeholder = localizationService.toLanguageString(smartSearchInputPlaceholder, '');\r\n let searchButton = localizationService.toLanguageString(searchButtonText, '');\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n this.props.onInputChange(e.target.value)}\r\n pattern={this.validationPattern}\r\n validityStyles={false}\r\n name={'searchValue'}\r\n minLength={1}\r\n required={true}\r\n validationMessage={errorMessage}\r\n autoFocus\r\n type='search'\r\n />\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n )\r\n }\r\n}\r\nregisterForLocalization(SmartSearchControls);\r\nexport default SmartSearchControls;\r\n\r\n","import {\r\n fullName,\r\n fullNameFieldAccessor,\r\n position,\r\n positionFieldAccessor,\r\n phone,\r\n phoneFieldAccessor,\r\n email,\r\n emailFieldAccessor,\r\n badge,\r\n badgeFieldAccessor,\r\n networkId,\r\n networkIdFieldAccessor,\r\n searchType,\r\n searchTypeFieldAccessor,\r\n onRotation,\r\n rotationStatusFieldAccessor,\r\n employmentStatusNameFieldAccessor,\r\n employmentStatusName,\r\n rotationFrom,\r\n rotationFromFieldAccessor,\r\n backToBack,\r\n backToBackFieldAccessor,\r\n rotationThrough,\r\n rotationThroughFieldAccessor,\r\n ccCode,\r\n ccCodeFieldAccessor,\r\n costCenterName,\r\n ccNameFieldAccessor,\r\n workLocation,\r\n workLocationFieldAccessor,\r\n division,\r\n divisionFieldAccessor,\r\n group,\r\n groupFieldAccessor,\r\n department,\r\n departmentFieldAccessor,\r\n costCenterOwners,\r\n costCenterOwnersFieldAccessor,\r\n supervisor,\r\n supervisorFieldAccessor,\r\n homeCompany,\r\n homeCompanyFieldAccessor,\r\n housing,\r\n housingFieldAccessor,\r\n employmentStartDate,\r\n employmentStartDateFieldAccessor,\r\n employmentEndDate,\r\n employmentEndDateFieldAccessor,\r\n cai,\r\n caiFieldAccessor\r\n} from '../../LocalizationMessages';\r\nconst columns = [\r\n {\r\n title: fullName,\r\n field: fullNameFieldAccessor,\r\n show: true,\r\n sortable: true,\r\n width: 280,\r\n minResizableWidth: 280,\r\n orderIndex: 0,\r\n type: 'personLink'\r\n },\r\n {\r\n title: position,\r\n field: positionFieldAccessor,\r\n show: true,\r\n sortable: true,\r\n width: 220,\r\n minResizableWidth: 220,\r\n orderIndex: 1,\r\n type: 'text'\r\n },\r\n {\r\n title: phone,\r\n field: phoneFieldAccessor,\r\n show: true,\r\n sortable: true,\r\n width: 90,\r\n minResizableWidth: 90,\r\n orderIndex: 2,\r\n type: 'text'\r\n },\r\n {\r\n title: email,\r\n field: emailFieldAccessor,\r\n show: true,\r\n sortable: true,\r\n width: 220,\r\n minResizableWidth: 220,\r\n orderIndex: 3,\r\n type: 'email'\r\n },\r\n {\r\n title: networkId,\r\n field: networkIdFieldAccessor,\r\n show: true,\r\n sortable: true,\r\n width: 100,\r\n minResizableWidth: 100,\r\n orderIndex: 4,\r\n type: 'text'\r\n },\r\n {\r\n title: badge,\r\n field: badgeFieldAccessor,\r\n show: false,\r\n sortable: true,\r\n width: 90,\r\n minResizableWidth: 90,\r\n orderIndex: 5,\r\n type: 'text'\r\n },\r\n {\r\n title: ccCode,\r\n field: ccCodeFieldAccessor,\r\n show: false,\r\n sortable: true,\r\n width: 151,\r\n minResizableWidth: 151,\r\n orderIndex: 6,\r\n type: 'text'\r\n },\r\n {\r\n title: costCenterName,\r\n field: ccNameFieldAccessor,\r\n show: false,\r\n sortable: true,\r\n width: 280,\r\n minResizableWidth: 220,\r\n orderIndex: 7,\r\n type: 'text'\r\n },\r\n {\r\n title: costCenterOwners,\r\n field: costCenterOwnersFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 300,\r\n minResizableWidth: 300,\r\n orderIndex: 8,\r\n type: 'costCenterOwner'\r\n },\r\n {\r\n title: supervisor,\r\n field: supervisorFieldAccessor,\r\n show: true,\r\n sortable:true,\r\n width: 220,\r\n minResizableWidth: 220,\r\n orderIndex:9,\r\n type: 'personLink'\r\n },\r\n {\r\n title: workLocation,\r\n field: workLocationFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 150,\r\n minResizableWidth: 120,\r\n orderIndex: 10,\r\n type: 'text'\r\n },\r\n {\r\n title: onRotation,\r\n field: rotationStatusFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 120,\r\n minResizableWidth: 120,\r\n orderIndex: 11,\r\n type: 'text'\r\n },\r\n {\r\n title: employmentStatusName,\r\n field: employmentStatusNameFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 120,\r\n minResizableWidth: 120,\r\n orderIndex: 11,\r\n type: 'text'\r\n },\r\n {\r\n title: backToBack,\r\n field: backToBackFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 220,\r\n minResizableWidth: 220,\r\n orderIndex: 12,\r\n type: 'personLink'\r\n },\r\n {\r\n title: rotationFrom,\r\n field: rotationFromFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 120,\r\n minResizableWidth: 120,\r\n orderIndex: 13,\r\n type: 'text'\r\n },\r\n {\r\n title: rotationThrough,\r\n field: rotationThroughFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 120,\r\n minResizableWidth: 120,\r\n orderIndex: 14,\r\n type: 'text'\r\n },\r\n {\r\n title: division,\r\n field: divisionFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 190,\r\n minResizableWidth: 190,\r\n orderIndex: 15,\r\n type: 'text'\r\n },\r\n {\r\n title: group,\r\n field: groupFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 220,\r\n minResizableWidth: 220,\r\n orderIndex: 16,\r\n type: 'text'\r\n },\r\n {\r\n title: department,\r\n field: departmentFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 220,\r\n minResizableWidth: 220,\r\n orderIndex: 17,\r\n type: 'text'\r\n },\r\n {\r\n title: searchType,\r\n field: searchTypeFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 120,\r\n minResizableWidth: 120,\r\n orderIndex: 18,\r\n type: 'text'\r\n },\r\n {\r\n title: homeCompany,\r\n field: homeCompanyFieldAccessor,\r\n show: false,\r\n sortable: true,\r\n width: 220,\r\n minResizableWidth: 220,\r\n orderIndex: 19,\r\n type: 'text'\r\n },\r\n {\r\n title: cai,\r\n field: caiFieldAccessor,\r\n show: false,\r\n sortable: true,\r\n width: 100,\r\n minResizableWidth: 100,\r\n orderIndex: 20,\r\n type: 'text'\r\n },\r\n {\r\n title: employmentStartDate,\r\n field: employmentStartDateFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 120,\r\n minResizableWidth: 120,\r\n orderIndex: 21,\r\n type: 'text'\r\n },\r\n {\r\n title: employmentEndDate,\r\n field: employmentEndDateFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 120,\r\n minResizableWidth: 120,\r\n orderIndex: 22,\r\n type: 'text'\r\n },\r\n {\r\n title: housing,\r\n field: housingFieldAccessor,\r\n show: false,\r\n sortable: false,\r\n width: 220,\r\n minResizableWidth: 220,\r\n orderIndex: 20,\r\n type: 'text'\r\n },\r\n];\r\nexport default columns;\r\nexport const COLUMNS_VERSION = '73';\r\n\r\n\r\n","import React from 'react';\r\nimport { GridColumnMenuItemGroup, GridColumnMenuItem, GridColumnMenuItemContent} from '@progress/kendo-react-grid';\r\nimport {save, reset, columnsLabel} from '../../LocalizationMessages';\r\nimport columns from './columns';\r\nexport default class CustomColumnMenu extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n columns: this.props.columns,\r\n columnsExpanded: true,\r\n filterExpanded: true\r\n };\r\n }\r\n\r\n onToggleColumn = (id) => {\r\n this.setState({\r\n columns: this.state.columns.map((column, idx) => {\r\n return idx === id ? { ...column, show: !column.show } : column;\r\n })\r\n });\r\n }\r\n\r\n onReset = (event) => {\r\n event.preventDefault();\r\n this.setState({ columns: columns }, () => this.onSubmit());\r\n }\r\n\r\n onSubmit = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n this.props.onColumnsSubmit(this.state.columns);\r\n if (this.props.onCloseMenu) {\r\n this.props.onCloseMenu();\r\n }\r\n }\r\n\r\n onFilterExpandChange = (value) => {\r\n this.setState({\r\n filterExpanded: value,\r\n columnsExpanded: value ? false : this.state.columnsExpanded\r\n });\r\n }\r\n\r\n render() {\r\n const oneVisibleColumn = this.state.columns.filter(c => c.show).length === 1;\r\n const localizationService = this.props.localizationService;\r\n return (\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {this.state.columns.map((column, idx) =>\r\n (\r\n
\r\n \r\n { this.onToggleColumn(idx); }}\r\n />\r\n \r\n {localizationService.toLanguageString(column.title, '')}\r\n \r\n \r\n
\r\n )\r\n )}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import $ from 'jquery';\r\nimport {\r\n lineSupervisor,\r\n backToBack,\r\n rotation,\r\n currentLanguage,\r\n location,\r\n phone,\r\n email,\r\n jobTitle\r\n} from '../../LocalizationMessages';\r\nexport function isStringEmpty(inputValue) {\r\n if (typeof inputValue === 'string' || inputValue instanceof String) {\r\n return inputValue.trim().length === 0;\r\n }\r\n return true;\r\n}\r\n\r\nexport function isSelectionEmpty() {\r\n let selectedText = window.getSelection().toString();\r\n return selectedText.length === 0;\r\n}\r\n\r\nexport function openDetailsPage(userId) {\r\n let detailsUrl = `/details/${userId}`;\r\n window.open(detailsUrl, '_blank');\r\n}\r\n\r\n\r\nexport function TryParseInt(str, defaultValue) {\r\n var retValue = defaultValue;\r\n if (!nullOrUndefined(str) && (typeof str === 'string')) {\r\n if (str.length > 0) {\r\n if (!isNaN(str)) {\r\n retValue = parseInt(str);\r\n }\r\n }\r\n }\r\n return retValue;\r\n}\r\n\r\nexport function isNullOrWhitespace(input) {\r\n\r\n if (typeof input === 'undefined' || input === null) return true;\r\n\r\n return input.replace(/\\s/g, '').length < 1;\r\n}\r\n\r\nexport function formatWorkLocation(location) {\r\n if (!location) {\r\n return null;\r\n }\r\n\r\n let workLocationStr = '';\r\n\r\n workLocationStr += appendEndignSlash(location.facility.name);\r\n workLocationStr += appendEndignSlash(location.area.name);\r\n workLocationStr += appendEndignSlash(location.building.name);\r\n workLocationStr += location.room ? location.room : '';\r\n\r\n return workLocationStr;\r\n}\r\n\r\nexport function appendEndignSlash(value) {\r\n if (isNullOrWhitespace(value)) {\r\n return '';\r\n }\r\n return value + '/';\r\n}\r\nexport function normalizePhoneData(phones) {\r\n let resultList = [];\r\n if (!phones) {\r\n return resultList;\r\n }\r\n\r\n phones.forEach(phone => {\r\n let code = phone.typeCode;\r\n let number = getFormattedPhone(phone.number);\r\n switch (code) {\r\n case '1':\r\n resultList.push({ order: 1, type: 'primaryPhone', number: number });\r\n break;\r\n case '2':\r\n resultList.push({ order: 2, type: 'otherPrimaryPhone', number: number });\r\n break;\r\n case '1001':\r\n resultList.push({ order: 3, type: 'otherPrimaryPhone2', number: number });\r\n break;\r\n case '3':\r\n resultList.push({ order: 4, type: 'secondaryPhone', number: number });\r\n break;\r\n case '1061':\r\n resultList.push({ order: 5, type: 'mobileNumber', number: number });\r\n break;\r\n case '1041':\r\n resultList.push({ order: 6, type: 'accommodationPhone', number: number });\r\n break;\r\n case '4':\r\n resultList.push({ order: 7, type: 'pagerNumber', number: number });\r\n break;\r\n case '5':\r\n resultList.push({ order: 8, type: 'faxNumber', number: number });\r\n break;\r\n case '6':\r\n resultList.push({ order: 9, type: 'modemNumber', number: number });\r\n break;\r\n default:\r\n break;\r\n }\r\n })\r\n resultList.sort(function (a, b) { return a.order - b.order })\r\n return resultList;\r\n}\r\n\r\nexport function getFormattedPhone(number) {\r\n if (isStringEmpty(number)) {\r\n return '';\r\n }\r\n let result = number.trim();\r\n\r\n if (result.length === 8) {\r\n result = result.substr(1);\r\n let part1 = result.substr(0, 3);\r\n let part2 = result.substr(3)\r\n result = `${part1}-${part2}`\r\n }\r\n if (result.length === 10) {\r\n let part1 = result.substr(0, 3);\r\n let part2 = result.substr(3, 3);\r\n let part3 = result.substr(6, 2);\r\n let part4 = result.substr(8, 2);\r\n result = `+7 (${part1}) ${part2}-${part3}-${part4}`\r\n }\r\n return result;\r\n}\r\n\r\nexport function calculatePercentage(amount, total) {\r\n if (amount < 1 || total < 1) {\r\n return 0;\r\n }\r\n let percent = amount / total * 100;\r\n return Math.floor(percent);\r\n}\r\n\r\nexport function isBrowserIE() {\r\n if (navigator.appName === \"Microsoft Internet Explorer\" ||\r\n !!(navigator.userAgent.match(/Trident/) ||\r\n navigator.userAgent.match(/rv:11/)) ||\r\n (typeof $.browser !== \"undefined\" && $.browser.msie === 1)) {\r\n return true;\r\n }\r\n return false;\r\n}\r\nexport function getNavigatorLanguage() {\r\n if (navigator.languages && navigator.languages.length) {\r\n return navigator.languages[0];\r\n } else {\r\n return navigator.userLanguage || navigator.language || navigator.browserLanguage || 'en-US';\r\n }\r\n}\r\n\r\nexport function nullOrUndefined(value) {\r\n return value === null || value === undefined;\r\n}\r\n\r\n\r\nexport function getFullPopupContent(personExtended, ls){\r\n personExtended = personExtended || {};\r\n let person = personExtended.person || {};\r\n let lang = ls.toLanguageString(currentLanguage, 'en');\r\n\r\n let position = (person.position || {}).name || '';\r\n let primaryEmail = getPrimarydEmail(personExtended.emails);\r\n let primaryPhone = getPrimaryPhone(personExtended.phones);\r\n\r\n const supervisor = personExtended.supervisor || {};\r\n let supervisorName = supervisor.cyrllicName || '';\r\n if (lang === 'en' || !supervisorName) {\r\n supervisorName = supervisor.englishName || '';\r\n }\r\n let showRotationInfo = hasRotation(personExtended);\r\n let hiddenStyle = showRotationInfo ? '' : 'd-none';\r\n\r\n const back2back = personExtended.back2Back || {};\r\n let backToBackName = back2back.cyrllicName || '';\r\n if (lang === 'en' || !supervisorName) {\r\n backToBackName = back2back.englishName || '';\r\n }\r\n\r\n let rotationStatusText = getRotaionStatusText(personExtended.rotations, lang)\r\n\r\n const workLocation = person.workLocation || {};\r\n var locationText = formatWorkLocation(workLocation);\r\n\r\n return `\r\n
\r\n

${ls.toLanguageString(jobTitle, '')}:

\r\n

${ls.toLanguageString(phone, '')}:

\r\n

${ls.toLanguageString(email, '')}:

\r\n

${ls.toLanguageString(location, '')}:

\r\n

${ls.toLanguageString(backToBack, '')}:

\r\n

${ls.toLanguageString(rotation, '')}:

\r\n

${ls.toLanguageString(lineSupervisor, '')}:

\r\n
\r\n
\r\n

 ${position}

\r\n

 ${primaryPhone}

\r\n

 ${primaryEmail}

\r\n

 ${locationText}

\r\n

 ${backToBackName}

\r\n

 ${rotationStatusText}

\r\n

 ${supervisorName}

\r\n
\r\n `\r\n}\r\n\r\nexport function getOnlyImagePopupContent(canonicalId){\r\n return `\r\n
\r\n
\r\n Loading\r\n
\r\n
\r\n
\r\n
\r\n `\r\n}\r\n\r\nfunction getRotaionStatusText(rotations, lang) {\r\n if (!rotations || rotations.length === 0) {\r\n return '';\r\n }\r\n if (lang === 'en') {\r\n return getRotationStatusString(rotations[0]);\r\n }\r\n return getRotationStatusStringRu(rotations[0]);\r\n}\r\n\r\nfunction hasRotation(personExtended) {\r\n if (!personExtended) {\r\n return false;\r\n }\r\n\r\n const { person, rotations } = personExtended;\r\n let empStatus = (person || {}).employmentStatusCode || 'INACTIVE';\r\n if (empStatus === 'INACTIVE') {\r\n return false;\r\n }\r\n let rotationCode = ((person || {}).rotation || {}).code || '';\r\n if (rotationCode === '5X2') {\r\n return false;\r\n }\r\n\r\n if ((rotations || []).length === 0) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n\r\nfunction getPrimaryPhone(phones) {\r\n if (!phones) {\r\n return '';\r\n }\r\n let primaryPones = phones.filter(phone => (phone.typeCode === '1'));\r\n if (primaryPones.length === 0) {\r\n return '';\r\n }\r\n let number = (primaryPones[0] || {}).number || '';\r\n return getFormattedPhone(number);\r\n}\r\n\r\nexport function clearPopupTimeout() {\r\n if (window.popupTimeout) {\r\n clearTimeout(window.popupTimeout);\r\n }\r\n}\r\n\r\nexport async function setAsyncTimeout(time){\r\n return new Promise(resolve => setTimeout(resolve, time));\r\n}\r\n\r\nfunction getRotationStatusStringRu(rotation) {\r\n const { statusName, arrivalDate, departureDate } = rotation;\r\n let parserArrivalDate = Date.parse(arrivalDate);\r\n let localeArrivalDate = new Date(parserArrivalDate).toLocaleDateString('ru');\r\n let parserDepartureDate = Date.parse(departureDate);\r\n let localeDepartureDate = new Date(parserDepartureDate).toLocaleDateString('ru');\r\n if (statusName === 'IN-HOUSE') {\r\n return `С ${localeArrivalDate} по ${localeDepartureDate}`;\r\n }\r\n return `Следующая с ${localeArrivalDate} по ${localeDepartureDate}`;\r\n}\r\nfunction getRotationStatusString(rotation) {\r\n const { statusName, arrivalDate, departureDate } = rotation;\r\n if (statusName === 'IN-HOUSE') {\r\n return `From ${arrivalDate} to ${departureDate}`;\r\n }\r\n return `Next from ${arrivalDate} to ${departureDate}`;\r\n}\r\n\r\nfunction getPrimarydEmail(emails) {\r\n if (!emails) {\r\n return '';\r\n }\r\n let personalEmails = emails.filter(e => (e.typeCode === 'P'));\r\n\r\n if (personalEmails.length === 0) {\r\n return '';\r\n }\r\n\r\n return (personalEmails[0] || {}).address || '';\r\n}","import React from 'react';\r\nimport {Grid, GridColumn as Column} from '@progress/kendo-react-grid';\r\nimport {registerForLocalization} from '@progress/kendo-react-intl';\r\nimport CustomColumnMenu from './customCoumnMenu';\r\nimport { isNullOrWhitespace} from './functions';\r\n\r\nconst ADJUST_PADDING = 4;\r\nconst COLUMN_MIN = 4;\r\n\r\nconst gridStyle = {position: 'absolute', top: '0px', bottom: '0px', right: '0px', left: '0px'};\r\n\r\nclass ResultsGrid extends React.Component {\r\n minGridWidth = 0;\r\n state = {\r\n setMinWidth: false,\r\n gridCurrent: 0\r\n }\r\n rowHeight = 36;\r\n\r\n shouldComponentUpdate(nextProps) {\r\n return this.props.gridUpdateCounter !== nextProps.gridUpdateCounter;\r\n }\r\n\r\n getLastColWidth(column) {\r\n if (column.type === 'text') {\r\n return undefined;\r\n }\r\n return column.width;\r\n }\r\n\r\n handleResize = () => {\r\n const {grid} = this;\r\n if (grid.offsetWidth === this.state.gridCurrent) {\r\n return;\r\n }\r\n let visibleColumns = this.props.columns.filter(c => c.show);\r\n let minGridWidth = 0;\r\n visibleColumns.map(item => minGridWidth += item.width);\r\n if (grid.offsetWidth < minGridWidth && !this.state.setMinWidth) {\r\n this.setState({\r\n setMinWidth: true\r\n },\r\n () => this.forceUpdate()\r\n );\r\n } else if (grid.offsetWidth > minGridWidth) {\r\n this.setState({\r\n gridCurrent: grid.offsetWidth,\r\n setMinWidth: false\r\n },\r\n () => this.forceUpdate()\r\n );\r\n }\r\n }\r\n\r\n setWidth = (minWidth) => {\r\n let visibleColumns = this.props.columns.filter(c => c.show);\r\n let minGridWidth = 0;\r\n visibleColumns.map(item => minGridWidth += item.width);\r\n let width;\r\n try {\r\n width = this.grid.offsetWidth < minGridWidth ? minWidth :\r\n minWidth + (this.state.gridCurrent - minGridWidth) / visibleColumns.length;\r\n } catch (err) {\r\n width = minWidth;\r\n }\r\n width = width < COLUMN_MIN ? width : width - ADJUST_PADDING;\r\n return width;\r\n }\r\n\r\n componentDidMount() {\r\n this.props.showExpandIcon();\r\n this.grid = document.querySelector('.k-grid');\r\n window.addEventListener('resize', this.handleResize);\r\n let visibleColumns = this.props.columns.filter(c => c.show);\r\n visibleColumns.map(item => this.minGridWidth += item.width);\r\n this.setState({\r\n gridCurrent: this.grid.offsetWidth,\r\n setMinWidth: this.grid.offsetWidth < this.minGridWidth\r\n },\r\n () => this.forceUpdate()\r\n );\r\n }\r\n\r\n componentDidUpdate() {\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.hideExpandIcon();\r\n }\r\n\r\n render() {\r\n const {data, metadata, sort, onRowClick, onSortChange, columns} = this.props;\r\n const localizationService = this.context.localization;\r\n let lang = localizationService.toLanguageString('currentLanguage', 'en');\r\n let visibleColumns = columns.filter(c => c.show);\r\n return (\r\n \r\n {\r\n visibleColumns.map((column, idx) =>\r\n\r\n ( \r\n }\r\n righBorder\r\n columnMenu={idx === 0 ?\r\n props =>\r\n \r\n : null\r\n }\r\n />)\r\n )\r\n }\r\n \r\n );\r\n }\r\n}\r\n\r\nregisterForLocalization(ResultsGrid);\r\nexport default ResultsGrid;\r\n\r\nclass CustomCell extends React.Component {\r\n\r\n getEmailCell = () => {\r\n const {dataItem, field} = this.props;\r\n let email = dataItem[field].toString();\r\n return (email === null) ? '' : ({email})\r\n }\r\n\r\n getCostCenterOwnersCell = () => {\r\n const {lang, dataItem} = this.props;\r\n\r\n let primaryOwnerName = dataItem.primaryOwnerEnglishName;\r\n let primaryOwnerId = dataItem.primaryOwnerCanonicalId;\r\n let secondaryOwnerName = dataItem.secondaryOwnerEnglishName;\r\n let secondaryOwnerId = dataItem.secondaryOwnerCanonicalId;\r\n if (lang === 'ru') {\r\n primaryOwnerName = dataItem.primaryOwnerCyrllicName;\r\n secondaryOwnerName = dataItem.secondaryOwnerCyrllicName;\r\n }\r\n\r\n let primaryOwnerElEn = this.getPersonLinkCell(primaryOwnerName, primaryOwnerId);\r\n let secondaryOwnerElEn = this.getPersonLinkCell(secondaryOwnerName, secondaryOwnerId);\r\n let delimiter = null;\r\n if (primaryOwnerElEn && secondaryOwnerElEn) {\r\n delimiter =

 / 

;\r\n }\r\n return {primaryOwnerElEn}{delimiter}{secondaryOwnerElEn};\r\n }\r\n\r\n getPersonLinkCell = (fullName, canonicalId) => {\r\n if (isNullOrWhitespace(fullName)) {\r\n return null;\r\n }\r\n let url = `/details/${canonicalId}`\r\n return (\r\n \r\n {fullName}\r\n \r\n )\r\n }\r\n\r\n buildPersonLinkCell = () => {\r\n const {dataItem, field} = this.props;\r\n let name = dataItem[field].toString();\r\n let canonicalId = '';\r\n switch (field) {\r\n case 'englishName':\r\n case 'cyrllicName':\r\n canonicalId = dataItem.canonicalId;\r\n break;\r\n case 'supervisorEnglishName':\r\n case 'supervisorCyrllicName':\r\n canonicalId = dataItem.supervisorCanonicalId;\r\n break;\r\n case 'back2BackEnglishName':\r\n case 'back2BackCyrllicName':\r\n canonicalId = dataItem.back2BackCanonicalId;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n return this.getPersonLinkCell(name, canonicalId);\r\n }\r\n\r\n getDataElement = () => {\r\n let cell;\r\n\r\n const {fieldType} = this.props;\r\n switch (fieldType) {\r\n case 'email':\r\n cell = this.getEmailCell();\r\n break;\r\n case 'personLink':\r\n cell = this.buildPersonLinkCell();\r\n break;\r\n case 'costCenterOwner':\r\n cell = this.getCostCenterOwnersCell();\r\n break;\r\n default:\r\n cell = '';\r\n break;\r\n }\r\n return cell;\r\n }\r\n\r\n render() {\r\n let cell = this.getDataElement();\r\n return (\r\n \r\n {cell}\r\n \r\n );\r\n }\r\n\r\n}","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nclass LoadingPanel extends React.Component {\r\n render() {\r\n const loadingPanel = (\r\n
\r\n Loading\r\n
\r\n
\r\n
\r\n );\r\n \r\n const gridContent = document && document.querySelector(`#${this.props.target}`);\r\n return gridContent ? ReactDOM.createPortal(loadingPanel, gridContent) : loadingPanel;\r\n }\r\n }\r\n\r\n export default LoadingPanel;","export const MIN_TABLE_SIZE = 10;\r\nexport const MAX_TABLE_SIZE = 20;\r\nexport const MAX_ROWS_TO_REQUEST = 100;\r\nexport const MIN_ROWS_TO_REQUEST = 50;\r\n\r\nexport const AUTOCOMPLETE_ROWS_TO_REQUEST = 7;\r\n\r\nexport const TIME_TO_DELAY_AFTER_TABLE_RESIZE = 100;\r\nexport const ON_INPUT_CHANGE_REQUEST_DELAY_TIME = 900;\r\n\r\nexport const DETAILS_PAGE_CACHE_SIZE = 70;\r\n\r\nconst host = window.location.origin;\r\n\r\nexport const CALConfig = {\r\n \"autoSignIn\": false,\r\n \"popupForLogin\": false,\r\n \"instance\": \"https://login.microsoftonline.com/\",\r\n \"tenantId\": \"fd799da1-bfc1-4234-a91c-72b3a1cb9e26\",\r\n \"clientId\": \"dae9af25-ed16-4c06-94c6-ede9a4c88619\",\r\n \"redirectUri\": host,\r\n \"oidcScopes\": [\"openid\", \"profile\", \"email\", \"offline_access\"],\r\n \"graphScopes\": [\"User.Read\", \"Directory.Read.All\"]\r\n}\r\n\r\nexport const CALConfigAutoSign = {\r\n \"autoSignIn\": true,\r\n \"popupForLogin\": false,\r\n \"instance\": \"https://login.microsoftonline.com/\",\r\n \"tenantId\": \"fd799da1-bfc1-4234-a91c-72b3a1cb9e26\",\r\n \"clientId\": \"dae9af25-ed16-4c06-94c6-ede9a4c88619\",\r\n \"redirectUri\": host,\r\n \"oidcScopes\": [\"openid\", \"profile\", \"email\", \"offline_access\"],\r\n \"graphScopes\": [\"User.Read\", \"Directory.Read.All\"]\r\n}\r\n","import React from 'react';\r\nimport { tryAdvancedSearchLink,notFound } from '../../LocalizationMessages';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\n\r\n\r\nconst linkPath = '/advanced-search';\r\nclass NotFoundHelperLink extends React.Component {\r\n onLinkClick = (event) => {\r\n event.preventDefault();\r\n this.props.changeUrl(linkPath, '');\r\n }\r\n\r\n render() {\r\n let hideLink = window.location.pathname === linkPath;\r\n const localizationService = this.context.localization;\r\n let notFoundText = localizationService.toLanguageString(notFound, '');\r\n let linkText = localizationService.toLanguageString(tryAdvancedSearchLink, '');\r\n return (
\r\n

{notFoundText}

\r\n {\r\n !hideLink && \r\n

\r\n this.onLinkClick(e)} href={linkPath}>{linkText}\r\n

\r\n }\r\n
)\r\n }\r\n}\r\n registerForLocalization(NotFoundHelperLink);\r\n export default NotFoundHelperLink;","import { UserAgentApplication, Logger, LogLevel } from \"msal\";\r\n\r\nexport const GRAPH_AUTH_PARAMS = {\r\n scopes: [\r\n \"openid\",\r\n \"profile\",\r\n \"User.Read\",\r\n \"offline_access\",\r\n \"email\",\r\n \"Directory.Read.All\"\r\n ],\r\n prompt: 'select_account'\r\n\r\n};\r\n\r\nconst host = window.location.origin;\r\n\r\nconst isProdEnv = (host === \"https://peoplesearch-prod.tengizchevroil.com\") ||\r\n (host === \"https://whitepages.tengizchevroil.com\") ||\r\n (host === \"https://peoplesearch-prod-cvx.azurewebsites.net\") ||\r\n (host === \"https://peoplesearch-stage.tengizchevroil.com\") ||\r\n (host === \"https://whitepages-stage.tengizchevroil.com\") ||\r\n (host === \"https://peoplesearch-stage-cvx.azurewebsites.net\");\r\n\r\nconst testAccomodationGroup = \"TWP-Test-AccomodationMembers\";\r\nconst prodAccomodationGroup = \"TWP-Prod-AccomodationMembers\";\r\n\r\nexport const ACCOMMODATION_GROUP = isProdEnv ? prodAccomodationGroup : testAccomodationGroup;\r\n\r\nconst WP_TEST_DEV_SCOPE = [\"https://whitepages-test.tengizchevroil.com/user_impersonation\"];\r\nconst WP_PROD_SCOPE = [\"https://whitepages-prod.tengizchevroil.com/user_impersonation\"];\r\n\r\nexport const WP_AUTH_PARAMS = {\r\n scopes: isProdEnv ? WP_PROD_SCOPE : WP_TEST_DEV_SCOPE,\r\n prompt: 'select_account'\r\n};\r\n\r\nconst AUTHORITY = \"https://login.microsoftonline.com/fd799da1-bfc1-4234-a91c-72b3a1cb9e26\";\r\n\r\nconst PROD_APP_ID = \"327423a8-e973-4290-938a-d3cb07a95995\";\r\nconst TEST_DEV_APP_ID = \"dae9af25-ed16-4c06-94c6-ede9a4c88619\";\r\nconst CLIENT_ID = isProdEnv ? PROD_APP_ID : TEST_DEV_APP_ID;\r\n\r\nexport const msalInstance = new UserAgentApplication({\r\n auth: {\r\n authority: AUTHORITY,\r\n clientId: CLIENT_ID,\r\n validateAuthority: true,\r\n tokenRefreshUri: host + \"/auth.html\"\r\n },\r\n cache: {\r\n cacheLocation: \"localStorage\",\r\n storeAuthStateInCookie: true\r\n },\r\n system: {\r\n navigateFrameWait: 500,\r\n logger: new Logger((logLevel, message) => {\r\n console.log(message);\r\n },\r\n {\r\n level: LogLevel.Verbose,\r\n piiLoggingEnabled: true\r\n }),\r\n telemetry: {\r\n applicationName: \"tco-white-pages\",\r\n applicationVersion: \"1.3.0\",\r\n telemetryEmitter: (events) => {\r\n console.log('Telemetry Events:', events);\r\n }\r\n }\r\n }\r\n});\r\n\r\nexport const requiresInteraction = errorMessage => {\r\n if (!errorMessage || !errorMessage.length) {\r\n return false;\r\n }\r\n\r\n return (\r\n errorMessage.indexOf(\"consent_required\") > -1 ||\r\n errorMessage.indexOf(\"interaction_required\") > -1 ||\r\n errorMessage.indexOf(\"login_required\") > -1\r\n );\r\n};\r\n\r\nexport const isIE = () => {\r\n const ua = window.navigator.userAgent;\r\n const msie = ua.indexOf(\"MSIE \") > -1;\r\n const msie11 = ua.indexOf(\"Trident/\") > -1;\r\n\r\n // If you as a developer are testing using Edge InPrivate mode, please add \"isEdge\" to the if check\r\n // const isEdge = ua.indexOf(\"Edge/\") > -1;\r\n\r\n return msie || msie11;\r\n};","import {\r\n msalInstance,\r\n requiresInteraction,\r\n GRAPH_AUTH_PARAMS,\r\n WP_AUTH_PARAMS,\r\n ACCOMMODATION_GROUP\r\n} from \"./auth-utils\";\r\n\r\nclass AuthPorvider {\r\n account = null;\r\n error = null;\r\n emailMessages = null;\r\n graphProfile = null;\r\n initialized = false;\r\n hasAccommodationRole = false;\r\n constructor() {\r\n this.initialize();\r\n this.gettingAuthToken = false;\r\n this.hasAccommodationRole = this.isInAccommodationGroup(this.getAccount());\r\n }\r\n\r\n isInAccommodationGroup(token) {\r\n let claims = (token || {}).idTokenClaims;\r\n if(!claims){\r\n return false;\r\n }\r\n\r\n let roles = claims.roles;\r\n if(roles && roles.length > 0){\r\n return roles.includes(ACCOMMODATION_GROUP);\r\n }\r\n return false;\r\n }\r\n\r\n showAccomodation() {\r\n return this.hasAccommodationRole;\r\n }\r\n \r\n async acquireTokenWP()\r\n {\r\n let token = await this.acquireToken(WP_AUTH_PARAMS);\r\n this.hasAccommodationRole = this.isInAccommodationGroup(token);\r\n const jkuHeaderValue = token.idTokenClaims?.jku;\r\n const jkuWhitelist = [\r\n 'https://whitepages-test.tengizchevroil.com/user_impersonation',\r\n 'https://whitepages-prod.tengizchevroil.com/user_impersonation'\r\n ];\r\n \r\n if (jkuHeaderValue !== undefined && !jkuWhitelist.includes(jkuHeaderValue)) {\r\n throw new Error('Invalid JKU URL');\r\n }\r\n return token\r\n }\r\n\r\n async acquireToken(tokenRequest) {\r\n if(!this.isUserSignedIn()){\r\n this.onSignIn();\r\n return;\r\n }\r\n\r\n if (this.gettingAuthToken) {\r\n var __this = this;\r\n await new Promise(resolve => {\r\n (function checkAsyncLogin() {\r\n if (!__this.gettingAuthToken) {\r\n resolve();\r\n } else {\r\n window.setTimeout(checkAsyncLogin, 500);\r\n }\r\n })();\r\n });\r\n }\r\n\r\n this.gettingAuthToken = true;\r\n\r\n try {\r\n return await this.acquireTokenInner(tokenRequest,0); \r\n } finally {\r\n this.gettingAuthToken = false;\r\n }\r\n }\r\n\r\n async acquireTokenInner(tokenRequest, retryCount){\r\n\r\n try {\r\n return await msalInstance.acquireTokenSilent(tokenRequest);\r\n }\r\n catch (err) {\r\n if (requiresInteraction(err.errorCode) || err.name === \"InteractionRequiredAuthError\") {\r\n try {\r\n msalInstance.acquireTokenRedirect(tokenRequest);\r\n }\r\n catch (err2) {\r\n if (retryCount < 3) {\r\n return await this.acquireTokenInner(tokenRequest,retryCount + 1);\r\n }\r\n else {\r\n console.error(\"There is an error getting the token through interaction\", err2);\r\n this.onSignIn();\r\n return null;\r\n }\r\n }\r\n }\r\n else {\r\n if (retryCount < 3) {\r\n console.error(\"Non-interaction error; on retry [\" + retryCount + \"]\", err);\r\n return await this.acquireTokenInner(tokenRequest,retryCount + 1);\r\n }\r\n else {\r\n console.error(\"There is a non-interaction-related error - too many retries \", err);\r\n this.onSignIn();\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n\r\n onSignIn() {\r\n return msalInstance.loginRedirect(\r\n GRAPH_AUTH_PARAMS\r\n );\r\n }\r\n\r\n onSignOut() {\r\n msalInstance.logout();\r\n }\r\n\r\n getAccount() {\r\n return msalInstance.getAccount();\r\n }\r\n\r\n isUserSignedIn(){\r\n try\r\n {\r\n let account = this.getAccount();\r\n let isCallback = msalInstance.isCallback(window.location.hash)\r\n return (account != null)\r\n &&\r\n (!isCallback);\r\n }\r\n catch (error)\r\n {\r\n console.log(error);\r\n // setState works as long as navigateToLoginRequestUrl: false\r\n this.error = error;\r\n console.log(`Error checking account to see if logged in: ${error}`);\r\n return false;\r\n }\r\n }\r\n\r\n async initialize() {\r\n if(this.initialized){\r\n return;\r\n }\r\n msalInstance.handleRedirectCallback(\r\n error => {\r\n if (error) {\r\n // setState works as long as navigateToLoginRequestUrl: false\r\n this.error = error;\r\n }\r\n }\r\n );\r\n\r\n const account = msalInstance.getAccount();\r\n if (account == null) {\r\n this.onSignIn();\r\n }\r\n\r\n this.account = account;\r\n await this.acquireTokenWP();\r\n this.initialized = true;\r\n }\r\n\r\n async fetchGraphProfile() {\r\n const tokenResponse = await this.acquireToken(GRAPH_AUTH_PARAMS);\r\n\r\n if (tokenResponse) {\r\n\r\n const graphProfile = this.graphClient.getUserProperties(tokenResponse.accessToken)\r\n .catch((err) => {\r\n this.error = { err };\r\n });\r\n if (graphProfile) {\r\n this.graphProfile = graphProfile;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport default new AuthPorvider();","import * as CONFIG from '../appconfigs';\r\n\r\nimport authProvider from '../msal/AuthProvider';\r\nexport const API_URL = '/';\r\n\r\nconst ResponseType = {\r\n TEXT: Symbol(\"text\"),\r\n JSON: Symbol(\"json\"),\r\n BLOB: Symbol(\"blob\"),\r\n FORM_DATA: Symbol(\"formData\"),\r\n ARRAY_BUFFER: Symbol(\"arrayBuffer\"),\r\n UNSUPPORTED_MEDIA_TYPE: Symbol(\"Unsupported Media Type\")\r\n};\r\nObject.freeze(ResponseType);\r\n\r\nclass HttpResponseCache {\r\n static cache = {};\r\n\r\n static getItemFromCache(url) {\r\n return HttpResponseCache.cache[url];\r\n }\r\n\r\n static storeItem(url, item) {\r\n HttpResponseCache.cache[url] = item;\r\n }\r\n\r\n static clear() {\r\n HttpResponseCache.cache = {};\r\n }\r\n}\r\n\r\nclass PeopleApi {\r\n\r\n static async getFromCacheOrLoad(url, payloadType) {\r\n let itemFromCache = HttpResponseCache.getItemFromCache(url);\r\n if (itemFromCache) {\r\n return itemFromCache;\r\n }\r\n const options = await PeopleApi.getHeaderOptions(\"GET\");\r\n let response = await fetch(encodeURI(url), options);\r\n if (response.status === 401) {\r\n authProvider.onSignOut();\r\n return;\r\n }\r\n if (response.status === 404) {\r\n throw response;\r\n }\r\n let result = null;\r\n\r\n switch (payloadType) {\r\n case ResponseType.TEXT:\r\n result = await response.text();\r\n break;\r\n case ResponseType.JSON:\r\n result = await response.json();\r\n break;\r\n case ResponseType.BLOB:\r\n result = await response.blob();\r\n break;\r\n case ResponseType.FORM_DATA:\r\n result = await response.formData();\r\n break;\r\n case ResponseType.ARRAY_BUFFER:\r\n result = await response.arrayBuffer();\r\n break;\r\n default:\r\n throw ResponseType.UNSUPPORTED_MEDIA_TYPE;\r\n }\r\n\r\n HttpResponseCache.storeItem(url, result);\r\n\r\n return result;\r\n }\r\n\r\n static async getHeaderOptions(method) {\r\n //const _ = await PeopleApi.signInIfNotSigned();\r\n let tokenResponse = null;\r\n tokenResponse = await authProvider.acquireTokenWP();\r\n return {\r\n method: method,\r\n mode: \"cors\",\r\n headers: new Headers([\r\n [\"Authorization\", `Bearer ${tokenResponse.accessToken}`],\r\n [\"Accept\", \"application/json\"],\r\n [\"Content-Type\", \"application/json\"]\r\n ])\r\n };\r\n }\r\n\r\n static async FetchEmpoyeePhoto(id) {\r\n let requestUrl = `${API_URL}api/getphoto/${id}`;\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.BLOB);\r\n }\r\n\r\n static async getDirectReports(id) {\r\n let requestUrl = `${API_URL}api/getDirectReports/${id}?pageSize=0`;\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n }\r\n\r\n static async smartSearch(searchValue, pageIndex, pageSize, reqTotal, sortField, sortDirection) {\r\n const options = await PeopleApi.getHeaderOptions(\"GET\");\r\n\r\n let requestUrl = `${API_URL}api/smartSearch?searchValue=${searchValue}&pageIndex=${pageIndex}&pageSize=${pageSize}&calculateTotalCount=${reqTotal}&returnAccommodationData=${authProvider.showAccomodation()}`;\r\n if (sortField) {\r\n requestUrl += `&sortField=${sortField}`;\r\n }\r\n if (sortDirection) {\r\n requestUrl += `&sortDirection=${sortDirection}`;\r\n }\r\n\r\n let response = await fetch(encodeURI(requestUrl), options);\r\n if (response.status === 401) {\r\n authProvider.onSignOut();\r\n return;\r\n }\r\n return response.json();\r\n }\r\n\r\n static async getActiveCompanies(includeInactive) {\r\n const options = await PeopleApi.getHeaderOptions(\"GET\");\r\n\r\n let requestUrl = `${API_URL}api/getActiveCompanies?pageSize=0&includeInactive=${includeInactive}`;\r\n\r\n let response = await fetch(encodeURI(requestUrl), options);\r\n if (response.status === 401) {\r\n authProvider.onSignOut();\r\n return;\r\n }\r\n return response.json();\r\n }\r\n\r\n static async advancedSearch(query, pageIndex, pageSize, reqTotal, sortField, sortDirection) {\r\n const options = await PeopleApi.getHeaderOptions(\"GET\");\r\n \r\n\r\n let requestUrl = `${API_URL}api/advancedSearch?${query}&pageIndex=${pageIndex}&pageSize=${pageSize}&calculateTotalCount=${reqTotal}&returnAccommodationData=${authProvider.showAccomodation()}`;\r\n if (sortField) {\r\n requestUrl += `&sortField=${sortField}`;\r\n }\r\n if (sortDirection) {\r\n requestUrl += `&sortDirection=${sortDirection}`;\r\n }\r\n let response = await fetch(encodeURI(requestUrl), options);\r\n if (response.status === 401) {\r\n authProvider.onSignOut();\r\n return;\r\n }\r\n return response.json();\r\n }\r\n\r\n static async getRootCostCenters() {\r\n let requestUrl = `${API_URL}api/getRootCostCenters`;\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n }\r\n\r\n static async getChildCostCenters(parentCode) {\r\n let requestUrl = `${API_URL}api/getChildCostCenters/${parentCode}`;\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n }\r\n\r\n static async getCostCenterBranch(ccCode) {\r\n let requestUrl = `${API_URL}api/getCostCenterBranch/${ccCode}`;\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n }\r\n\r\n static async getPersonPresence(id) {\r\n let requestUrl = `${API_URL}api/presence/${id}`;\r\n const options = await PeopleApi.getHeaderOptions(\"GET\");\r\n let response = await fetch(encodeURI(requestUrl), options)\r\n return response.json();\r\n }\r\n\r\n static async getOptions(optionName) {\r\n let requestUrl = `${API_URL}api/getAllOptions/${optionName}`;\r\n\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n }\r\n\r\n static async searchOptions(optionName, searchValue) {\r\n\r\n let requestUrl = `${API_URL}api/SearchOptionsSync?optionName=${optionName}&searchValue=${searchValue}&resultsCount=${CONFIG.AUTOCOMPLETE_ROWS_TO_REQUEST}`;\r\n\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n\r\n }\r\n\r\n static async searchAutocompleteText(filterName, searchValue) {\r\n let requestUrl = `${API_URL}api/SearchAutocompleteStrings?filterName=${filterName}&searchValue=${searchValue}&resultsCount=${CONFIG.AUTOCOMPLETE_ROWS_TO_REQUEST}`;\r\n if (filterName === 'costCenterName') {\r\n requestUrl = `${API_URL}api/searchCostCenters?searchValue=${searchValue}&resultsCount=${CONFIG.AUTOCOMPLETE_ROWS_TO_REQUEST}`;\r\n }\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n }\r\n\r\n static async searchCostCentersInHierarchy(searchValue, includeInactive, includeAFE, includeHomeCCOnly) {\r\n let requestUrl = `${API_URL}api/searchInCostCentersHierarchy?searchValue=${searchValue}` +\r\n `&includeInactive=${includeInactive}&includeAFE=${includeAFE}` +\r\n `&resultsCount=${CONFIG.AUTOCOMPLETE_ROWS_TO_REQUEST}&includeHomeCCOnly=${includeHomeCCOnly}`;\r\n\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n }\r\n\r\n static async getPersonExtended(personId) {\r\n let requestUrl = `${API_URL}api/getEmployeeDetails/${personId}`;\r\n\r\n return await PeopleApi.getFromCacheOrLoad(requestUrl, ResponseType.JSON);\r\n }\r\n\r\n static async getEmployeeAccommodation(id) {\r\n let requestUrl = `${API_URL}api/getEmployeeAccommodation/${id}`;\r\n const options = await PeopleApi.getHeaderOptions(\"GET\");\r\n let response = await fetch(encodeURI(requestUrl), options);\r\n if (response.status === 401) {\r\n authProvider.onSignOut();\r\n return;\r\n }\r\n return response.json();\r\n }\r\n\r\n static async updatePreferredEmail(emailAddress) {\r\n let newPreferredEmail = { EmailAddress: emailAddress };\r\n let requestUrl = `${API_URL}api/selfService/updatePreferredEmail`;\r\n\r\n const options = await PeopleApi.getHeaderOptions(\"POST\");\r\n options.body = JSON.stringify(newPreferredEmail);\r\n return fetch(encodeURI(requestUrl), options)\r\n };\r\n}\r\n\r\n\r\n\r\nexport default PeopleApi;\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { loading } from '../../LocalizationMessages';\r\n\r\nconst wrapperStyle = { position: 'absolute', bottom: '0px', minWidth: '50%', zIndex: '100' };\r\nconst labelStyle = { textAlign: 'right', margin: '0px', paddingBottom: '3px', color: 'gray' };\r\nclass LoadingLabel extends React.Component {\r\n render() {\r\n const localizationService = this.context.localization;\r\n\r\n const labelText = localizationService.toLanguageString(loading, 'Loading...');\r\n\r\n const labelElement = (\r\n
\r\n

{labelText}

\r\n
\r\n );\r\n const tableFooter = document && document.querySelector('.k-pager-numbers.k-reset');\r\n return tableFooter ? ReactDOM.createPortal(labelElement, tableFooter) : null\r\n\r\n }\r\n}\r\nregisterForLocalization(LoadingLabel);\r\nexport default LoadingLabel;","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nclass ExpandTable extends React.Component {\r\n render() {\r\n let iconClass = this.props.tableExpanded ? 'k-icon k-i-full-screen-exit' : 'k-icon k-i-full-screen';\r\n const element = (\r\n
\r\n \r\n
\r\n );\r\n \r\n const gird = document && document.querySelector('#resultsTable .k-grid-header');\r\n return gird ? ReactDOM.createPortal(element, gird) : null;\r\n }\r\n }\r\n\r\n export default ExpandTable;","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { Notification, NotificationGroup } from '@progress/kendo-react-notification';\r\nimport { Slide } from '@progress/kendo-react-animation';\r\n\r\nconst notificationGroupStyle = {\r\n top: '0px',\r\n left: '42%',\r\n alignItems: 'flex-start',\r\n zIndex: '10000'\r\n};\r\nconst notificationStyle = {\r\n style: 'warning',\r\n icon: false \r\n}\r\nclass SliderNotification extends React.Component {\r\n render() {\r\n const slideDirection = this.props.showNotification ? 'down' : 'up';\r\n const localizationService = this.context.localization;\r\n const message = localizationService.toLanguageString(this.props.notificationMessage, '');\r\n return (\r\n \r\n {\r\n \r\n {this.props.showNotification &&\r\n this.props.hideNotification()}\r\n >\r\n {\r\n message\r\n }\r\n \r\n }\r\n \r\n }\r\n \r\n );\r\n }\r\n}\r\nregisterForLocalization(SliderNotification);\r\n\r\nexport default SliderNotification;","import {messages} from '../../LocalizationMessages';\r\nimport columns, {COLUMNS_VERSION} from '../common/columns.js';\r\nimport {orderBy} from '@progress/kendo-data-query';\r\nimport authProvider from '../../msal/AuthProvider';\r\n\r\nimport {\r\n appendEndignSlash,\r\n getFormattedPhone,\r\n isNullOrWhitespace,\r\n isSelectionEmpty,\r\n openDetailsPage\r\n} from '../common/functions';\r\n\r\nconst ENLISH_NAME_FIELD = 'englishName';\r\nconst CYRILLIC_NAME_FIELD = 'cyrllicName';\r\n\r\nexport function onRowClick(event) {\r\n if (isSelectionEmpty()) {\r\n openDetailsPage(event.dataItem.canonicalId);\r\n }\r\n}\r\n\r\nexport function toggleTableSize() {\r\n this.setState(prevState => ({\r\n tableExpanded: !prevState.tableExpanded\r\n }));\r\n}\r\n\r\nexport function onColumnReorder(event) {\r\n const localizationService = this.context.localization;\r\n let visibleColumns = Object.values({ ...event.columns });\r\n visibleColumns.sort((a, b) => a.orderIndex - b.orderIndex);\r\n\r\n let x = visibleColumns[0].field;\r\n if (x !== ENLISH_NAME_FIELD && x !== CYRILLIC_NAME_FIELD) {\r\n return;\r\n }\r\n\r\n let newColumnsState = visibleColumns.map((item) => {\r\n return this.state.columns.find(element => {\r\n if (localizationService.toLanguageString(element.field, '') === item.field) {\r\n return element;\r\n }\r\n return null;\r\n });\r\n });\r\n let invisibleColumns = this.state.columns.filter(item => !item.show);\r\n newColumnsState = newColumnsState.concat(invisibleColumns);\r\n newColumnsState = newColumnsState.map((item, index) => {\r\n item.orderIndex = index;\r\n return item;\r\n });\r\n this.setState({ columns: newColumnsState, gridUpdateCounter: this.state.gridUpdateCounter + 1 });\r\n this.saveColumnsState(newColumnsState);\r\n}\r\n\r\nexport function formatDateString(dateInput, lang) {\r\n if (isNullOrWhitespace(dateInput)) {\r\n return '';\r\n }\r\n if (lang !== 'ru') {\r\n return dateInput;\r\n }\r\n let date = Date.parse(dateInput);\r\n return new Date(date).toLocaleDateString('ru');\r\n}\r\n\r\nexport function onSortChange(e) {\r\n if (e.sort.length === 0) {\r\n this.toggleSortDirection();\r\n }\r\n else {\r\n this.sort = e.sort;\r\n }\r\n\r\n if (this.hasMoreDataToLoad()) {\r\n this.loadFirstPage();\r\n return;\r\n }\r\n\r\n this.sortData();\r\n}\r\n\r\nexport function toggleSortDirection() {\r\n this.sort[0].dir = this.sort[0].dir === 'asc' ? 'desc' : 'asc';\r\n}\r\n\r\nexport function trackScrolling() {\r\n if (!this.hasMoreDataToLoad()) {\r\n return;\r\n }\r\n this.loadNextPage();\r\n};\r\n\r\nexport function hasMoreDataToLoad() {\r\n const { totalCount, pageIndex, pageCount } = this.state.metadata;\r\n return totalCount > -1 && pageCount > pageIndex;\r\n}\r\n\r\nexport function loadNextPage() {\r\n this.requestData();\r\n}\r\n\r\nexport function getInitialSortField() {\r\n const currentLang = this.getCurrentLanguage();\r\n return currentLang === 'en' ? ENLISH_NAME_FIELD : CYRILLIC_NAME_FIELD;\r\n}\r\n\r\nexport function getSortDirectionLongValue() {\r\n return this.sort[0].dir === 'asc' ? 'Ascending' : 'Descending';\r\n}\r\n\r\nexport function isSortByNameField() {\r\n let sortField = this.sort[0].field;\r\n return sortField === ENLISH_NAME_FIELD || sortField === CYRILLIC_NAME_FIELD;\r\n}\r\n\r\nexport function loadFirstPage() {\r\n this.setState({\r\n gridUpdateCounter: -1,\r\n data: [],\r\n requestingFirstPage: true,\r\n metadata: this.initialState.metadata,\r\n loadingNextPage: false,\r\n //columns: this.getStoredOrDefaultColumns()\r\n },\r\n () => {\r\n this.requestInProgress = false;\r\n this.requestData();\r\n });\r\n}\r\n\r\nexport function sortData() {\r\n const { data, gridUpdateCounter } = this.state;\r\n this.setState({ data: orderBy(data, this.sort), gridUpdateCounter: gridUpdateCounter + 1 });\r\n}\r\n\r\nexport function getNextPageIndex() {\r\n const { pageIndex, totalCount } = this.state.metadata;\r\n if (totalCount === -1) {\r\n return 1;\r\n }\r\n return pageIndex + 1;\r\n}\r\n\r\nexport function updateStateWithTheResponse(response) {\r\n const newMetadata = this.getMergedMetadata(response.metadata);\r\n let data = this.aggregateAndLocalizeDataForTable(response.data);\r\n const newData = this.state.data.concat(data);\r\n this.setState({\r\n gridUpdateCounter: this.state.gridUpdateCounter + 1,\r\n data: newData,\r\n requestingFirstPage: false,\r\n metadata: newMetadata,\r\n loadingNextPage: false\r\n });\r\n}\r\n\r\nexport function getMergedMetadata(metadata) {\r\n if (this.state.requestingFirstPage) {\r\n return metadata;\r\n }\r\n let pageIndex = metadata.pageIndex;\r\n return { ...this.state.metadata, pageIndex };\r\n}\r\n\r\nexport function addLocalizedFields(data) {\r\n data.forEach(person => {\r\n person.rotationArrivalDateRu = this.formatDateString(person.rotationArrivalDate, 'ru');\r\n person.rotationArrivalDate = this.formatDateString(person.rotationArrivalDate);\r\n\r\n person.rotationDepartureDateRu = this.formatDateString(person.rotationDepartureDate, 'ru');\r\n person.rotationDepartureDate = this.formatDateString(person.rotationDepartureDate);\r\n\r\n person.employmentStartDateRu = this.formatDateString(person.employmentStartDate, 'ru');\r\n person.employmentStartDate = this.formatDateString(person.employmentStartDate);\r\n\r\n person.employmentEndDateRu = this.formatDateString(person.employmentEndDate, 'ru');\r\n person.employmentEndDate = this.formatDateString(person.employmentEndDate);\r\n\r\n person.primaryPhoneNumber = getFormattedPhone(person.primaryPhoneNumber);\r\n\r\n person.searchTypeRu = messages['ru'][person.searchType];\r\n person.searchType = messages['en'][person.searchType];\r\n\r\n person.rotationStatusRu = messages['ru'][person.rotationStatus];\r\n person.rotationStatus = messages['en'][person.rotationStatus];\r\n });\r\n return data;\r\n}\r\n\r\n\r\n\r\nexport function aggregateAndLocalizeDataForTable(data) {\r\n if (data && data.length === 0) {\r\n return [];\r\n }\r\n\r\n addWorkLocationField(data);\r\n copyPersonNamesIfOnlyOnePresent(data);\r\n this.addLocalizedFields(data);\r\n addHousingData(data);\r\n\r\n return data;\r\n}\r\n\r\nexport function copyPersonNamesIfOnlyOnePresent(data) {\r\n\r\n data.forEach(person => {\r\n person.englishName = retunAnalogIfMainEmpty(person.englishName, person.cyrllicName);\r\n person.cyrllicName = retunAnalogIfMainEmpty(person.cyrllicName, person.englishName);\r\n\r\n person.supervisorEnglishName = retunAnalogIfMainEmpty(person.supervisorEnglishName, person.supervisorCyrllicName);\r\n person.supervisorCyrllicName = retunAnalogIfMainEmpty(person.supervisorCyrllicName, person.supervisorEnglishName);\r\n\r\n person.back2BackEnglishName = retunAnalogIfMainEmpty(person.back2BackEnglishName, person.back2BackCyrllicName);\r\n person.back2BackCyrllicName = retunAnalogIfMainEmpty(person.back2BackCyrllicName, person.back2BackEnglishName);\r\n\r\n person.primaryOwnerEnglishName = retunAnalogIfMainEmpty(person.primaryOwnerEnglishName, person.primaryOwnerCyrllicName);\r\n person.primaryOwnerCyrllicName = retunAnalogIfMainEmpty(person.primaryOwnerCyrllicName, person.primaryOwnerEnglishName);\r\n\r\n person.secondaryOwnerEnglishName = retunAnalogIfMainEmpty(person.secondaryOwnerEnglishName, person.secondaryOwnerCyrllicName);\r\n person.secondaryOwnerCyrllicName = retunAnalogIfMainEmpty(person.secondaryOwnerCyrllicName, person.secondaryOwnerEnglishName);\r\n });\r\n return data;\r\n}\r\n\r\nfunction addHousingData(data){\r\n if(!authProvider.showAccomodation()){\r\n return data;\r\n }\r\n data.forEach(person => {\r\n person['housing'] = buildLocationString(person.accommodationAreaDescription,person.accommodationBuildingDescription, person.accommodationRoom);\r\n });\r\n return data;\r\n}\r\n\r\nfunction retunAnalogIfMainEmpty(main, analog) {\r\n if (isNullOrWhitespace(main)) {\r\n return analog;\r\n }\r\n return main;\r\n}\r\n\r\n\r\nexport function addWorkLocationField(data) {\r\n data.forEach(person => {\r\n let { wlFacilityName, wlAreaName, wlBuildingName, wlRoom } = person;\r\n person.workLocation = buildLocationString(wlFacilityName, wlAreaName, wlBuildingName, wlRoom);\r\n });\r\n return data;\r\n}\r\n\r\nexport function buildLocationString(wlFacilityName, wlAreaName, wlBuildingName, wlRoom) {\r\n let result = '';\r\n result += appendEndignSlash(wlFacilityName);\r\n result += appendEndignSlash(wlAreaName);\r\n result += appendEndignSlash(wlBuildingName);\r\n result += wlRoom ? wlRoom : '';\r\n\r\n return result;\r\n}\r\n\r\nexport function changeUrl(pathname, search) {\r\n this.props.history.push({ pathname, search });\r\n}\r\n\r\nexport function getStoredOrDefaultColumns() {\r\n let result = columns;\r\n \r\n try {\r\n let storedColumnsVersion = localStorage.getItem('columnsVersion');\r\n if(storedColumnsVersion === null){\r\n saveColumnsState(columns);\r\n }\r\n\r\n else if (storedColumnsVersion !== COLUMNS_VERSION) {\r\n localStorage.removeItem('columnsVersion');\r\n localStorage.removeItem('storedColumnsState');\r\n saveColumnsState(columns);\r\n }\r\n else {\r\n let storedColumnsState = localStorage.getItem('storedColumnsState');\r\n if (storedColumnsState) {\r\n result = JSON.parse(storedColumnsState);\r\n }\r\n }\r\n }\r\n catch (err) {\r\n console.log(err);\r\n result = columns;\r\n }\r\n finally{\r\n if(!authProvider.showAccomodation()){\r\n result = result.filter(column => column.title !== 'housing');\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nexport function onColumnsSubmit(columnsState) {\r\n this.setState({\r\n columns: columnsState,\r\n gridUpdateCounter: this.state.gridUpdateCounter + 1\r\n });\r\n this.saveColumnsState(columnsState);\r\n}\r\n\r\nexport function saveColumnsState(columnsState) {\r\n try {\r\n localStorage.setItem('columnsVersion', COLUMNS_VERSION);\r\n localStorage.setItem('storedColumnsState', JSON.stringify(columnsState));\r\n }\r\n catch (err) { }\r\n}\r\n\r\nexport function scrollHandler(event) {\r\n const e = event.nativeEvent;\r\n if (e.target.scrollTop + 10 >= e.target.scrollHeight - e.target.clientHeight) {\r\n if (this.hasMoreDataToLoad()) {\r\n this.loadNextPage();\r\n }\r\n }\r\n};\r\n\r\nexport function getCurrentLanguage() {\r\n return this.props.language;\r\n}\r\n\r\nexport function showExpandIcon() {\r\n this.setState({ showExpand: true });\r\n}\r\nexport function hideExpandIcon() {\r\n this.setState({ showExpand: false });\r\n}\r\n\r\nexport function setNotificationTimeout() {\r\n this.notificationTimeout = setTimeout(() => {\r\n this.setState({ showNotification: false, notificationMessage: '' });\r\n }, 3000);\r\n}\r\n\r\nexport function showNotification(messageLabel) {\r\n this.setState({ showNotification: true, notificationMessage: messageLabel }, () => {\r\n this.setNotificationTimeout();\r\n });\r\n}\r\n\r\nexport function hideNotification() {\r\n this.setState({ showNotification: false });\r\n}","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport phoneImg from '../../images/phone.png';\r\nimport emailImg from '../../images/email.png';\r\nimport chevronIcon from '../../images/chevron-icon.png'\r\nimport tcoIcon from '../../images/60px-Tengizchevroil_Logo.png'\r\nimport {\r\n emergencyContactAtyrau,\r\n emergencyContactTengiz,\r\n facilityManagementAtyrau,\r\n tengizFMServicesCallCenter,\r\n helpDesk,\r\n chevronWp,\r\n informationUpdateWp,\r\n informationUpdateWpLink,\r\n submitFeedback,\r\n submitFeedbackLink\r\n} from '../../LocalizationMessages';\r\n\r\nclass HelpfulLinks extends React.Component {\r\n render() {\r\n const localizationService = this.context.localization;\r\n\r\n const contactAtyLabel = localizationService.toLanguageString(emergencyContactAtyrau, '');\r\n const contactTengizLabel = localizationService.toLanguageString(emergencyContactTengiz, '');\r\n const facilityMgmAtyLabel = localizationService.toLanguageString(facilityManagementAtyrau, '');\r\n const facilityMgmTenLabel = localizationService.toLanguageString(tengizFMServicesCallCenter, '');\r\n const helpDeskLabel = localizationService.toLanguageString(helpDesk, '');\r\n const chevronLabel = localizationService.toLanguageString(chevronWp, '');\r\n const informationUpdateLabel = localizationService.toLanguageString(informationUpdateWp, '');\r\n const informationUpdateLink = localizationService.toLanguageString(informationUpdateWpLink, '');\r\n const submitFeedbackLabel = localizationService.toLanguageString(submitFeedback, '');\r\n const submitFeedbackURL = localizationService.toLanguageString(submitFeedbackLink, '');\r\n return (\r\n \r\n );\r\n }\r\n}\r\nregisterForLocalization(HelpfulLinks);\r\nexport default HelpfulLinks;","import React from 'react';\r\nimport SmartSearchControls from './smartSearchControls';\r\nimport ResultsGrid from '../common/resultsGrid';\r\nimport {registerForLocalization} from '@progress/kendo-react-intl';\r\nimport * as CONFIG from '../../appconfigs';\r\nimport LoadingPanel from '../common/LoadingPanel';\r\nimport NotFoundHelperLink from './notFoundHelperLink';\r\nimport PeopleApi from '../../api/WhitePagesApi';\r\nimport LoadingLabel from '../common/loadingLabel';\r\nimport ExpandTable from '../common/expandTable';\r\nimport {isStringEmpty} from '../common/functions';\r\nimport SliderNotification from '../common/SliderNotification';\r\nimport {apiErrorNotification} from '../../LocalizationMessages';\r\n\r\nimport {\r\n addLocalizedFields,\r\n aggregateAndLocalizeDataForTable,\r\n changeUrl,\r\n formatDateString,\r\n getCurrentLanguage,\r\n getInitialSortField,\r\n getMergedMetadata,\r\n getNextPageIndex,\r\n getSortDirectionLongValue,\r\n getStoredOrDefaultColumns,\r\n hasMoreDataToLoad,\r\n hideExpandIcon,\r\n hideNotification,\r\n isSortByNameField,\r\n loadFirstPage,\r\n loadNextPage,\r\n onColumnReorder,\r\n onColumnsSubmit,\r\n onRowClick,\r\n onSortChange,\r\n saveColumnsState,\r\n scrollHandler,\r\n setNotificationTimeout,\r\n showExpandIcon,\r\n showNotification,\r\n sortData,\r\n toggleSortDirection,\r\n toggleTableSize,\r\n trackScrolling,\r\n updateStateWithTheResponse\r\n} from '../common/methods';\r\nimport HelpfulLinks from './helpfulLinks';\r\n\r\nconst ENLISH_NAME_FIELD = 'englishName';\r\nconst CYRILLIC_NAME_FIELD = 'cyrllicName';\r\n\r\nclass SmartSearch extends React.Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n this.state = this.initialState;\r\n }\r\n\r\n\r\n onRowClick = onRowClick.bind(this);\r\n toggleTableSize = toggleTableSize.bind(this);\r\n onColumnReorder = onColumnReorder.bind(this);\r\n formatDateString = formatDateString.bind(this);\r\n onSortChange = onSortChange.bind(this);\r\n trackScrolling = trackScrolling.bind(this);\r\n hasMoreDataToLoad = hasMoreDataToLoad.bind(this);\r\n loadNextPage = loadNextPage.bind(this);\r\n toggleSortDirection = toggleSortDirection.bind(this);\r\n getInitialSortField = getInitialSortField.bind(this);\r\n getSortDirectionLongValue = getSortDirectionLongValue.bind(this);\r\n isSortByNameField = isSortByNameField.bind(this);\r\n loadFirstPage = loadFirstPage.bind(this);\r\n sortData = sortData.bind(this);\r\n getNextPageIndex = getNextPageIndex.bind(this);\r\n updateStateWithTheResponse = updateStateWithTheResponse.bind(this);\r\n addLocalizedFields = addLocalizedFields.bind(this);\r\n aggregateAndLocalizeDataForTable = aggregateAndLocalizeDataForTable.bind(this);\r\n getMergedMetadata = getMergedMetadata.bind(this);\r\n changeUrl = changeUrl.bind(this);\r\n getStoredOrDefaultColumns = getStoredOrDefaultColumns.bind(this);\r\n saveColumnsState = saveColumnsState.bind(this);\r\n onColumnsSubmit = onColumnsSubmit.bind(this);\r\n scrollHandler = scrollHandler.bind(this);\r\n getCurrentLanguage = getCurrentLanguage.bind(this);\r\n showExpandIcon = showExpandIcon.bind(this);\r\n hideExpandIcon = hideExpandIcon.bind(this);\r\n currentLang = this.getCurrentLanguage();\r\n setNotificationTimeout = setNotificationTimeout.bind(this);\r\n showNotification = showNotification.bind(this);\r\n hideNotification = hideNotification.bind(this);\r\n\r\n sort = [\r\n { field: this.getInitialSortField(), dir: 'asc' }\r\n ];\r\n searchValue = '';\r\n initialState = {\r\n showExpand: false,\r\n tableExpanded: false,\r\n gridUpdateCounter: -1,\r\n inputValue: '',\r\n requestingFirstPage: false,\r\n data: [],\r\n showNotification: false,\r\n loadingNextPage: false,\r\n notificationMessage:'',\r\n metadata: {\r\n pageIndex: 1,\r\n pageCount: 0,\r\n pageSize: 50,\r\n totalCount: -1,\r\n sortField: '',\r\n sortDirection: ''\r\n },\r\n columns: this.getStoredOrDefaultColumns()\r\n }\r\n\r\n\r\n requestData = () => {\r\n if (this.requestInProgress) {\r\n //perform only one request at a time\r\n return;\r\n }\r\n\r\n this.requestInProgress = true;\r\n let requestedValue = this.searchValue;\r\n let loadingNextPage = !this.state.requestingFirstPage;\r\n this.setState({ loadingNextPage });\r\n PeopleApi.smartSearch(...this.getRequestParameters())\r\n .then(response => {\r\n //input has changed since last request\r\n if (requestedValue !== this.searchValue) {\r\n return;\r\n }\r\n this.requestInProgress = false;\r\n\r\n this.updateStateWithTheResponse(response);\r\n })\r\n .catch(err => {\r\n if (requestedValue !== this.searchValue) {\r\n return;\r\n }\r\n this.showNotification(apiErrorNotification);\r\n this.setState({\r\n loadingNextPage:false,\r\n loadFirstPage:false\r\n })\r\n })\r\n .finally(() => this.requestInProgress = false);\r\n }\r\n\r\n getRequestParameters = () => {\r\n const { searchValue } = this;\r\n let pageIndex = this.getNextPageIndex();\r\n const pageSize = this.state.metadata.pageSize;\r\n let reqTotalCount = this.state.requestingFirstPage;\r\n let sortField = this.sort[0].field;\r\n let sortDirection = this.getSortDirectionLongValue();\r\n return [\r\n searchValue,\r\n pageIndex,\r\n pageSize,\r\n reqTotalCount,\r\n sortField,\r\n sortDirection\r\n ];\r\n }\r\n\r\n onSubmitHandler = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.clearInputChangeTimeout();\r\n if (this.searchValue === this.state.inputValue) {\r\n return;\r\n }\r\n this.searchValue = this.state.inputValue;\r\n this.loadFirstPage();\r\n }\r\n\r\n onInputChange = (inputValue, delay = null) => {\r\n this.clearInputChangeTimeout();\r\n\r\n if (isStringEmpty(inputValue)) {\r\n this.setInitialState();\r\n return;\r\n }\r\n\r\n this.setState({ inputValue });\r\n if (/^[0-9]{1,3}$/.test(inputValue)) {\r\n return;\r\n }\r\n //this.setInputChangeTimeout(delay);\r\n }\r\n\r\n setInputChangeTimeout(delay) {\r\n this.inputChangeTimeout = setTimeout(() => {\r\n document.querySelector('#submit-btn').click();\r\n }, delay === null ? CONFIG.ON_INPUT_CHANGE_REQUEST_DELAY_TIME : delay);\r\n }\r\n\r\n clearInputChangeTimeout() {\r\n if (this.inputChangeTimeout) {\r\n clearTimeout(this.inputChangeTimeout);\r\n }\r\n }\r\n\r\n setInitialState() {\r\n this.searchValue = '';\r\n this.setState({ ...this.initialState, columns: this.state.columns });\r\n }\r\n\r\n componentWillReceiveProps(newProps) {\r\n if (newProps.language !== this.props.language) {\r\n if (this.isSortByNameField()) {\r\n this.sort[0].field = newProps.language === 'en' ? ENLISH_NAME_FIELD : CYRILLIC_NAME_FIELD;\r\n this.onSortChange({ sort: this.sort });\r\n this.setState({ columns: this.getStoredOrDefaultColumns() });\r\n }\r\n this.setState({ gridUpdateCounter: this.state.gridUpdateCounter + 1 });\r\n }\r\n }\r\n\r\n componentWillUnmount() {\r\n this.clearInputChangeTimeout();\r\n }\r\n\r\n render() {\r\n const {\r\n requestingFirstPage,\r\n data,\r\n inputValue,\r\n metadata,\r\n loadingNextPage,\r\n tableExpanded\r\n } = this.state;\r\n return (\r\n \r\n \r\n\r\n
\r\n
\r\n {\r\n requestingFirstPage && \r\n }\r\n {\r\n metadata.totalCount === 0 &&\r\n \r\n }\r\n {\r\n metadata.totalCount === -1 &&\r\n !this.state.requestingFirstPage &&\r\n \r\n }\r\n
\r\n {\r\n data.length > 0 &&\r\n \r\n }\r\n {\r\n\r\n loadingNextPage &&\r\n \r\n }\r\n {\r\n this.state.showExpand &&\r\n \r\n }\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\nregisterForLocalization(SmartSearch);\r\nexport default SmartSearch;","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { currentLanguage } from '../../LocalizationMessages';\r\nimport { nullOrUndefined, isNullOrWhitespace } from '../common/functions';\r\n\r\nclass CompanyAndCCTable extends React.Component {\r\n render() {\r\n const { props, context } = this;\r\n const localizationService = context.localization;\r\n const currentLang = localizationService.toLanguageString(currentLanguage, 'en');\r\n const { personExtended } = props;\r\n const { canonicalId } = personExtended.person;\r\n let tableRows = getRows(personExtended, currentLang, props);\r\n\r\n if (!tableRows) {\r\n return null;\r\n }\r\n return (\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n tableRows.map(row => {\r\n return (\r\n \r\n \r\n \r\n {\r\n \r\n }\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
{localizationService.toLanguageString('companyAndCC', '')}
{localizationService.toLanguageString(row.header, '')}\r\n {row.data}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nregisterForLocalization(CompanyAndCCTable);\r\nexport default CompanyAndCCTable;\r\n\r\n\r\nfunction getRows(personExtended, currentLang, props) {\r\n if (personExtended === null) {\r\n return null;\r\n }\r\n let rows = [];\r\n let homeCompany = ((personExtended).person || {}).homeCompany;\r\n if (!nullOrUndefined(homeCompany)) {\r\n rows.push({\r\n header: 'homeCompany',\r\n data: formatCodeNamePair(homeCompany.code, homeCompany.name)\r\n });\r\n }\r\n const costCenter = personExtended.costCenter;\r\n if (nullOrUndefined(costCenter)) {\r\n return rows;\r\n }\r\n\r\n rows.push({\r\n header: 'ccDescription',\r\n data: costCenter.name\r\n });\r\n rows.push({\r\n header: 'ccCode',\r\n data: costCenter.code\r\n });\r\n\r\n rows.push(\r\n {\r\n header: 'costCenterOwners',\r\n data: getCostCenterOwners(costCenter, currentLang, props)\r\n }\r\n );\r\n rows.push({\r\n header: 'division',\r\n data: formatCodeNamePair(costCenter.divisionCode, costCenter.divisionName)\r\n });\r\n\r\n rows.push({\r\n header: 'group',\r\n data: formatCodeNamePair(costCenter.groupCode, costCenter.groupName)\r\n });\r\n rows.push({\r\n header: 'department',\r\n data: formatCodeNamePair(costCenter.departmentCode, costCenter.departmentName)\r\n });\r\n\r\n rows = rows.filter(r => r.data);\r\n if (rows.length === 0) {\r\n return null;\r\n }\r\n return rows;\r\n}\r\n\r\nfunction getCostCenterOwners(costCenter, lang, props) {\r\n\r\n const { primaryOwnerEnglishName, primaryOwnerCyrllicName, secondaryOwnerEnglishName, secondaryOwnerCyrllicName } = costCenter;\r\n if (isNullOrWhitespace(primaryOwnerEnglishName) &&\r\n isNullOrWhitespace(primaryOwnerCyrllicName) &&\r\n isNullOrWhitespace(secondaryOwnerEnglishName) &&\r\n isNullOrWhitespace(secondaryOwnerCyrllicName)\r\n ) {\r\n\t \r\n return null;\r\n }\r\n\r\n if (lang === 'en') {\r\n let primaryOwnerElEn = null;\r\n if (costCenter.primaryOwnerCanonicalId) {\r\n let url = `/details/${costCenter.primaryOwnerCanonicalId}`\r\n let fullNameEn = costCenter.primaryOwnerEnglishName ? costCenter.primaryOwnerEnglishName : costCenter.primaryOwnerCyrllicName;\r\n primaryOwnerElEn =\r\n props.onPersonClick(event, costCenter.primaryOwnerCanonicalId)}\r\n >\r\n {fullNameEn}\r\n \r\n }\r\n\r\n let secondaryOwnerElEn = null;\r\n if (costCenter.secondaryOwnerCanonicalId) {\r\n let url = `/details/${costCenter.secondaryOwnerCanonicalId}`\r\n let fullNameEn = costCenter.secondaryOwnerEnglishName ? costCenter.secondaryOwnerEnglishName : costCenter.secondaryOwnerCyrllicName;\r\n secondaryOwnerElEn =\r\n props.onPersonClick(event, costCenter.secondaryOwnerCanonicalId)}\r\n >\r\n {fullNameEn}\r\n \r\n }\r\n let delimiter = null;\r\n if (primaryOwnerElEn && secondaryOwnerElEn) {\r\n delimiter =  / \r\n }\r\n return \r\n {primaryOwnerElEn}{delimiter}{secondaryOwnerElEn}\r\n \r\n }\r\n let primaryOwnerElRu = null;\r\n if (costCenter.primaryOwnerCanonicalId) {\r\n let url = `/details/${costCenter.primaryOwnerCanonicalId}`\r\n let fullNameEn = costCenter.primaryOwnerCyrllicName ? costCenter.primaryOwnerCyrllicName : costCenter.primaryOwnerEnglishName;\r\n primaryOwnerElRu =\r\n props.onPersonClick(event, costCenter.primaryOwnerCanonicalId)}\r\n >\r\n {fullNameEn}\r\n \r\n }\r\n\r\n let secondaryOwnerElRu = null;\r\n if (costCenter.secondaryOwnerCanonicalId) {\r\n let url = `/details/${costCenter.secondaryOwnerCanonicalId}`\r\n let fullNameEn = costCenter.secondaryOwnerCyrllicName ? costCenter.secondaryOwnerCyrllicName : costCenter.secondaryOwnerEnglishName;\r\n secondaryOwnerElRu =\r\n props.onPersonClick(event, costCenter.secondaryOwnerCanonicalId)}\r\n >\r\n {fullNameEn}\r\n \r\n }\r\n let delimeter = null;\r\n if (primaryOwnerElRu && secondaryOwnerElRu) {\r\n delimeter =  / \r\n }\r\n return \r\n {primaryOwnerElRu}{delimeter}{secondaryOwnerElRu}\r\n \r\n}\r\n\r\n\r\nfunction formatCodeNamePair(code, name) {\r\n if (isNullOrWhitespace(code) && isNullOrWhitespace(name)) {\r\n return null;\r\n }\r\n let result = code ? code : code;\r\n if (result && name) {\r\n result += ' - ';\r\n result += name;\r\n }\r\n return result;\r\n}\r\n\r\n","export const NOT_REQUESTED = 1;\r\nexport const REQUESTED = 2;\r\nexport const COMPLETED = 3;","\r\n\r\nimport React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { currentLanguage } from '../../LocalizationMessages';\r\n\r\nimport { isNullOrWhitespace } from '../common/functions';\r\n\r\nclass RotationsTable extends React.Component {\r\n render() {\r\n const { context, props } = this;\r\n const localizationService = context.localization;\r\n const currentLang = localizationService.toLanguageString(currentLanguage, 'en');\r\n let counter = 1;\r\n\r\n const { personExtended } = props;\r\n\r\n if (personExtended === null) {\r\n return null;\r\n }\r\n let rows = [];\r\n\r\n let rotation = null;\r\n if (personExtended.back2Back) {\r\n let b2b = personExtended.back2Back;\r\n\r\n rows.push({\r\n header: 'backToBack',\r\n data: getPersonNameRow(b2b.englishName, b2b.cyrllicName, b2b.canonicalId, currentLang, props)\r\n });\r\n\r\n }\r\n if (personExtended.rotations && personExtended.rotations.length > 0) {\r\n\r\n rotation = personExtended.rotations[0];\r\n rows.push({\r\n header: 'rotationType',\r\n data: personExtended.person.rotation.name\r\n });\r\n\r\n let rotationHeader = rotation.statusName === 'IN-HOUSE' ? 'currentRotation' : 'nextRotation';\r\n\r\n\r\n\r\n let rotationData = currentLang === 'ru' ? getRotationDateStringRu(rotation) :\r\n getRotationDateStringEn(rotation);\r\n\r\n rows.push(\r\n {\r\n header: rotationHeader,\r\n data: rotationData\r\n });\r\n }\r\n rows = rows.filter(r => r.data);\r\n if (rows.length === 0) {\r\n return null;\r\n }\r\n\r\n let tableHeaderLabel = 'offRotation';\r\n\r\n if (personExtended.person.rotation && personExtended.person.rotation.status === 'ON-Rotation') {\r\n tableHeaderLabel = 'onRotation';\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n rows.map(row => {\r\n return (\r\n \r\n \r\n \r\n {\r\n \r\n }\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
{localizationService.toLanguageString(tableHeaderLabel, '')}
{localizationService.toLanguageString(row.header, '')}\r\n {row.data}\r\n
\r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nregisterForLocalization(RotationsTable);\r\nexport default RotationsTable;\r\n\r\n\r\n\r\nfunction getPersonNameRow(englishName, cyrllicName, canonicalId, currentLang, props) {\r\n if (isNullOrWhitespace(englishName) && isNullOrWhitespace(cyrllicName)) {\r\n return null;\r\n }\r\n let text = (currentLang === 'ru' && cyrllicName.length > 0) ? cyrllicName : englishName;\r\n\r\n if (isNullOrWhitespace(text)) {\r\n return null;\r\n }\r\n let url = `/details/${canonicalId}`\r\n let result =\r\n props.onPersonClick(event, canonicalId)}\r\n >\r\n {text}\r\n \r\n return result;\r\n}\r\n\r\nfunction getRotationDateStringRu(rotation) {\r\n const { arrivalDate, departureDate } = rotation;\r\n if (isNullOrWhitespace(arrivalDate) && isNullOrWhitespace(departureDate)) {\r\n return null;\r\n }\r\n let parserArrivalDate = Date.parse(arrivalDate);\r\n let localeArrivalDate = new Date(parserArrivalDate).toLocaleDateString('ru');\r\n let parserDepartureDate = Date.parse(departureDate);\r\n let localeDepartureDate = new Date(parserDepartureDate).toLocaleDateString('ru');\r\n return `С ${localeArrivalDate} по ${localeDepartureDate}`;\r\n\r\n}\r\nfunction getRotationDateStringEn(rotation) {\r\n const { arrivalDate, departureDate } = rotation;\r\n if (isNullOrWhitespace(arrivalDate) && isNullOrWhitespace(departureDate)) {\r\n return null;\r\n }\r\n\r\n return `From ${arrivalDate} to ${departureDate}`;\r\n}\r\n","import React from 'react';\r\nimport { GridColumnMenuItemGroup, GridColumnMenuItemContent } from '@progress/kendo-react-grid';\r\nimport { save, close, selectPreferredEmail } from '../../LocalizationMessages';\r\nimport ReactDOM from 'react-dom';\r\n\r\nexport default class SelectPreferredEmailForm extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n emails: [],\r\n emailsExpanded: true\r\n };\r\n }\r\n\r\n onToggleColumn = (id) => {\r\n this.setState({\r\n emails: this.state.emails.map((email, idx) => {\r\n return idx === id ? { ...email, checked: true } : { ...email, checked: false };\r\n })\r\n });\r\n }\r\n\r\n onReset = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.props.togglePopup();\r\n }\r\n\r\n removeDupilcate(emails) {\r\n if (!emails || emails.length < 1) {\r\n return [];\r\n }\r\n emails.push(emails[0]);\r\n const unique = [...new Map(emails.map(item =>\r\n   [item.address, item])).values()]; \r\n return unique;\r\n }\r\n\r\n onSubmitPreferredEmail = (event) => {\r\n if (event) {\r\n event.preventDefault();\r\n }\r\n\r\n let selectedEmail = this.state.emails.filter(e => e.checked);\r\n if (selectedEmail.length === 0) {\r\n return;\r\n }\r\n let eAddress = selectedEmail[0].address;\r\n this.props.onSubmitPreferredEmail(eAddress);\r\n }\r\n\r\n\r\n handleClickOutside = (event) => {\r\n\r\n const domNode = ReactDOM.findDOMNode(this);\r\n\r\n if (!domNode || !domNode.contains(event.target)) {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.props.togglePopup();\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n document.addEventListener('click', this.handleClickOutside, true);\r\n\r\n let uniqueEmails = this.removeDupilcate(this.props.emails);\r\n this.setState({ emails: uniqueEmails });\r\n }\r\n\r\n componentWillUnmount() {\r\n document.removeEventListener('click', this.handleClickOutside, true);\r\n }\r\n render() {\r\n const localizationService = this.props.localizationService;\r\n return (\r\n\r\n
\r\n\r\n {\r\n this.props.showSpinner &&\r\n
\r\n Loading\r\n
\r\n
\r\n
\r\n }\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n {this.state.emails.map((email, idx) =>\r\n (\r\n
\r\n \r\n { this.onToggleColumn(idx); }}\r\n />\r\n \r\n {email.address}\r\n \r\n \r\n
\r\n )\r\n )}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { emailUpdateSuccess, emailUpdateFailure } from '../../LocalizationMessages';\r\nimport { groupBy } from '@progress/kendo-data-query';\r\nimport { Popup } from '@progress/kendo-react-popup';\r\nimport { Tooltip } from '@progress/kendo-react-tooltip';\r\nimport { Notification, NotificationGroup } from '@progress/kendo-react-notification';\r\nimport PeopleApi from '../../api/WhitePagesApi';\r\nimport authProvider from '../../msal/AuthProvider';\r\n\r\nimport {\r\n normalizePhoneData,\r\n formatWorkLocation,\r\n isStringEmpty, \r\n} from '../common/functions';\r\nimport {buildLocationString} from '../common/methods';\r\nimport SelectPreferredEmailForm from './selectPreferredEmailForm';\r\n\r\n\r\nconst loadingLabel = (
\r\n Loading...\r\n
);\r\n\r\nclass ContactsTable extends React.Component {\r\n counter = 0;\r\n anchor = null;\r\n offset = { left: -50, top: 150 };\r\n state =\r\n {\r\n popupOpen: false,\r\n showNotification: false,\r\n updateSuccess: false,\r\n showSpinner: false\r\n }\r\n\r\n showSelectEmailIcon() {\r\n const { isCurrentUser } = this.props.personExtended;\r\n\r\n if (isCurrentUser) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n togglePopup = () => {\r\n this.setState(prevState => ({\r\n popupOpen: !prevState.popupOpen,\r\n showNotification: false\r\n }));\r\n }\r\n\r\n onSubmitPreferredEmail = (eAddress) => {\r\n\r\n this.setState({ showSpinner: true });\r\n PeopleApi.updatePreferredEmail(eAddress)\r\n .then(response => {\r\n this.setState({ showNotification: true, updateSuccess: true});\r\n })\r\n .catch(err => {\r\n this.setState({ showNotification: true, updateSuccess: false});\r\n })\r\n .finally(() => this.setState({ showSpinner: false, popupOpen:false }));\r\n }\r\n\r\n getRows(personExtended) {\r\n if (personExtended === null || personExtended === undefined) {\r\n return null;\r\n }\r\n let rows = [];\r\n const { phones } = personExtended;\r\n if (phones && phones.length > 0) {\r\n\r\n const normalizedPhones = normalizePhoneData(phones);\r\n let phoneGroups = groupBy(normalizedPhones, [{ field: 'type' }]);\r\n phoneGroups.forEach(group => {\r\n let numbers = getUniqueNumbersInPhonesGroup(group);\r\n let data = numbers.map(number => {\r\n return (

{number}

);\r\n });\r\n rows.push({\r\n header: group.value,\r\n data: data\r\n });\r\n });\r\n };\r\n const { emails } = personExtended;\r\n if (emails && emails.length > 0) {\r\n \r\n let prefEmails = emails.filter(e => (e.typeCode === 'Preferred'));\r\n if (prefEmails.length > 0) {\r\n let showSkypeIcon = false;\r\n let personalEmail = emails.filter(e => (e.typeCode === 'P'));\r\n if (personalEmail.length > 0) {\r\n showSkypeIcon = personalEmail[0].address === prefEmails[0].address;\r\n }\r\n let localizationService = this.context.localization;\r\n let personalEmailData =\r\n (\r\n \r\n \r\n \r\n {prefEmails[0].address}\r\n \r\n {\r\n showSkypeIcon &&\r\n \r\n \r\n }\r\n {\r\n this.showSelectEmailIcon() &&\r\n \r\n {\r\n this.anchor = svg;\r\n }}\r\n\r\n className='bi bi-gear' width='1em' height='1em' viewBox='0 0 16 16' fill='currentColor' xmlns='http://www.w3.org/2000/svg'>\r\n \r\n \r\n \r\n \r\n\r\n }\r\n {\r\n this.state.popupOpen &&\r\n \r\n \r\n \r\n }\r\n \r\n \r\n\r\n {\r\n this.state.showNotification &&\r\n this.state.updateSuccess &&\r\n this.setState({ showNotification: false })}\r\n >\r\n {localizationService.toLanguageString(emailUpdateSuccess, '')}\r\n \r\n }\r\n {\r\n this.state.showNotification &&\r\n !this.state.updateSuccess &&\r\n this.setState({ showNotification: false })}\r\n >\r\n {localizationService.toLanguageString(emailUpdateFailure, '')}\r\n \r\n }\r\n \r\n \r\n\r\n )\r\n\r\n rows.push(\r\n {\r\n header: 'email',\r\n data: personalEmailData\r\n\r\n }\r\n );\r\n }\r\n }\r\n const workLocation = ((personExtended).person || {}).workLocation;\r\n var locationText = formatWorkLocation(workLocation);\r\n if (locationText) {\r\n rows.push({ header: 'workLocation', data: locationText });\r\n }\r\n\r\n if(authProvider.showAccomodation()){\r\n if(this.props.loadingAccommodation){\r\n rows.push({ header: 'housing', data: loadingLabel });\r\n }\r\n else{\r\n let housingLocation = '';\r\n if(this.props.accomData){\r\n let {areaDescription,buildingDescription,room} = this.props.accomData;\r\n housingLocation = buildLocationString(areaDescription,buildingDescription,room);\r\n }\r\n rows.push({ header: 'housing', data: housingLocation });\r\n\r\n }\r\n }\r\n\r\n if (rows.length === 0) {\r\n return null;\r\n }\r\n return rows;\r\n }\r\n\r\n render() {\r\n\r\n const localizationService = this.context.localization;\r\n let counter = 1;\r\n\r\n const { personExtended } = this.props;\r\n\r\n let rows = this.getRows(personExtended);\r\n if (rows === null) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n rows.map(row => {\r\n return (\r\n \r\n \r\n \r\n {\r\n \r\n }\r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
{localizationService.toLanguageString('contactInfo', '')}
{localizationService.toLanguageString(row.header, '')}\r\n {row.data}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nregisterForLocalization(ContactsTable);\r\nexport default ContactsTable;\r\n\r\n\r\n\r\nfunction getUniqueNumbersInPhonesGroup(group) {\r\n let numbers = group.items.map(item => item.number)\r\n .filter(number => !isStringEmpty(number));\r\n numbers = Array.from(new Set(numbers));\r\n return numbers;\r\n}\r\n","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { currentLanguage, messages } from '../../LocalizationMessages';\r\nimport { TryParseInt, isNullOrWhitespace } from '../common/functions';\r\n\r\nclass JobRelatedTable extends React.Component {\r\n render() {\r\n let localizationService = this.context.localization;\r\n let currentLang = localizationService.toLanguageString(currentLanguage, 'en');\r\n let counter = 1;\r\n\r\n let person = (this.props.personExtended || {}).person;\r\n\r\n if (person === undefined) {\r\n return null;\r\n }\r\n let rows = [];\r\n\r\n rows.push({ header: 'userID', data: person.cai });\r\n rows.push({ header: 'networkId', data: person.networkId });\r\n rows.push({ header: 'badgeNumber', data: person.badgeNumber });\r\n\r\n let searchTypeData = messages[currentLang][person.searchType];\r\n rows.push({ header: 'searchType', data: searchTypeData });\r\n\r\n rows.push({ header: 'employmentType', data: ((person).employmentType || {}).name });\r\n if (person.employmentStatusName) {\r\n rows.push({ header: 'employmentStatusName', data: person.employmentStatusName })\r\n }\r\n rows.push(\r\n {\r\n header: 'employmentStartDate',\r\n data: formatDateString(person.employmentStartDate, currentLang)\r\n });\r\n if (person.employmentEndDate) {\r\n rows.push(\r\n {\r\n header: 'employmentEndDate',\r\n data: formatDateString(person.employmentEndDate, currentLang)\r\n });\r\n }\r\n rows.push(\r\n {\r\n header: 'timeInTCO',\r\n data: getTimeInTcoString(person.timeInTco, currentLang)\r\n });\r\n\r\n rows = rows.filter(r => r.data);\r\n if (rows.length === 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n rows.map(row => {\r\n return (\r\n \r\n \r\n \r\n {\r\n \r\n }\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
{localizationService.toLanguageString('jobRelatedInfo', '')}
{localizationService.toLanguageString(row.header, '')}\r\n {row.data}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nregisterForLocalization(JobRelatedTable);\r\nexport default JobRelatedTable;\r\n\r\nfunction formatDateString(dateInput, lang) {\r\n if (isNullOrWhitespace(dateInput)) {\r\n return '';\r\n }\r\n if (lang !== 'ru') {\r\n return dateInput;\r\n }\r\n let date = Date.parse(dateInput);\r\n return new Date(date).toLocaleDateString('ru');\r\n}\r\n\r\nfunction getTimeInTcoString(dateString, lang) {\r\n if (isNullOrWhitespace(dateString)) {\r\n return '';\r\n }\r\n\r\n if (lang === 'ru') {\r\n return getTimeInTcoRu(dateString);\r\n }\r\n return getTimeInTcoEn(dateString);\r\n}\r\nfunction getTimeInTcoEn(dateString) {\r\n let result = '';\r\n let dateArr = dateString.split('.');\r\n let year = TryParseInt(dateArr[0], 0);\r\n let month = TryParseInt(dateArr[1], 0);\r\n if (year > 0) {\r\n result += year > 1 ? `${year} years` : `${year} year`;\r\n }\r\n if (month > 0) {\r\n if (result) {\r\n result += ', '\r\n }\r\n result += month > 1 ? `${month} months` : `${month} month`;\r\n }\r\n result = result ? result : 'less than a month';\r\n return result;\r\n}\r\nfunction getTimeInTcoRu(dateString) {\r\n let result = '';\r\n let dateArr = dateString.split('.');\r\n let year = TryParseInt(dateArr[0], 0);\r\n let month = TryParseInt(dateArr[1], 0);\r\n if (year > 0) {\r\n if (year === 1) {\r\n result += `${year} год`;\r\n }\r\n else if (year > 1 && year < 5) {\r\n result += `${year} года`;\r\n }\r\n else {\r\n result += `${year} лет`;\r\n }\r\n }\r\n if (month > 0) {\r\n if (result) {\r\n result += ', '\r\n }\r\n if (month === 1) {\r\n result += `${month} месяц`;\r\n }\r\n else if (month > 1 && month < 5) {\r\n result += `${month} месяца`;\r\n }\r\n else {\r\n result += `${month} месяцев`;\r\n }\r\n }\r\n\r\n result = result ? result : 'меньше месяца';\r\n return result;\r\n}","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport {\r\n currentLanguage, infoUpdateInstruction,\r\n informationUpdateWpLink, infoUpdateInstructionWpHeader } from '../../LocalizationMessages';\r\n\r\nclass InformationUpdateTable extends React.Component {\r\n render() {\r\n const localizationService = this.context.localization;\r\n\r\n const informationUpdateLabel = localizationService.toLanguageString(infoUpdateInstruction, '');\r\n const informationUpdateLink = localizationService.toLanguageString(informationUpdateWpLink, '');\r\n const infoUpdateInstructionHeader = localizationService.toLanguageString(infoUpdateInstructionWpHeader, '');\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{infoUpdateInstructionHeader}
\r\n

\r\n \r\n \r\n {informationUpdateLabel}\r\n \r\n \r\n

\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nregisterForLocalization(InformationUpdateTable);\r\nexport default InformationUpdateTable;\r\n","import React from 'react';\r\nimport {registerForLocalization} from '@progress/kendo-react-intl';\r\nimport {\r\n currentLanguage,\r\n directSubordinates,\r\n fullName,\r\n fullNameAccessorField,\r\n hideSubordinates,\r\n jobTitle,\r\n phone,\r\n showSubordinates\r\n} from '../../LocalizationMessages';\r\nimport {getFormattedPhone, isNullOrWhitespace} from '../common/functions';\r\nimport emailImg from '../../images/email.png';\r\nimport * as REQUEST_STATUS from '../../api/RequestStatusCodes';\r\n\r\nclass OrgStructureTable extends React.Component {\r\n\r\n shouldComponentUpdate(){\r\n return true;\r\n }\r\n render() {\r\n const { props, context } = this;\r\n const localizationService = context.localization;\r\n const currentLang = localizationService.toLanguageString(currentLanguage, 'en');\r\n let counter = 1;\r\n let btnMessage = props.isSubordinatesOpen ? hideSubordinates : showSubordinates;\r\n\r\n const { personExtended } = props;\r\n if (personExtended === null) {\r\n return null;\r\n }\r\n\r\n const supervisor = personExtended.supervisor;\r\n let hasSubOrdinates = personExtended.person.hasSubOrdinate;\r\n if (!supervisor && !hasSubOrdinates) {\r\n return null;\r\n }\r\n\r\n let rows = [];\r\n if (supervisor) {\r\n const { englishName, cyrllicName, canonicalId } = supervisor;\r\n rows.push(\r\n {\r\n header: 'lineSupervisor',\r\n data: getPersonNameRow(englishName, cyrllicName, canonicalId, currentLang, props)\r\n });\r\n }\r\n\r\n if (!rows) {\r\n return null;\r\n }\r\n\r\n let tableHeaderClass = props.tableRows > 10 ? 'scroll-padding' : '';\r\n let fullNameAccessor = localizationService.toLanguageString(fullNameAccessorField, 'englishName');\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n rows.map(row => {\r\n return (\r\n \r\n\t\t\t\t\t\t\t\t\t\t\t\r\n \r\n {\r\n \r\n {row.data}\r\n \r\n }\r\n \r\n\t\t\t\t\t\t\t\t\t\t\t\t\t \r\n )\r\n })\r\n }\r\n {\r\n props.hasSubordinates &&\r\n \r\n \r\n \r\n \r\n }\r\n \r\n\r\n {\r\n props.isSubordinatesOpen &&\r\n props.tableRows.length > 0 &&\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n props.tableRows.map(data => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n\r\n\r\n \r\n }\r\n
{localizationService.toLanguageString('related', '')}
{localizationService.toLanguageString(row.header, '')}
{localizationService.toLanguageString(directSubordinates, '')}\r\n {\r\n props.fetchSubordinatesStatus !== REQUEST_STATUS.REQUESTED &&\r\n \r\n }\r\n {\r\n props.fetchSubordinatesStatus === REQUEST_STATUS.REQUESTED &&\r\n
\r\n Loading...\r\n
\r\n }\r\n
{localizationService.toLanguageString(fullName, '')}{localizationService.toLanguageString(jobTitle, '')}{localizationService.toLanguageString(phone, '')}
\r\n props.setImagePopup(e)}\r\n onClick={(event) => props.onPersonClick(event, data.canonicalId)}\r\n >\r\n {data[fullNameAccessor]}\r\n \r\n \r\n {data.positionName}\r\n \r\n {getFormattedPhone(data.primaryPhoneNumber)}\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n\r\n }\r\n}\r\n\r\nregisterForLocalization(OrgStructureTable);\r\nexport default OrgStructureTable;\r\n\r\n\r\nfunction getPersonNameRow(englishName, cyrllicName, canonicalId, currentLang, props) {\r\n if (isNullOrWhitespace(englishName) && isNullOrWhitespace(cyrllicName)) {\r\n return null;\r\n }\r\n let text = (currentLang === 'ru' && cyrllicName.length > 0) ? cyrllicName : englishName;\r\n if (isNullOrWhitespace(text)) {\r\n return null;\r\n }\r\n let url = `/details/${canonicalId}`\r\n return props.setImagePopup(e)}\r\n onClick={(event) => props.onPersonClick(event, canonicalId)}\r\n >\r\n {text}\r\n ;\r\n}\r\n\r\n\r\n\r\n\r\n\r\n","import React from 'react';\r\nimport {registerForLocalization} from '@progress/kendo-react-intl';\r\nimport PeopleApi from '../../api/WhitePagesApi';\r\nimport CompanyAndCCTable from './CompanyAndCCTable';\r\nimport {apiErrorNotification, notFound} from '../../LocalizationMessages';\r\nimport * as REQUEST_STATUS from '../../api/RequestStatusCodes';\r\nimport RotationsTable from './RotationsTable';\r\nimport ContactsTable from './ContactsTable';\r\nimport JobRelatedTable from './JobRelatedTable';\r\nimport InformationUpdateTable from './InformationUpdateTable';\r\nimport OrgStructureTable from './OrgStructTable';\r\nimport authProvider from '../../msal/AuthProvider';\r\nimport $ from 'jquery';\r\n\r\nimport {clearPopupTimeout, getFullPopupContent, getOnlyImagePopupContent, setAsyncTimeout,} from '../common/functions';\r\n\r\nclass PersonDetailsPage extends React.Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n this.state = {\r\n loadingAccommodation: false,\r\n accommodationData: null,\r\n personExtended: null,\r\n IsLoading: true,\r\n FirstVisit: true,\r\n ResponseStatus: 200,\r\n englishFullName: '',\r\n cyrillicFullName: '',\r\n networkId: '',\r\n position: '',\r\n hasSubordinates: false,\r\n isSubordinatesOpen: false,\r\n subordinates: [],\r\n fetchSubordinatesStatus: REQUEST_STATUS.NOT_REQUESTED\r\n }\r\n }\r\n\r\n getSubordinates = () => {\r\n let personId = this.props.match.params.id;\r\n if (this.state.subordinates.length > 0) {\r\n this.setState((prevState) => ({ isSubordinatesOpen: !prevState.isSubordinatesOpen }));\r\n return;\r\n }\r\n this.setState((prevState) =>\r\n ({\r\n isSubordinatesOpen: !prevState.isSubordinatesOpen,\r\n fetchSubordinatesStatus: REQUEST_STATUS.REQUESTED\r\n })\r\n );\r\n PeopleApi.getDirectReports(personId)\r\n .then(data => {\r\n if (this.props.match.params.id === personId) {\r\n this.setState({ subordinates: data.data, fetchSubordinatesStatus: REQUEST_STATUS.COMPLETED });\r\n }\r\n })\r\n .catch(() => {\r\n if (this.props.match.params.id === personId) {\r\n this.setState({ hasSubordinates: false, fetchSubordinatesStatus: REQUEST_STATUS.COMPLETED });\r\n }\r\n });\r\n }\r\n\r\n fetchAccommodation = (personId) => {\r\n this.setState({accommodationData: null, loadingAccommodation: true });\r\n\r\n PeopleApi.getEmployeeAccommodation(personId).then(accommodationData => {\r\n this.setState({accommodationData, loadingAccommodation:false});\r\n }).catch(() => {\r\n this.setState({ loadingAccommodation:false });\r\n });\r\n }\r\n\r\n fetchPersonDetails = (personId) => {\r\n\r\n this.setState({ IsLoading: true });\r\n if (authProvider.showAccomodation()) {\r\n this.fetchAccommodation(personId);\r\n }\r\n $('.popover').popover('hide');\r\n PeopleApi.getPersonExtended(personId).then(data => {\r\n const newState = {\r\n personExtended: data,\r\n IsLoading: false,\r\n FirstVisit: false,\r\n ResponseStatus: 200,\r\n englishFullName: data.person.englishName,\r\n cyrillicFullName: data.person.cyrllicName,\r\n networkId: data.person.networkId,\r\n position: data.person.position.name,\r\n hasSubordinates: data.person.hasSubOrdinate,\r\n subordinates: [],\r\n isSubordinatesOpen: false,\r\n fetchSubordinatesStatus: REQUEST_STATUS.NOT_REQUESTED\r\n };\r\n this.setState({FirstVisit: true}, () => this.setState({ ...newState }));\r\n }).catch(err => {\r\n this.setState({\r\n ResponseStatus: err.status,\r\n IsLoading: false,\r\n FirstVisit: true\r\n });\r\n });\r\n }\r\n selectNewPerson = (event, personId) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.props.history.push('/details/' + personId);\r\n }\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n let newPersonId = newProps.match.params.id;\r\n let currentPersonId = this.props.match.params.id;\r\n if (currentPersonId === newPersonId) {\r\n return;\r\n }\r\n this.fetchPersonDetails(newPersonId);\r\n }\r\n\r\n componentDidMount() {\r\n let personId = this.props.match.params.id;\r\n this.fetchPersonDetails(personId);\r\n }\r\n\r\n setImagePopup = (e) => {\r\n e.persist();\r\n const { localization } = this.context;\r\n const popoverOptions = \r\n {\r\n trigger: 'manual',\r\n html: true,\r\n animation: true,\r\n placement: 'auto',\r\n boundary: 'window',\r\n container:'body',\r\n content:'',\r\n title:''\r\n };\r\n $(e.target).popover(popoverOptions);\r\n let id = $(e.target).data('id');\r\n window.popupId = id;\r\n clearPopupTimeout();\r\n window.popupTimeout = setTimeout(async () => {\r\n $(e.target).attr('data-content', getOnlyImagePopupContent(id)).popover('show');\r\n let response = await PeopleApi.getPersonExtended(id)\r\n .catch(() => {\r\n $(e.target).popover('hide');\r\n });\r\n\r\n if (window.popupId !== id) {\r\n $(e.target).popover('hide');\r\n return;\r\n }\r\n\r\n $(e.target).attr('data-content', getFullPopupContent(response, localization));\r\n $(e.target).popover('show');\r\n $('.popover').on('mouseleave', async function () {\r\n clearPopupTimeout();\r\n await setAsyncTimeout(400);\r\n if (!$('.popover:hover').length) {\r\n $(this).popover('hide');\r\n }\r\n });\r\n }, 400);\r\n\r\n $(e.target).on('mouseleave', async function () {\r\n clearPopupTimeout();\r\n await setAsyncTimeout(200);\r\n if (!$('.popover:hover').length) {\r\n $(this).popover('hide');\r\n }\r\n });\r\n }\r\n \r\n\r\n render() {\r\n const { IsLoading, FirstVisit, ResponseStatus } = this.state;\r\n\r\n let failureMessage = ResponseStatus === 404 ? notFound : apiErrorNotification;\r\n\r\n\r\n const localizationService = this.context.localization;\r\n const personImageComponent = (\r\n
\r\n
\r\n

{this.state.englishFullName}

\r\n

{this.state.cyrillicFullName}

\r\n

{this.state.position}

\r\n
\r\n
\r\n );\r\n return (\r\n \r\n {\r\n IsLoading &&
\r\n }\r\n {\r\n (!IsLoading && ResponseStatus !== 200) &&\r\n
\r\n \r\n {localizationService.toLanguageString(failureMessage, '')}\r\n \r\n
\r\n }\r\n {(!FirstVisit && ResponseStatus === 200) &&\r\n
\r\n
\r\n {personImageComponent}\r\n
\r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n }\r\n \r\n\r\n );\r\n }\r\n}\r\nregisterForLocalization(PersonDetailsPage);\r\nexport default PersonDetailsPage;\r\n","import {\r\n SELECT_FILTER,\r\n TEXT_INPUT_FILTER,\r\n AUTO_COMPLETE_TEXT_FILTER,\r\n COST_CENTER_FILTER,\r\n CHECKBOX_FILTER,\r\n HOME_COMPANY_FILTER\r\n} from './filterTypes';\r\n\r\nexport const FILTERS_VERSION = '18';\r\n\r\nexport default [\r\n {\r\n name: 'firstName',\r\n active: true,\r\n filterType: TEXT_INPUT_FILTER,\r\n value: '',\r\n order: 1,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '[A-Za-zА-Яа-я\\'.-]+',\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'lastName',\r\n active: true,\r\n filterType: TEXT_INPUT_FILTER,\r\n value: '',\r\n order: 2,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '[A-Za-zА-Яа-я\\'.-]+',\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'cai',\r\n active: true,\r\n filterType: TEXT_INPUT_FILTER,\r\n value: '',\r\n order: 3,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '[A-Za-z]+',\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'badgeNumber',\r\n active: true,\r\n filterType: TEXT_INPUT_FILTER,\r\n value: '',\r\n order: 4,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '[0-9]+',\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'networkId',\r\n active: false,\r\n filterType: TEXT_INPUT_FILTER,\r\n value: '',\r\n order: -1,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '[A-Za-z]+',\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'phone',\r\n active: true,\r\n filterType: TEXT_INPUT_FILTER,\r\n value: '',\r\n order: 5,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '[0-9]+',\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'email',\r\n active: true,\r\n filterType: TEXT_INPUT_FILTER,\r\n value: '',\r\n order: 6,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '^[^%]+$',\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'searchType',\r\n active: false,\r\n isLocaleAvailable: true,\r\n fetchOptionsFromServer: false,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [\r\n { name: 'employee', code: 'E' },\r\n { name: 'contractor', code: 'S' },\r\n //{ name: 'allActive', code: 'A' },\r\n { name: 'exEmployees', code: 'X' }\r\n ],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'employmentTypeCode',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'isActive',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: CHECKBOX_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: false,\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'rotationStatus',\r\n active: false,\r\n isLocaleAvailable: true,\r\n fetchOptionsFromServer: false,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [\r\n { name: 'onRotation', code: true },\r\n { name: 'offRotation', code: false }\r\n ],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'positionName',\r\n active: false,\r\n filterType: AUTO_COMPLETE_TEXT_FILTER,\r\n value: '',\r\n order: -1,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '^[^%]+$',\r\n optionGroup: 'employeeDetails'\r\n },\r\n {\r\n name: 'supervisor',\r\n active: false,\r\n filterType: TEXT_INPUT_FILTER,\r\n value: '',\r\n order: -1,\r\n defaultValue: '',\r\n required: true,\r\n minLength: 1,\r\n pattern: '^([0-9]{1,8})|([a-zA-Z]+)$',\r\n optionGroup: 'employeeDetails'\r\n },\r\n\r\n {\r\n name: 'costCenterName',\r\n active: false,\r\n filterType: COST_CENTER_FILTER,\r\n value: '',\r\n order: -1,\r\n defaultValue: '',\r\n required: false,\r\n minLength: 0,\r\n pattern: '^[^%]+$',\r\n optionGroup: 'organization'\r\n },\r\n\r\n {\r\n name: 'division',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'organization'\r\n },\r\n {\r\n name: 'group',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'organization'\r\n },\r\n {\r\n name: 'department',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'organization'\r\n },\r\n {\r\n name: 'homeCompanyName',\r\n active: false,\r\n filterType: HOME_COMPANY_FILTER,\r\n value: '',\r\n order: -1,\r\n defaultValue: '',\r\n required: false,\r\n minLength: 0,\r\n pattern: '^[^%]+$',\r\n optionGroup: 'organization'\r\n },\r\n {\r\n name: 'wlAreaCode',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'location'\r\n },\r\n {\r\n name: 'wlBuildingCode',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'location'\r\n },\r\n {\r\n name: 'wlRoom',\r\n active: false,\r\n value: '',\r\n filterType: TEXT_INPUT_FILTER,\r\n order: -1,\r\n defaultValue: '',\r\n required: true,\r\n pattern: '^[^%]+$',\r\n optionGroup: 'location'\r\n },\r\n {\r\n name: 'accommodationAreaDescription',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'location'\r\n },\r\n {\r\n name: 'accommodationBuildingDescription',\r\n active: false,\r\n isLocaleAvailable: false,\r\n fetchOptionsFromServer: true,\r\n filterType: SELECT_FILTER,\r\n value: '',\r\n order: -1,\r\n options: [],\r\n defaultValue: '',\r\n required: true,\r\n optionGroup: 'location'\r\n },\r\n {\r\n name: 'accommodationRoom',\r\n active: false,\r\n value: '',\r\n filterType: TEXT_INPUT_FILTER,\r\n order: -1,\r\n defaultValue: '',\r\n required: true,\r\n pattern: '^[^%]+$',\r\n optionGroup: 'location'\r\n }\r\n];\r\n","export const SELECT_FILTER = 'SELECT_FILTER';\r\nexport const CHECKBOX_FILTER = 'CHECKBOX_FILTER';\r\nexport const ONLY_SELECT_FILTER = 'ONLY_SELECT_FILTER';\r\nexport const TEXT_INPUT_FILTER = 'TEXT_INPUT_FILTER';\r\nexport const AUTO_COMPLETE_TEXT_FILTER = 'AUTO_COMPLETE_TEXT_FILTER';\r\nexport const COST_CENTER_FILTER = 'COST_CENTER_FILTER';\r\nexport const HOME_COMPANY_FILTER = 'HOME_COMPANY_FILTER';","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { formatError } from '../../../LocalizationMessages';\r\n\r\n\r\nclass TextFilter extends React.Component {\r\n render() {\r\n const { name, pattern, minLength } = this.props.filter;\r\n const localizationService = this.context.localization;\r\n let label = localizationService.toLanguageString(name, '');\r\n const errorMessage = localizationService.toLanguageString(formatError);\r\n\r\n return (\r\n \r\n \r\n
\r\n {errorMessage}\r\n
\r\n
\r\n );\r\n }\r\n}\r\nregisterForLocalization(TextFilter);\r\n\r\nexport default TextFilter;","import React from 'react';\r\nimport { AutoComplete } from '@progress/kendo-react-dropdowns';\r\nimport PeopleAPI from '../../../api/WhitePagesApi';\r\nimport * as CONFIG from '../../../appconfigs';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { formatError, emptyField } from '../../../LocalizationMessages';\r\nimport {nullOrUndefined} from '../../common/functions'\r\n\r\nclass AutocompleteTextFilter extends React.Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n this.state = {\r\n autocompletedata: [],\r\n loading: false,\r\n isListOpen: false,\r\n isBlured: false,\r\n inputText: ''\r\n }\r\n }\r\n\r\n onFocus = () => {\r\n this.setState({ isBlured: false })\r\n }\r\n onBlur = () => { \r\n this.setState({ isListOpen: false, isBlured: true })\r\n }\r\n\r\n validateInput = (value) => {\r\n if(nullOrUndefined(value)){\r\n return false;\r\n }\r\n let regex = new RegExp(this.props.filter.pattern);\r\n return value.match(regex);\r\n }\r\n\r\n onChange = (event) => {\r\n if (this.timeout) clearTimeout(this.timeout);\r\n let searchValue = event.target.value;\r\n const { filter } = this.props;\r\n if (searchValue.trim().length === 0) {\r\n this.setState({ isListOpen: false, loading: false, inputText: '' });\r\n }\r\n else if ((event.nativeEvent.type === 'keydown' && event.nativeEvent.key === 'Enter') ||\r\n event.nativeEvent.type === 'click') {\r\n this.setState({ isListOpen: false, loading: false, inputText: searchValue });\r\n }\r\n else {\r\n this.setState({ inputText: searchValue, isListOpen: false});\r\n if(this.validateInput(searchValue)){\r\n this.timeout = setTimeout(() => {\r\n this.setState({ loading: true });\r\n PeopleAPI.searchAutocompleteText(filter.name, searchValue).then(autocompleteData => {\r\n this.setState((pervState) => { return { autocompleteData: autocompleteData, loading: false, isListOpen: !pervState.isBlured } });\r\n })\r\n .catch(err => {\r\n this.setState((pervState) => { return { autocompleteData: [], loading: false, isListOpen: !pervState.isBlured } });\r\n });\r\n }, CONFIG.ON_INPUT_CHANGE_REQUEST_DELAY_TIME);\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const {name} = this.props.filter;\r\n const localizationService = this.context.localization;\r\n let isEmpty = this.state.inputText.trim().length === 0;\r\n const errorMessage = localizationService.toLanguageString(isEmpty ? emptyField : formatError, '');\r\n let label = localizationService.toLanguageString(name, '');\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\nregisterForLocalization(AutocompleteTextFilter);\r\n\r\nexport default AutocompleteTextFilter;","import React from 'react';\r\nimport PeopleAPI from '../../../api/WhitePagesApi';\r\nimport { ComboBox } from '@progress/kendo-react-dropdowns';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { optionIsNotSelected } from '../../../LocalizationMessages';\r\nimport { filterBy } from '@progress/kendo-data-query';\r\n\r\nclass SelectFilter extends React.Component {\r\n state = {\r\n loading: false,\r\n allData: [],\r\n value: '',\r\n data: []\r\n }\r\n\r\n changeSelectOption = (selectedItem) => {\r\n if (!selectedItem) {\r\n return;\r\n }\r\n this.setState({ value: selectedItem.code });\r\n }\r\n\r\n setOrGetOptions() {\r\n if (this.props.filter.fetchOptionsFromServer) {\r\n this.setState({ loading: true, value: this.props.filter.value });\r\n PeopleAPI.getOptions(this.props.filter.name).then(allData => {\r\n let filterName = this.props.filter.name;\r\n if(includeCodeToName(filterName)){\r\n allData.forEach(option => {\r\n option.name = `${option.code} - ${option.name}`\r\n });\r\n }\r\n else if(nameAsValue(filterName)){\r\n allData.forEach(option => {\r\n option.code = option.name\r\n });\r\n }\r\n this.setState({ allData, loading: false, data: allData });\r\n });\r\n return;\r\n }\r\n\r\n this.setState({\r\n allData: this.props.filter.options,\r\n loading: false,\r\n data: this.props.filter.options,\r\n value: this.props.filter.value\r\n });\r\n }\r\n\r\n componentDidMount() {\r\n this.setOrGetOptions();\r\n }\r\n\r\n filterChange = (event) => {\r\n this.setState({\r\n data: this.filterData(event.filter),\r\n loading: false\r\n });\r\n }\r\n\r\n filterData(filter) {\r\n const data = this.state.allData.slice();\r\n return filterBy(data, filter);\r\n }\r\n\r\n render() {\r\n const localizationService = this.context.localization;\r\n const data = this.props.filter.isLocaleAvailable ?\r\n this.state.data.map(o => {\r\n return {\r\n code: o.code,\r\n name: localizationService.toLanguageString(o.name, '')\r\n }\r\n })\r\n :\r\n this.state.data;\r\n let label = localizationService.toLanguageString(this.props.filter.name, '');\r\n return (\r\n \r\n { this.changeSelectOption(event.target.value) }}\r\n validationMessage={localizationService.toLanguageString(optionIsNotSelected, '')}\r\n filterable={true}\r\n onFilterChange={this.filterChange}\r\n suggest={true}\r\n placeholder={label}\r\n />\r\n \r\n \r\n );\r\n }\r\n}\r\nregisterForLocalization(SelectFilter);\r\nexport default SelectFilter;\r\n\r\nfunction includeCodeToName(filterName){\r\n return (filterName === 'division' ||\r\n filterName === 'group' ||\r\n filterName === 'department'\r\n )\r\n}\r\n\r\nfunction nameAsValue(filterName){\r\n return (filterName === 'accommodationBuildingDescription' ||\r\n filterName === 'accommodationAreaDescription')\r\n}","import React from 'react';\r\nimport { TreeView } from '@progress/kendo-react-treeview';\r\nimport { AutoComplete } from '@progress/kendo-react-dropdowns';\r\nimport '@progress/kendo-theme-default/dist/all.css';\r\nimport PeopleAPI from '../../../api/WhitePagesApi';\r\nimport * as CONFIG from '../../../appconfigs';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { includeInactive, includeAFE, search, reset, costCenterHierarchy } from '../../../LocalizationMessages';\r\nimport $ from 'jquery';\r\n\r\nconst ROOT_COST_CENTER_CODE = '10000';\r\nconst MAX_NUM_OF_SELECTED_ITEMS = 50;\r\n\r\nclass CostCenterTreeView extends React.Component {\r\n state = {\r\n data: [],\r\n includeInactive: false,\r\n includeAFE: false,\r\n includeHomeCCOnly: false,\r\n initialLoad: false,\r\n loading: false,\r\n autocompleteData: [],\r\n isListOpen: false,\r\n isBlured: false,\r\n inputText: '',\r\n itemToFocus: null,\r\n isGetBranchDisabled: true,\r\n isInputDisabled: true\r\n };\r\n\r\n expandedItems = [ROOT_COST_CENTER_CODE];\r\n selectedCostCenterCodes = [];\r\n shouldScroll = false;\r\n\r\n scrollTreeBodyToFocusedItem = () => {\r\n const { itemToFocus } = this.state;\r\n if (this.shouldScroll && itemToFocus !== null) {\r\n this.shouldScroll = false;\r\n let itemText = `${itemToFocus.code} - ${itemToFocus.name}`;\r\n let queryStr = `#cost-center-tree-body li[aria-checked='true']:contains(${itemText})`;\r\n let targetElement = $(queryStr);\r\n if (targetElement.length > 0) {\r\n $(targetElement).get(0).scrollIntoView();\r\n }\r\n }\r\n }\r\n\r\n getBranch = (event) => {\r\n event.preventDefault();\r\n const itemToFocuseCode = this.state.itemToFocus.code;\r\n if (itemToFocuseCode === ROOT_COST_CENTER_CODE) {\r\n this.shouldScroll = true;\r\n this.forceUpdate();\r\n }\r\n this.setState({ isInputDisabled: true });\r\n PeopleAPI.getCostCenterBranch(itemToFocuseCode).then(data => {\r\n let newData = Object.assign([], this.state.data);\r\n newData[0].items = newData[0].items.map(item => {\r\n if (data.code === item.code) {\r\n return this.getMergedBranch(item, data, itemToFocuseCode);\r\n }\r\n return item;\r\n });\r\n this.shouldScroll = true;\r\n this.expandItemsFromTargetToRoot(itemToFocuseCode, newData[0]);\r\n this.setState({ data: newData, isGetBranchDisabled: true, isInputDisabled: false });\r\n });\r\n }\r\n\r\n getMergedBranch(oldBranch, newBranch, targetItemCode) {\r\n let target = searchTree(newBranch, targetItemCode);\r\n if (target.parentCode === ROOT_COST_CENTER_CODE) {\r\n return oldBranch;\r\n }\r\n let parentElementInOldBranch = searchTree(oldBranch, target.parentCode);\r\n while (parentElementInOldBranch === null) {\r\n target = searchTree(newBranch, target.parentCode);\r\n parentElementInOldBranch = searchTree(oldBranch, target.parentCode);\r\n }\r\n\r\n if (parentElementInOldBranch.items) {\r\n parentElementInOldBranch.items = parentElementInOldBranch.items.map(item => {\r\n if (item.code === targetItemCode) {\r\n return target;\r\n }\r\n return item;\r\n });\r\n }\r\n else {\r\n parentElementInOldBranch.items = searchTree(newBranch, parentElementInOldBranch.code).items;\r\n }\r\n return oldBranch;\r\n }\r\n\r\n expandItemsFromTargetToRoot = (targetItemCode, tree) => {\r\n if (targetItemCode === ROOT_COST_CENTER_CODE) {\r\n this.expandedItems = this.updateExpandedItems(targetItemCode, true);\r\n return;\r\n }\r\n let target = searchTree(tree, targetItemCode);\r\n if (target !== null) {\r\n while (target.parentCode) {\r\n this.expandedItems = this.updateExpandedItems(target.parentCode, true);\r\n target = searchTree(tree, target.parentCode);\r\n }\r\n }\r\n }\r\n\r\n onExpandChange = (event) => {\r\n this.expandedItems = this.updateExpandedItems(event.item.code, !event.item.expanded);\r\n const { category } = this.copyDataAndCategory(event.item.code);\r\n !category.items && this.loadCostCenters(event.item.code);\r\n this.forceUpdate();\r\n }\r\n\r\n loadCostCenters(costCenterCode) {\r\n PeopleAPI.getChildCostCenters(costCenterCode).then(response => {\r\n const { data, category } = this.copyDataAndCategory(costCenterCode);\r\n category.items = Object.assign([], response);\r\n this.setState({ data });\r\n });\r\n }\r\n\r\n copyDataAndCategory(costCenterCode) {\r\n let data = this.state.data.slice();\r\n let targetElement = searchTree(data[0], costCenterCode);\r\n let parentElement = searchTree(data[0], targetElement.parentCode);\r\n let targetElementIndex = parentElement.items.indexOf(targetElement);\r\n\r\n const category = parentElement.items[targetElementIndex] = { ...parentElement.items[targetElementIndex] };\r\n return { data, category };\r\n }\r\n\r\n toggleCheckboxState = (name) => {\r\n this.setState((prevState) => {\r\n return { [name]: !prevState[name] };\r\n });\r\n }\r\n\r\n onCheckChange = (event) => {\r\n let selectedCostCenterCodes = this.updateselectedCostCenterCodes(event.item.code, !event.item.checked);\r\n this.selectedCostCenterCodes = selectedCostCenterCodes;\r\n this.props.setCostCenterCodes(selectedCostCenterCodes);\r\n }\r\n\r\n onSearch = () => {\r\n this.setState((prevState) => { return { showSearchBox: !prevState.showSearchBox } });\r\n }\r\n\r\n onReset = (event) => {\r\n event.preventDefault();\r\n this.setState({ initialLoad: true });\r\n this.props.setCostCenterCodes([]);\r\n this.expandedItems = [ROOT_COST_CENTER_CODE];\r\n PeopleAPI.getRootCostCenters()\r\n .then(rootCostCenter => {\r\n this.setState({ data: [rootCostCenter], initialLoad: false });\r\n });\r\n }\r\n\r\n\r\n onItemClick = (event) => {\r\n event.item.selected = !event.item.selected;\r\n this.forceUpdate();\r\n }\r\n\r\n getfilteredCostCenters = () => {\r\n let { data, includeInactive, includeAFE, includeHomeCCOnly } = this.state;\r\n return this.filter(data, includeInactive, includeAFE, includeHomeCCOnly);\r\n }\r\n\r\n onFocus = () => {\r\n this.setState({ isBlured: false });\r\n }\r\n onBlur = () => {\r\n this.setState({ isListOpen: false, isBlured: true });\r\n }\r\n\r\n onChange = (event) => {\r\n if (this.timeout) clearTimeout(this.timeout);\r\n let searchValue = event.target.value;\r\n if (searchValue.trim().length === 0) {\r\n this.setState({ isListOpen: false, loading: false, inputText: '', itemToFocus: null, isGetBranchDisabled: true });\r\n }\r\n else if ((event.nativeEvent.type === 'keydown' && event.nativeEvent.key === 'Enter') ||\r\n event.nativeEvent.type === 'click') {\r\n let itemToFocus = null;\r\n if (event.target.state.focusedItem) {\r\n itemToFocus = event.target.state.focusedItem;\r\n }\r\n else {\r\n try {\r\n itemToFocus = this.state.autocompleteData.filter(i => i.text === searchValue)[0];\r\n }\r\n catch (err) {\r\n }\r\n }\r\n\r\n let selectedCostCenterCodes = this.updateselectedCostCenterCodes(itemToFocus.code, true);\r\n this.selectedCostCenterCodes = selectedCostCenterCodes;\r\n let targetItem = searchTree(this.state.data[0], itemToFocus.code);\r\n let isGetBranchDisabled = false;\r\n if (targetItem !== null) {\r\n this.expandItemsFromTargetToRoot(itemToFocus.code, this.state.data[0]);\r\n this.shouldScroll = true;\r\n isGetBranchDisabled = true;\r\n }\r\n this.props.setCostCenterCodes(this.selectedCostCenterCodes);\r\n this.setState({ isListOpen: false, loading: false, inputText: searchValue, itemToFocus, isGetBranchDisabled });\r\n }\r\n else {\r\n this.setState({ inputText: searchValue, isListOpen: false, isGetBranchDisabled: true });\r\n this.timeout = setTimeout(() => {\r\n this.setState({ loading: true });\r\n PeopleAPI.searchCostCentersInHierarchy(searchValue, this.state.includeInactive, this.state.includeAFE, this.state.includeHomeCCOnly).then(autocompleteData => {\r\n autocompleteData = autocompleteData.map(item => {\r\n item.text = `${item.code} - ${item.name}`;\r\n return item;\r\n });\r\n this.setState((pervState) => { return { autocompleteData: autocompleteData, loading: false, isListOpen: !pervState.isBlured } });\r\n })\r\n .catch(err => {\r\n this.setState((pervState) => { return { autocompleteData: [], loading: false, isListOpen: !pervState.isBlured } });\r\n });\r\n }, CONFIG.ON_INPUT_CHANGE_REQUEST_DELAY_TIME);\r\n }\r\n }\r\n\r\n onSearchClick = (event) => {\r\n event.preventDefault();\r\n this.props.setCostCenterCodes(this.selectedCostCenterCodes);\r\n $('#form-submit').click();\r\n this.props.onClickClose();\r\n }\r\n\r\n filter = (arr, includeInactive, includeAFE, includeHomeCCOnly) => {\r\n let matches = [];\r\n if (!Array.isArray(arr)) return matches;\r\n\r\n arr.forEach(i => {\r\n\r\n if ((!includeInactive && !i.isActive) ||\r\n (!includeAFE && i.type === 'AFE') ||\r\n (includeHomeCCOnly && !i.hasActiveEmployee)) {\r\n this.selectedCostCenterCodes = this.updateselectedCostCenterCodes(i.code, false);\r\n return;\r\n }\r\n\r\n let hasChildren = false;\r\n if (i.hasCCChildren && i.isActive) {\r\n if (includeHomeCCOnly && !i.hasChildrenCCWithActiveEmployees) {\r\n hasChildren = false;\r\n }\r\n else {\r\n hasChildren = true;\r\n }\r\n }\r\n else if (i.hasInactiveCCChildren && includeInactive) {\r\n if (includeHomeCCOnly && !i.hasChildrenCCWithActiveEmployees) {\r\n hasChildren = false;\r\n }\r\n else {\r\n hasChildren = true;\r\n }\r\n }\r\n else if (i.hasAFEChildren && includeAFE) {\r\n if (includeHomeCCOnly && !i.hasChildrenAFEWithActiveEmployees) {\r\n hasChildren = false;\r\n }\r\n else {\r\n hasChildren = true;\r\n }\r\n }\r\n else if (i.hasInactiveAFEChildren && includeInactive && includeAFE) {\r\n if (includeHomeCCOnly && !i.hasChildrenAFEWithActiveEmployees) {\r\n hasChildren = false;\r\n }\r\n else {\r\n hasChildren = true;\r\n }\r\n }\r\n\r\n let checked = this.selectedCostCenterCodes.includes(i.code);\r\n let expanded = this.expandedItems.includes(i.code);\r\n //let disabled = (!checked && this.selectedCostCenterCodes.length >= 3) ? true : false;\r\n let childResults = this.filter(i.items, includeInactive, includeAFE, includeHomeCCOnly);\r\n\r\n matches.push(Object.assign({}, i, { items: childResults, hasChildren, checked, expanded }));\r\n });\r\n\r\n return matches;\r\n }\r\n\r\n updateExpandedItems = (itemCode, isExpanded) => {\r\n let expandedItems = [];\r\n if (isExpanded) {\r\n expandedItems = this.expandedItems.slice();\r\n expandedItems.push(itemCode);\r\n }\r\n else {\r\n expandedItems = this.expandedItems.filter(i => i !== itemCode);\r\n }\r\n return expandedItems;\r\n }\r\n\r\n updateselectedCostCenterCodes = (itemCode, isChecked) => {\r\n if (this.selectedCostCenterCodes.length >= MAX_NUM_OF_SELECTED_ITEMS && isChecked) {\r\n return this.selectedCostCenterCodes;\r\n }\r\n let selectedCostCenterCodes = [];\r\n if (isChecked) {\r\n selectedCostCenterCodes = this.selectedCostCenterCodes.slice();\r\n selectedCostCenterCodes.push(itemCode);\r\n }\r\n else {\r\n selectedCostCenterCodes = this.selectedCostCenterCodes.filter(i => i !== itemCode);\r\n }\r\n return selectedCostCenterCodes;\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ initialLoad: true });\r\n PeopleAPI.getRootCostCenters()\r\n .then(rootCostCenters => {\r\n rootCostCenters.expanded = true;\r\n this.setState({ data: [rootCostCenters], initialLoad: false, isInputDisabled: false });\r\n });\r\n }\r\n componentDidUpdate() {\r\n if (this.shouldScroll) {\r\n setTimeout(() => {\r\n this.scrollTreeBodyToFocusedItem();\r\n }, 700);\r\n }\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n this.selectedCostCenterCodes = newProps.selectedCostCenterCodes;\r\n }\r\n\r\n render() {\r\n if (!this.props.isTreeVisible) {\r\n return null;\r\n }\r\n const localizationService = this.context.localization;\r\n let data = this.getfilteredCostCenters();\r\n let isSearchBtnDisabled = this.props.selectedCostCenterCodes.length === 0;\r\n return (\r\n
\r\n\r\n
\r\n
\r\n
\r\n {localizationService.toLanguageString(costCenterHierarchy, '')}\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n [, props.item.text]\r\n }\r\n />\r\n
\r\n\r\n {\r\n this.state.initialLoad &&\r\n
\r\n Loading\r\n
\r\n
\r\n
\r\n }\r\n\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\nregisterForLocalization(CostCenterTreeView);\r\nexport default CostCenterTreeView;\r\n\r\nfunction searchTree(element, matchingCode) {\r\n if (element.code === matchingCode) {\r\n return element;\r\n }\r\n else if (element.items != null) {\r\n var i;\r\n var result = null;\r\n for (i = 0; result === null && i < element.items.length; i++) {\r\n result = searchTree(element.items[i], matchingCode);\r\n }\r\n return result;\r\n }\r\n return null;\r\n}\r\n\r\nfunction iconClassName(costCenter) {\r\n if (!costCenter.isActive) {\r\n return 'warning-icon';\r\n }\r\n else if (costCenter.type === 'CC') {\r\n return 'cc-icon';\r\n }\r\n return 'afe-icon'\r\n}\r\n","import React from 'react';\r\nimport { AutoComplete } from '@progress/kendo-react-dropdowns';\r\nimport CostCenterTreeView from './CostCenterTreeView';\r\nimport PeopleAPI from '../../../api/WhitePagesApi';\r\nimport * as CONFIG from '../../../appconfigs';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\n\r\nclass CostCenterFilter extends React.Component {\r\n\r\n state = {\r\n isTreeVisible: false,\r\n inputText: '',\r\n autocompleteData: [],\r\n loading: false,\r\n isListOpen: false,\r\n isBlured: false,\r\n value: '',\r\n selectedCostCenterCodes: []\r\n }\r\n\r\n onFocus = () => {\r\n this.setState({ isBlured: false });\r\n }\r\n onBlur = () => {\r\n this.setState({ isListOpen: false, isBlured: true });\r\n }\r\n\r\n validateInput = (value) => {\r\n if (value === undefined) {\r\n return false;\r\n }\r\n let regex = new RegExp(this.props.filter.pattern);\r\n return value.match(regex);\r\n }\r\n onSearchValChange = (event) => {\r\n if (this.timeout) clearTimeout(this.timeout);\r\n let searchValue = event.target.value;\r\n const { filter } = this.props;\r\n if (searchValue.trim().length === 0) {\r\n this.setState({ isListOpen: false, loading: false, inputText: '', selectedCostCenterCodes: [] });\r\n }\r\n else if ((event.nativeEvent.type === 'keydown' && event.nativeEvent.key === 'Enter') ||\r\n event.nativeEvent.type === 'click') {\r\n let value = ''\r\n try {\r\n value = this.state.autocompleteData.filter(i => i.text === searchValue)[0].name;\r\n }\r\n catch (err) {\r\n }\r\n this.setState({ isListOpen: false, loading: false, inputText: searchValue, value: value, selectedCostCenterCodes: [] });\r\n }\r\n else {\r\n this.setState({ inputText: searchValue, isListOpen: false, selectedCostCenterCodes: [] });\r\n if (this.validateInput(searchValue)) {\r\n this.timeout = setTimeout(() => {\r\n this.setState({ loading: true, value: '' });\r\n PeopleAPI.searchAutocompleteText(filter.name, searchValue).then(autocompleteData => {\r\n autocompleteData = autocompleteData.map(item => {\r\n item.text = `${item.code} - ${item.name}`;\r\n return item;\r\n });\r\n this.setState((pervState) => { return { autocompleteData: autocompleteData, loading: false, isListOpen: !pervState.isBlured, selectedCostCenterCodes: [] } });\r\n })\r\n .catch(err => {\r\n this.setState((pervState) => { return { autocompleteData: [], loading: false, isListOpen: !pervState.isBlured } });\r\n });\r\n }, CONFIG.ON_INPUT_CHANGE_REQUEST_DELAY_TIME);\r\n }\r\n }\r\n }\r\n\r\n showCloseTreeView = (visible) => {\r\n this.setState({ isTreeVisible: visible, inputText: '', value: '' });\r\n }\r\n\r\n setCostCenterCodes = (selectedCostCenterCodes) => {\r\n this.setState({ selectedCostCenterCodes });\r\n }\r\n\r\n getSelectedItemsCSV = () => {\r\n if (this.state.selectedCostCenterCodes.length > 0) {\r\n return this.state.selectedCostCenterCodes.join(',');\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setState({ inputText: this.props.filter.value })\r\n }\r\n\r\n render() {\r\n const localizationService = this.context.localization;\r\n const { value, inputText, isTreeVisible, selectedCostCenterCodes } = this.state;\r\n\r\n let inputName = selectedCostCenterCodes.length > 0 ? 'CostCenterCodeCSV' : this.props.filter.name;\r\n let inputValue = inputName === 'CostCenterCodeCSV' ? this.getSelectedItemsCSV() : (value ? value : inputText);\r\n let treeIconColor = inputName === 'CostCenterCodeCSV' ? '#449d44' : 'grey';\r\n let label = localizationService.toLanguageString(this.props.filter.name, '');\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n this.showCloseTreeView(false)}\r\n isTreeVisible={isTreeVisible}\r\n setCostCenterCodes={this.setCostCenterCodes}\r\n selectedCostCenterCodes={this.state.selectedCostCenterCodes}\r\n />\r\n\r\n \r\n \r\n );\r\n }\r\n}\r\nregisterForLocalization(CostCenterFilter);\r\n\r\nexport default CostCenterFilter;","import React from 'react';\r\nimport PeopleAPI from '../../../../api/WhitePagesApi';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { Tooltip } from '@progress/kendo-react-tooltip';\r\nimport Select from 'react-select';\r\nimport { nullOrUndefined } from '../../../common/functions';\r\nimport { includeInactive, homeCompany } from \"../../../../LocalizationMessages\";\r\n\r\nclass HomeCompanyFilter extends React.Component {\r\n\r\n constructor(props, context) {\r\n super(props, context);\r\n this.state = this.initialState;\r\n }\r\n\r\n state = {\r\n inputValue: '',\r\n value: '',\r\n inputText: '',\r\n selectedHomeCompanies: [],\r\n isLoading: true,\r\n includeInactive: true\r\n };\r\n\r\n initialState = {\r\n inputValue: '',\r\n value: '',\r\n inputText: '',\r\n data: [],\r\n isLoading: true,\r\n includeInactive: true\r\n }\r\n\r\n loadHomeCompanies = () => {\r\n return PeopleAPI.getActiveCompanies(this.state.includeInactive);\r\n }\r\n\r\n handleInputChange = (newValue) => {\r\n this.setState({ inputValue: newValue });\r\n return newValue;\r\n };\r\n\r\n handleChange = (selectedOptions) => {\r\n let values = [];\r\n selectedOptions.map((v) => values.push(v.value));\r\n this.setState( {selectedHomeCompanies:values });\r\n };\r\n\r\n componentDidMount() {\r\n this.loadHomeCompanies()\r\n .then(response => {\r\n this.updateStateWithTheResponse(response);\r\n });\r\n }\r\n\r\n updateStateWithTheResponse(response) {\r\n const newData = response.data.map(function (i) {\r\n return { value: i.code, label: i.name}\r\n });\r\n this.setState({\r\n data: newData.sort((a, b) => a.label.localeCompare(b.label)),\r\n isLoading: false\r\n });\r\n }\r\n\r\n getSelectedItemsCSV = () => {\r\n if (!nullOrUndefined(this.state.selectedHomeCompanies)) {\r\n return this.state.selectedHomeCompanies.join(',');\r\n }\r\n }\r\n\r\n toggleCheckboxState = () => {\r\n\r\n this.setState({\r\n includeInactive: !this.state.includeInactive,\r\n isLoading: !this.state.isLoading\r\n }, () => {\r\n\r\n this.loadHomeCompanies()\r\n .then(response => {\r\n this.updateStateWithTheResponse(response);\r\n });\r\n\r\n return this.state.includeInactive;\r\n });\r\n\r\n }\r\n\r\n render() {\r\n const { selectedHomeCompany, selectedHomeCompanies } = this.state;\r\n const localizationService = this.context.localization;\r\n let inputName = 'HomeCompanyCodeCsv';\r\n let inputValue = this.getSelectedItemsCSV(selectedHomeCompanies);\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n \r\n this.toggleCheckboxState()} \r\n />\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n}\r\n\r\nregisterForLocalization(HomeCompanyFilter);\r\n\r\nexport default HomeCompanyFilter;","import React from 'react';\r\nimport { Checkbox } from '@progress/kendo-react-inputs';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\n\r\nclass CheckboxFilter extends React.Component {\r\n state = {\r\n checked: false\r\n }\r\n\r\n onCheck = () => {\r\n this.setState((pervState) => { return { checked: !pervState.checked} });\r\n }\r\n\r\n render() {\r\n const localizationService = this.context.localization;\r\n let label = localizationService.toLanguageString(this.props.filter.name, '');\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\nregisterForLocalization(CheckboxFilter);\r\nexport default CheckboxFilter;","import React from 'react';\r\n\r\nconst RemoveFilterButton = ({ onClick }) =>\r\n
\r\n \r\n
\r\nexport default RemoveFilterButton;\r\n\r\n\r\n","import React from 'react';\r\nimport RemoveFilterButton from './RemoveFilterButton';\r\n\r\nconst ActiveFiltersLayout = (props) =>\r\n
\r\n
\r\n {props.children}\r\n props.deactivateFilter(props.filter.name)}\r\n />\r\n
\r\n
\r\n\r\nexport default ActiveFiltersLayout;\r\n","import React from 'react';\r\nimport TextFilter from './filter-components/TextFilter';\r\nimport AutocompleteTextFilter from './filter-components/AutocompleteTextFilter';\r\nimport SelectFilter from './filter-components/SelectFilter';\r\nimport CostCenterFilter from './filter-components/CostCenterFilter';\r\nimport HomeCompanyFilter from \"./filter-components/homeCompanyFilter/HomeCompanyFilter\";\r\nimport CheckboxFilter from './filter-components/CheckboxFilter';\r\nimport * as FilterType from './filterTypes';\r\nimport ActiveFiltersLayout from './filter-components/common/ActiveFiltersLayout';\r\n\r\nclass ActiveFilters extends React.Component {\r\n render() {\r\n let activeFilters = this.props.filters.filter(filter => { return filter.active });\r\n\r\n activeFilters.sort((filter1, filter2) => filter1.order - filter2.order);\r\n let filterComponents = activeFilters.map((filter) => {\r\n let coreFilter;\r\n switch (filter.filterType) {\r\n case FilterType.SELECT_FILTER:\r\n coreFilter = \r\n break;\r\n case FilterType.CHECKBOX_FILTER:\r\n coreFilter = \r\n break;\r\n\r\n case FilterType.AUTO_COMPLETE_TEXT_FILTER:\r\n coreFilter = \r\n break;\r\n\r\n case FilterType.COST_CENTER_FILTER:\r\n coreFilter = \r\n break;\r\n case FilterType.HOME_COMPANY_FILTER:\r\n coreFilter = \r\n break;\r\n default:\r\n coreFilter = \r\n break;\r\n }\r\n return \r\n {coreFilter}\r\n \r\n });\r\n\r\n return (\r\n
\r\n {filterComponents}\r\n
\r\n );\r\n }\r\n}\r\nexport default ActiveFilters;\r\n\r\n","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { search, reset, excelExport } from '../../LocalizationMessages';\r\nimport exportExcelImg from '../../images/excel-export.png';\r\n\r\nconst searchButtonStyle = { fontSize: '1rem' };\r\nclass MainControls extends React.Component {\r\n render() {\r\n const { props } = this;\r\n const localizationService = this.context.localization;\r\n\r\n const searchText = localizationService.toLanguageString(search, '');\r\n const resetLabel = localizationService.toLanguageString(reset, '');\r\n const excelExportLabel = localizationService.toLanguageString(excelExport, '');\r\n return (\r\n
\r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\nregisterForLocalization(MainControls);\r\nexport default MainControls;","import React from 'react';\r\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { selectFilter } from '../../LocalizationMessages';\r\n\r\nclass FilterSelector extends React.Component {\r\n defaultItem = {\r\n value: 'default',\r\n text: 'Select Filter',\r\n disabled: true\r\n }\r\n state = {\r\n isOpen: false\r\n }\r\n\r\n onOpen = () => {\r\n if (!this.state.isOpen) {\r\n this.setState({ isOpen: true })\r\n }\r\n }\r\n\r\n onClose = () => {\r\n if (this.state.isOpen) {\r\n this.setState({ isOpen: false })\r\n }\r\n }\r\n\r\n onChange = (event) => {\r\n let eventType = event.nativeEvent.type;\r\n if (eventType === 'keypress' || eventType === 'Enter' || eventType === 'click') {\r\n this.setState({ isOpen: false });\r\n this.props.activateFilter(event.target.value.value);\r\n }\r\n }\r\n\r\n onPlusCick = (itemIdex) => {\r\n this.props.activateFilter(this.props.filterOptions[itemIdex].value);\r\n }\r\n\r\n itemRender = (li, itemProps) => {\r\n const index = itemProps.index;\r\n const { isGroupLabel } = itemProps.dataItem;\r\n\r\n let itemChildren = isGroupLabel ?\r\n
{e.stopPropagation()}}\r\n >\r\n {li.props.children}\r\n
\r\n :\r\n
\r\n {li.props.children}\r\n \r\n
\r\n\r\n\r\n return React.cloneElement(li, li.props, itemChildren);\r\n }\r\n\r\n render() {\r\n const localizationService = this.context.localization;\r\n let defaultItem = { ...this.defaultItem };\r\n defaultItem.text = localizationService.toLanguageString(selectFilter, 'Select Filter');\r\n\r\n const { props } = this;\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\nregisterForLocalization(FilterSelector);\r\nexport default FilterSelector;","import React from 'react';\r\nimport ActiveFilters from '../ActiveFilters';\r\nimport MainControls from '../MainControls';\r\nimport FilterSelector from '../FilterSelector';\r\n\r\nclass FormControls extends React.Component {\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n {\r\n !this.props.clearFilters &&\r\n \r\n }\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default FormControls;","import React from 'react';\r\nimport filters, { FILTERS_VERSION } from './Filters';\r\nimport $ from 'jquery';\r\nimport ResultsGrid from '../common/resultsGrid';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport FormControls from './filter-components/FormControls';\r\nimport LoadingPanel from '../common/LoadingPanel';\r\nimport PeopleApi from '../../api/WhitePagesApi';\r\nimport NotFoundHelperLink from '../smartSearch/notFoundHelperLink';\r\nimport SliderNotification from '../common/SliderNotification';\r\nimport LoadingLabel from '../common/loadingLabel';\r\nimport ExpandTable from '../common/expandTable';\r\nimport {isNullOrWhitespace} from '../common/functions';\r\nimport authProvider from '../../msal/AuthProvider';\r\nimport {apiErrorNotification, emptyFieldNotification} from '../../LocalizationMessages';\r\nimport {\r\n onRowClick,\r\n toggleTableSize,\r\n onColumnReorder,\r\n formatDateString,\r\n onSortChange,\r\n trackScrolling,\r\n hasMoreDataToLoad,\r\n loadNextPage,\r\n toggleSortDirection,\r\n getInitialSortField,\r\n getSortDirectionLongValue,\r\n isSortByNameField,\r\n loadFirstPage,\r\n sortData,\r\n getNextPageIndex,\r\n updateStateWithTheResponse,\r\n addLocalizedFields,\r\n aggregateAndLocalizeDataForTable,\r\n getMergedMetadata,\r\n changeUrl,\r\n getStoredOrDefaultColumns,\r\n saveColumnsState,\r\n onColumnsSubmit,\r\n scrollHandler,\r\n getCurrentLanguage,\r\n showExpandIcon,\r\n hideExpandIcon,\r\n setNotificationTimeout,\r\n showNotification,\r\n hideNotification\r\n} from '../common/methods';\r\n\r\nconst ENLISH_NAME_FIELD = 'englishName';\r\nconst CYRILLIC_NAME_FIELD = 'cyrllicName';\r\n\r\nclass AdvancedSearch extends React.Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n this.state = this.initialState;\r\n }\r\n onRowClick = onRowClick.bind(this);\r\n toggleTableSize = toggleTableSize.bind(this);\r\n onColumnReorder = onColumnReorder.bind(this);\r\n formatDateString = formatDateString.bind(this);\r\n onSortChange = onSortChange.bind(this);\r\n trackScrolling = trackScrolling.bind(this);\r\n hasMoreDataToLoad = hasMoreDataToLoad.bind(this);\r\n loadNextPage = loadNextPage.bind(this);\r\n toggleSortDirection = toggleSortDirection.bind(this);\r\n getInitialSortField = getInitialSortField.bind(this);\r\n getSortDirectionLongValue = getSortDirectionLongValue.bind(this);\r\n isSortByNameField = isSortByNameField.bind(this);\r\n loadFirstPage = loadFirstPage.bind(this);\r\n sortData = sortData.bind(this);\r\n getNextPageIndex = getNextPageIndex.bind(this);\r\n updateStateWithTheResponse = updateStateWithTheResponse.bind(this);\r\n addLocalizedFields = addLocalizedFields.bind(this);\r\n aggregateAndLocalizeDataForTable = aggregateAndLocalizeDataForTable.bind(this);\r\n getMergedMetadata = getMergedMetadata.bind(this);\r\n changeUrl = changeUrl.bind(this);\r\n getStoredOrDefaultColumns = getStoredOrDefaultColumns.bind(this);\r\n saveColumnsState = saveColumnsState.bind(this);\r\n onColumnsSubmit = onColumnsSubmit.bind(this);\r\n scrollHandler = scrollHandler.bind(this);\r\n getCurrentLanguage = getCurrentLanguage.bind(this);\r\n showExpandIcon = showExpandIcon.bind(this);\r\n hideExpandIcon = hideExpandIcon.bind(this);\r\n setNotificationTimeout = setNotificationTimeout.bind(this);\r\n showNotification = showNotification.bind(this);\r\n hideNotification = hideNotification.bind(this);\r\n\r\n currentLang = this.getCurrentLanguage();\r\n sort = [\r\n { field: this.getInitialSortField(), dir: 'asc' }\r\n ];\r\n columsOrderChanged = false;\r\n searchQuery = '';\r\n\r\n initialState = {\r\n showExpand: false,\r\n tableExpanded: false,\r\n gridUpdateCounter: -1,\r\n filters: this.getStoredOrDefaultFilters(),\r\n requestingFirstPage: false,\r\n hideResultsTable: true,\r\n clearFilters: false,\r\n showNotification: false,\r\n notificationMessage:'',\r\n data: [],\r\n metadata: {\r\n pageIndex: 1,\r\n pageCount: 0,\r\n pageSize: 100,\r\n totalCount: -1,\r\n sortField: '',\r\n sortDirection: ''\r\n },\r\n columns: this.getStoredOrDefaultColumns(),\r\n loadingNextPage: false\r\n }\r\n\r\n getStoredOrDefaultFilters() {\r\n let result = filters;\r\n try {\r\n let storedFiltersVersion = localStorage.getItem('filtersVersion');\r\n if (storedFiltersVersion !== FILTERS_VERSION) {\r\n localStorage.removeItem('filtersVersion');\r\n localStorage.removeItem('storedFiltersState'); \r\n }\r\n else {\r\n let storedFiltersState = localStorage.getItem('storedFiltersState');\r\n if (storedFiltersState) {\r\n result = JSON.parse(storedFiltersState);\r\n }\r\n }\r\n }\r\n \r\n catch (err) {\r\n result = filters;\r\n }\r\n\r\n finally{\r\n if(!authProvider.showAccomodation()){\r\n result = result.filter(filter => filter.name !== 'accommodationRoom' &&\r\n filter.name !== 'accommodationBuildingDescription' &&\r\n filter.name !== 'accommodationAreaDescription'\r\n\r\n\r\n );\r\n }\r\n return result;\r\n }\r\n }\r\n saveFiltersState = (updatedFilters) => {\r\n try {\r\n localStorage.setItem('filtersVersion', FILTERS_VERSION);\r\n localStorage.setItem('storedFiltersState', JSON.stringify(updatedFilters));\r\n }\r\n catch (err) { }\r\n }\r\n activateFilter = (filterName) => {\r\n let updatedFilters = this.getFiltersAfterActivation(filterName, true);\r\n this.saveFiltersState(updatedFilters);\r\n this.setState({ filters: updatedFilters });\r\n }\r\n\r\n getFiltersAfterActivation(filterName) {\r\n let activeFiltersCount = this.getActiveFiltersCount();\r\n return this.state.filters.map(filter => {\r\n if (filterName === filter.name) {\r\n return { ...filter, ...{ active: true, order: activeFiltersCount + 1 } }\r\n }\r\n else {\r\n return filter;\r\n }\r\n });\r\n }\r\n deactivateFilter = (filterName) => { \r\n let updatedFilters = this.getFiltersAfterDeactivation(filterName);\r\n this.saveFiltersState(updatedFilters);\r\n this.setState({ filters: updatedFilters });\r\n }\r\n getFiltersAfterDeactivation(filterName) {\r\n return this.state.filters.map(filter => {\r\n if (filterName === filter.name) {\r\n return { ...filter, ...{ active: false, value: filter.defaultValue, order: -1 } }\r\n }\r\n else {\r\n return filter;\r\n }\r\n });\r\n }\r\n resetFilters = () => {\r\n this.searchQuery = '';\r\n this.requestInProgress = false;\r\n this.setState(\r\n { clearFilters: true, data: [], metadata: this.initialState.metadata, requestingFirstPage: false },\r\n () => this.setState({ clearFilters: false })\r\n );\r\n }\r\n\r\n onSubmitHandler = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.clearNotificationTimeout();\r\n let query = $('#advancedSearchForm').serialize();\r\n if (this.isQueryEmpty(query)) {\r\n this.showNotification(emptyFieldNotification);\r\n return;\r\n }\r\n\r\n if (this.searchQuery === query) {\r\n return;\r\n }\r\n\r\n this.searchQuery = query;\r\n this.loadFirstPage();\r\n }\r\n\r\n isQueryEmpty = (query) => {\r\n if (isNullOrWhitespace(query)) {\r\n return filters;\r\n }\r\n query = decodeURI(query);\r\n let pairs = (query[0] === '?' ? query.substr(1) : query).split('&');\r\n\r\n let result = pairs.some(pair => {\r\n let value = pair.split('=')[1];\r\n let result = !isNullOrWhitespace(value);\r\n return result;\r\n });\r\n\r\n return !result;\r\n }\r\n\r\n clearNotificationTimeout() {\r\n if (this.notificationTimeout){\r\n clearTimeout(this.notificationTimeout);\r\n }\r\n }\r\n\r\n getActiveFiltersCount() {\r\n return this.state.filters.filter(filter => { return filter.active; }).length;\r\n }\r\n\r\n getFiltersWithGroupLabels = () => {\r\n const localizationService = this.context.localization;\r\n let filterOptions = [];\r\n let addedLabels = [];\r\n this.state.filters.forEach(filter => {\r\n if (!filter.active) {\r\n if (addedLabels.indexOf(filter.optionGroup) === -1) {\r\n addedLabels.push(filter.optionGroup);\r\n let groupLabel = {\r\n value: '',\r\n text: localizationService.toLanguageString(filter.optionGroup, ''),\r\n isGroupLabel: true\r\n }\r\n filterOptions.push(groupLabel);\r\n }\r\n let option = {\r\n value: filter.name,\r\n text: localizationService.toLanguageString(filter.name, ''),\r\n isGroupLabel: false\r\n }\r\n filterOptions.push(option);\r\n }\r\n });\r\n return filterOptions;\r\n }\r\n\r\n\r\n requestData = () => {\r\n if (this.requestInProgress) {\r\n //perform only one request at a time\r\n return;\r\n }\r\n\r\n this.requestInProgress = true;\r\n let searchQuery = this.searchQuery;\r\n let loadingNextPage = !this.state.requestingFirstPage;\r\n this.setState({ loadingNextPage });\r\n PeopleApi.advancedSearch(...this.getRequestParameters())\r\n .then(response => {\r\n //input has changed since last request\r\n if (searchQuery !== this.searchQuery) {\r\n return;\r\n }\r\n this.requestInProgress = false;\r\n\r\n this.updateStateWithTheResponse(response);\r\n })\r\n .catch(err => {\r\n if (searchQuery !== this.searchQuery) {\r\n return;\r\n }\r\n this.showNotification(apiErrorNotification);\r\n this.setState({\r\n loadingNextPage:false,\r\n loadFirstPage:false\r\n })\r\n })\r\n .finally(() => this.requestInProgress = false);\r\n }\r\n\r\n getRequestParameters = () => {\r\n const { searchQuery } = this;\r\n let pageIndex = this.getNextPageIndex();\r\n const pageSize = this.state.metadata.pageSize;\r\n let reqTotalCount = this.state.requestingFirstPage;\r\n let sortField = this.sort[0].field;\r\n let sortDirection = this.getSortDirectionLongValue();\r\n return [\r\n searchQuery,\r\n pageIndex,\r\n pageSize,\r\n reqTotalCount,\r\n sortField,\r\n sortDirection\r\n ];\r\n }\r\n\r\n \r\n UNSAFE_componentWillReceiveProps(newProps) {\r\n if (newProps.language !== this.props.language) {\r\n if (this.isSortByNameField()) {\r\n let fullNameField = newProps.language === 'en' ? ENLISH_NAME_FIELD : CYRILLIC_NAME_FIELD;\r\n this.sort[0].field = fullNameField;\r\n this.onSortChange({ sort: this.sort });\r\n this.setState({ columns: this.getStoredOrDefaultColumns() });\r\n }\r\n this.setState({ gridUpdateCounter: this.state.gridUpdateCounter + 1 })\r\n }\r\n }\r\n\r\n export = () => {\r\n let query = this.searchQuery.replace(/[^=&]+=(&|$)/g,'').replace(/&$/,'');\r\n let sortField = this.sort[0].field;\r\n let sortDirection = this.getSortDirectionLongValue();\r\n let exportUrl = `/excel-export?${query}&sortField=${sortField}&sortDirection=${sortDirection}`;\r\n window.open(exportUrl, '_blank', 'resizable=0,width=460,height=200');\r\n }\r\n\r\n render() {\r\n const { requestingFirstPage, data, metadata, loadingNextPage, tableExpanded } = this.state;\r\n let filterOptions = this.getFiltersWithGroupLabels();\r\n return (\r\n \r\n \r\n
\r\n\r\n {\r\n requestingFirstPage && \r\n }\r\n {\r\n metadata.totalCount === 0 &&\r\n \r\n }\r\n
\r\n {\r\n data.length > 0 &&\r\n \r\n }\r\n {\r\n\r\n loadingNextPage &&\r\n \r\n }\r\n {\r\n this.state.showExpand &&\r\n \r\n }\r\n\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n\r\nregisterForLocalization(AdvancedSearch);\r\nexport default AdvancedSearch;\r\n\r\n","import React from 'react';\r\n\r\nclass ProgressBar extends React.Component {\r\n render() {\r\n const wrapperStyle = {width: '320px',margin: 'auto'};\r\n const width = this.props.loadPercent + '%';\r\n const barStyle = { width: width, height: '20px' };\r\n return (\r\n
\r\n
\r\n
\r\n {width}\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\nexport default ProgressBar;","import React from 'react';\r\nimport { ExcelExport, ExcelExportColumn } from '@progress/kendo-react-excel-export';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport PeopleApi from '../../api/WhitePagesApi';\r\nimport ProgressBar from '../advancedSearch/filter-components/excelExportProgressBar';\r\nimport { calculatePercentage } from '../common/functions';\r\nimport {\r\n formatDateString,\r\n hasMoreDataToLoad,\r\n loadNextPage,\r\n getInitialSortField,\r\n getSortDirectionLongValue,\r\n loadFirstPage,\r\n sortData,\r\n getNextPageIndex,\r\n updateStateWithTheResponse,\r\n getMergedMetadata,\r\n getStoredOrDefaultColumns,\r\n getCurrentLanguage,\r\n addLocalizedFields,\r\n aggregateAndLocalizeDataForTable\r\n} from '../common/methods';\r\nclass ExportToExcel extends React.Component {\r\n constructor(props, context) {\r\n super(props, context);\r\n this.state = this.initialState;\r\n }\r\n addLocalizedFields = addLocalizedFields.bind(this);\r\n getStoredOrDefaultColumns = getStoredOrDefaultColumns.bind(this);\r\n updateStateWithTheResponse = updateStateWithTheResponse.bind(this);\r\n getMergedMetadata = getMergedMetadata.bind(this);\r\n getNextPageIndex = getNextPageIndex.bind(this);\r\n formatDateString = formatDateString.bind(this);\r\n hasMoreDataToLoad = hasMoreDataToLoad.bind(this);\r\n loadNextPage = loadNextPage.bind(this);\r\n loadFirstPage = loadFirstPage.bind(this);\r\n getCurrentLanguage = getCurrentLanguage.bind(this);\r\n aggregateAndLocalizeDataForTable = aggregateAndLocalizeDataForTable.bind(this);\r\n getInitialSortField = getInitialSortField.bind(this);\r\n getSortDirectionLongValue = getSortDirectionLongValue.bind(this);\r\n sortData = sortData.bind(this);\r\n currentLang = this.getCurrentLanguage();\r\n storedColumns = this.getStoredOrDefaultColumns();\r\n sort = [\r\n { field: this.getInitialSortField(), dir: 'asc' }\r\n ];\r\n initialState = {\r\n loadPercentage: 0,\r\n data: [],\r\n requestingFirstPage: true,\r\n loadingNextPage: false,\r\n metadata: {\r\n pageIndex: 1,\r\n pageCount: 0,\r\n pageSize: 1000,\r\n totalCount: -1,\r\n sortField: '',\r\n sortDirection: ''\r\n },\r\n columns: this.getStoredOrDefaultColumns()\r\n }\r\n _export;\r\n export = () => {\r\n this._export.save();\r\n }\r\n\r\n getColumnsForExport() {\r\n return this.storedColumns.filter(item => item.show);\r\n }\r\n startLoading = () => {\r\n this.requestData();\r\n while (this.hasMoreDataToLoad()) {\r\n setTimeout(() => {\r\n this.requestData();\r\n }, 3)\r\n }\r\n }\r\n requestData = () => {\r\n if (this.requestInProgress) {\r\n //perform only one request at a time\r\n return;\r\n }\r\n\r\n this.requestInProgress = true;\r\n PeopleApi.advancedSearch(...this.getRequestParameters())\r\n .then(response => {\r\n this.requestInProgress = false;\r\n this.addCostCenterOwners(response.data);\r\n this.updateStateWithTheResponse(response);\r\n })\r\n .finally(() => this.requestInProgress = false);\r\n }\r\n addCostCenterOwners = (data) => {\r\n data.forEach(dataItem => {\r\n let primaryOwnerElEn = ''\r\n if (dataItem.primaryOwnerCanonicalId) {\r\n primaryOwnerElEn = dataItem.primaryOwnerEnglishName ? dataItem.primaryOwnerEnglishName : dataItem.primaryOwnerCyrllicName;\r\n }\r\n\r\n let secondaryOwnerElEn = '';\r\n if (dataItem.secondaryOwnerCanonicalId) {\r\n secondaryOwnerElEn = dataItem.secondaryOwnerEnglishName ? dataItem.secondaryOwnerEnglishName : dataItem.secondaryOwnerCyrllicName;\r\n }\r\n let delimeter = '';\r\n if (primaryOwnerElEn && secondaryOwnerElEn) {\r\n delimeter = '/';\r\n }\r\n dataItem.costCenterOwners = `${primaryOwnerElEn}${delimeter}${secondaryOwnerElEn}`;\r\n\r\n let primaryOwnerElRu = '';\r\n if (dataItem.primaryOwnerCanonicalId) {\r\n primaryOwnerElRu = dataItem.primaryOwnerCyrllicName ? dataItem.primaryOwnerCyrllicName : dataItem.primaryOwnerEnglishName;\r\n }\r\n\r\n let secondaryOwnerElRu = '';\r\n if (dataItem.secondaryOwnerCanonicalId) {\r\n secondaryOwnerElRu = dataItem.secondaryOwnerCyrllicName ? dataItem.secondaryOwnerCyrllicName : dataItem.secondaryOwnerEnglishName;\r\n }\r\n delimeter = '';\r\n if (primaryOwnerElRu && secondaryOwnerElRu) {\r\n delimeter = '/';\r\n }\r\n dataItem.costCenterOwnersRu = `${primaryOwnerElRu}${delimeter}${secondaryOwnerElRu}`;\r\n })\r\n }\r\n\r\ngetRequestParameters = () => {\r\n let searchQuery = window.location.search.substr(1);\r\n let pageIndex = this.getNextPageIndex();\r\n const pageSize = this.state.metadata.pageSize;\r\n let reqTotalCount = this.state.requestingFirstPage;\r\n return [\r\n searchQuery,\r\n pageIndex,\r\n pageSize,\r\n reqTotalCount\r\n ];\r\n}\r\n\r\n\r\ncomponentDidMount() {\r\n this.requestData();\r\n}\r\n\r\ncomponentDidUpdate() {\r\n if (this.hasMoreDataToLoad()) {\r\n this.requestData();\r\n }\r\n else {\r\n this.export();\r\n }\r\n}\r\nrender() {\r\n const localizationService = this.context.localization;\r\n let loadedResults = this.state.data.length;\r\n let total = this.state.metadata.totalCount;\r\n let loadPercent = calculatePercentage(loadedResults, total);\r\n let exportColumns = this.getColumnsForExport().map(column => {\r\n return \r\n }\r\n )\r\n return (\r\n \r\n this._export = exporter}\r\n >\r\n {exportColumns}\r\n \r\n \r\n
\r\n );\r\n}\r\n}\r\n\r\nexport default ExportToExcel;\r\nregisterForLocalization(ExportToExcel);\r\n","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { notSupportedBrowser, useEdgeBrowser} from '../../LocalizationMessages';\r\nclass BrowserNotSupported extends React.Component {\r\n \r\n render() {\r\n const localizationService = this.context.localization;\r\n window.location.href = `microsoft-edge:${window.location.href}`;\r\n return (\r\n \r\n

{localizationService.toLanguageString(notSupportedBrowser, '')}

\r\n

{localizationService.toLanguageString(useEdgeBrowser, '')}

\r\n
\r\n );\r\n }\r\n }\r\n registerForLocalization(BrowserNotSupported);\r\n export default BrowserNotSupported;","import React from 'react';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { authInProgress} from '../../LocalizationMessages';\r\nclass AuthInProgress extends React.Component {\r\n \r\n render() {\r\n const localizationService = this.context.localization;\r\n return (\r\n \r\n

{localizationService.toLanguageString(authInProgress, '')}

\r\n
\r\n );\r\n }\r\n }\r\n registerForLocalization(AuthInProgress);\r\n export default AuthInProgress;","import React from 'react';\r\nimport logo from '../../images/60px-Tengizchevroil_Logo.png';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { advancedSearchLink, smartSearchLink, mainHeader } from '../../LocalizationMessages';\r\n\r\nclass Header extends React.Component {\r\n onLinkClick = (event, path) => {\r\n event.preventDefault();\r\n this.props.history.push(path);\r\n }\r\n\r\n\r\n render() {\r\n const localizationService = this.context.localization;\r\n const { toggleLang, currentLanguage, location } = this.props;\r\n let currentPath = location.pathname;\r\n let pathName = currentPath.split('/')[1];\r\n let langLabel = currentLanguage === 'en' ? 'Русский' : 'English';\r\n let mainHeaderLabel = localizationService.toLanguageString(mainHeader, '');\r\n let menuLink;\r\n let menuLinkText;\r\n if (pathName === 'smart-search') {\r\n menuLink = '/advanced-search';\r\n menuLinkText = localizationService.toLanguageString(advancedSearchLink, '');\r\n }\r\n else {\r\n menuLink = '/smart-search';\r\n menuLinkText = localizationService.toLanguageString(smartSearchLink, '');\r\n }\r\n\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\nregisterForLocalization(Header);\r\nconst WrappedClass = withRouter(Header);\r\nexport default WrappedClass\r\n\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { registerForLocalization } from '@progress/kendo-react-intl';\r\nimport { appVersion, copyright, technicalContact, helpDesk } from '../../LocalizationMessages';\r\n\r\nclass Footer extends React.Component {\r\n render() {\r\n const localizationService = this.context.localization;\r\n\r\n const appVersionLabel = localizationService.toLanguageString(appVersion, '');\r\n const copyrightLabel = localizationService.toLanguageString(copyright, '');\r\n const technicalContactLabel = localizationService.toLanguageString(technicalContact, '');\r\n const helpDeskLabel = localizationService.toLanguageString(helpDesk, '');\r\n\r\n const element = (\r\n
\r\n
\r\n
{appVersionLabel} | {copyrightLabel}
\r\n \r\n
{technicalContactLabel}{helpDeskLabel}
\r\n
\r\n
\r\n )\r\n\r\n const footerPlaceholder = document && document.querySelector('#body');\r\n return footerPlaceholder ? ReactDOM.createPortal(element, footerPlaceholder) : null;\r\n }\r\n}\r\nregisterForLocalization(Footer);\r\nexport default Footer;","import Header from './Header'\r\nimport Footer from './Footer'\r\nimport React, {Component} from 'react'\r\n\r\nclass Layout extends Component {\r\n render() {\r\n const {toggleLang,currentLanguage, children} = this.props;\r\n return (\r\n \r\n
\r\n {children}\r\n