{"version":3,"sources":["data/AppContext.tsx","hooks/useCompanyInfo.tsx","data/CompanyInfoContext.tsx","hooks/useUser.tsx","util/utils.ts","../../../../.cache/yarn/v6/npm-@msidata-zeact-2.0.64-70ca66b1eefb7e0ffe304f1b292d9455356f8941-integrity/node_modules/@msidata/zeact/dist/auth/backgrounds sync /^/.//.*/.jpg$","components/Customers.tsx","hooks/useConfiguration.tsx","hooks/useUserPreferences.tsx","components/LanguagePicker.tsx","components/LocalePicker.tsx","components/UserPreferencesPopup.tsx","components/AboutPopup.tsx","components/Banner.tsx","components/OrderSummary.tsx","hooks/useCompletedInspectionResults.tsx","components/InspectionResultReport.tsx","components/OrderCell.tsx","components/Tabs.tsx","components/OrderList.tsx","hooks/useOrderBadgeCounts.tsx","data/TabFilters.ts","components/AdvancedFilter.tsx","components/Equipment.tsx","components/OrderNotes.tsx","components/Inspection.tsx","components/Sites.tsx","hooks/usePortalUsers.tsx","hooks/useGroups.tsx","hooks/useGroupCustomers.tsx","hooks/useGroupSites.tsx","hooks/useUserCustomers.tsx","hooks/useUserSites.tsx","hooks/useAdminSites.tsx","hooks/useAdminCustomers.tsx","hooks/useIsUserGroupAdmin.tsx","hooks/useFindUser.tsx","components/Users.tsx","App.tsx","hooks/withMaxWidth.tsx","serviceWorker.ts","language/loadLanguageData.ts","locale/loadLocaleData.ts","api/ServiceProAPI.ts","index.tsx"],"names":["useAppContext","React","AppContext","defaultCodes","Culture","Id","Value","defaultLocaleId","CodeNumber","CallPriority","CallType","NoteType","PortalFVSLevel","queryConfig","cacheTime","suspense","CompanyInfoContext","createContext","getLSCompanyId","lsComp","localStorage","getItem","compId","parseInt","CompanyInfoProvider","props","companyId","apiClient","cookieUsed","toLowerCase","history","useHistory","ReactQuery","useQuery","Promise","resolve","reject","companyInfo","JSON","parse","id","post","params","then","resp","status","results","data","d","compInfo","logo","Logo","undefined","name","Name","rCodes","Codes","codes","length","forEach","c","Key","rOptions","Options","options","o","OptionNumber","settings","Settings","DefaultLocale","CultureId","companyLocale","find","companyCurrency","KendoIntl","localeCurrency","currency","rUDFs","UserDefinedFields","userDefinedFields","rUDLs","UserDefinedLists","userDefinedLists","setItem","stringify","removeItem","catch","err","config","statusText","apiError","Errors","General","headers","url","correlationId","correlationGroupId","errorObj","requestUrl","split","error","Error","errorCode","ErrorCode","console","clear","push","refresh","refetch","pending","isFetching","useCompanyInfo","Provider","value","children","withCompanyInfo","Component","useCompanyInfoContext","useContext","useOptionValue","optionNumber","defaultValue","getOptionValue","getBooleanOption","defaultCulture","staleTime","CacheTimes","TwentyFourHours","useUser","issueAlert","useAlerts","request","response","type","header","message","key","isAdmin","user","Type","isGroupAdmin","downloadAttachment","args","attachmentId","endpoint","get","responseType","FileSaver","getCookie","cookies","decodeURIComponent","document","cookie","i","charAt","substring","indexOf","removeCookie","map","webpackContext","req","webpackContextResolve","__webpack_require__","e","code","keys","Object","module","exports","odata","$select","$expand","Customers","languageId","llContext","isWide","Wrapper","styled","div","title","ll","variables","entity","select","expand","style","width","height","columns","field","columnMenu","cell","dataItem","className","ShipToDefault","Address1","Address2","City","Region","PostalCode","scrollable","pageable","pageSize","configs","local","dev","qa","mock","test","loaded","debug","serviceProApiUrl","auth","domain","clientId","audience","redirect_uri","allowed_connections","useAuth","defaultLanguage","defaultLocale","brand","useConfiguration","setConfig","specifiedConfig","process","REACT_APP_CONFIG","version","REACT_APP_VERSION","REACT_APP_BRANCH","fetch","json","configJson","useUserPreferences","fetchUserPreferences","useCallback","lsPrefs","prefs","preferences","_","reduce","prev","curr","UserPreferenceNumber","displayAndLogErrorWithMessage","setUserPreferences","val","patch","queryCache","invalidateQueries","useMutation","onMutate","a","async","updateUserPreferencesMutation","queryConfigMemo","useMemo","enabled","userPreferences","PrefsWrapper","useLanguage","localeId","useLocale","companyLanguage","culture","Locale","setLocaleId","Language","setLanguageId","LanguagePicker","languages","text","excludedCodeNumbers","languageCodes","filter","includes","l","findIndex","selection","setSelection","onItemClick","index","switchLanguage","itemIndex","look","popupClass","localize","language","selected","LocalePicker","localeContext","locales","localeCodes","switchLocale","locale","UserPreferences","Warning","UserPreferencesPopup","updatingUserPreferences","isServiceProUser","visible","onClose","disabled","containerSelector","About","AboutPopup","updatingAbout","supportEmail","img","attrs","src","theme","SupportEmailLink","CopyrightNotice","maximizeButton","minimizeButton","content","href","Date","getFullYear","StyledBanner","location","useLocation","logoUrl","ThemeContext","portalBannerColor","redirect","setRedirect","productName","localizedProductName","isUserAdmin","isUserGroupAdmin","basePath","pathname","replace","useAuthContext","logout","FirstName","LastName","trim","EmailAddress","menuItems","onClick","numOfCompaniesLS","useSwitchTenant","link","path","render","Popup","ZPopup","OrderSummary","useState","printing","setPrinting","maximized","setMaximized","Button","ZButton","OrderSummaryContainer","window","innerWidth","innerHeight","PrintingMaskWrapper","MaskWrapper","OffScreenWrapper","isMobile","CloseWrapper","PrintWrapper","setData","editableFVS","isVista","udfs","udls","udf","BindName","udl","UserDefinedListId","Order","OrderSegment","os","priceMethod","Values","udlv","OrderLine","useEffect","orderId","LastIntegratedDateTime","OrderNumber","segment","SegmentNumber","isNaN","print","donePrinting","fvsLevelData","fvsLevelId","OrderStatus","PortalFVSLevelId","allowMaximize","onMaximizeChange","maximize","mobile","$top","InspectionResultReport","res","rej","method","FifteenMinutes","done","useCompletedInspectionResults","ir","setIR","userLanguage","Link","resizable","CompletedByUser","CompletedDateTime","format","shortDateTimeFormat","sortable","reorderable","InspectionResult","AttachmentId","sort","dir","orderTabs","OrderNotesPopup","ServiceItemsPopup","width50px","fontSize20px","fontSize","visibleAndHidden","blankDiv","StatusBar","onHold","StyledOrderCell","dataIndex","useLayoutContext","Appointment","Customer","CustomerPO","Description","JobNumber","OnHold","OrderDate","OrderedBy","RepairItem","Site","TechOrderStatus","TotalPrice","WaitingFor","WaitingForId","OrderAttachment","serviceItemsBadge","address","ShipTo","firstOpenScheduledAppointment","chain","appointment","ScheduledDateTime","AppointmentStatus","Closed","sortBy","head","RequestedDateTime","AssignedTech","ServiceTechName","UserDefinedData","orderSummaryDocumentTypeId","DocumentType","dt","orderHasOrderSummaryReport","oa","Attachment","DocumentTypeId","containerItems","propsToLocalize","CustomerNumber","CustomerName","SiteName","SiteNumber","buildAddressString","moment","add","getTimezoneOffset","toDate","longDateFormat","shortDateFormat","longDateTimeFormat","ShowOnDesktop","DisplayValue","getUDFValue","formatLength","FieldName","ButtonBar","orderSummaryVisible","setOrderSummaryVisible","inspectionsVisible","setInspectionsVisible","orderNotesVisible","setOrderNotesVisible","serviceItemsVisible","setServiceItemsVisible","hideOrderSummary","hideInspections","hideOrderNotes","hideServiceItems","orderSummaryFormat","fallback","join","PortalInProgress","allowedFieldStates","hiddenFieldComponent","editable","numberOfColumns","orderServiceItems","icon","defaultOData","OrderList","useViewport","cache","setCache","selectedTab","getParams","assign","setOData","uniqueExpands","uniq","uniqueSelects","OrderCell","info","SCHEDULED","oDataFilter","cacheDuration","setGridInstance","retryCount","inProgressFilters","logic","filters","operator","completedFilters","onHoldFilters","defaultFilter","AdvancedFilter","fieldVis","useFieldVisibilityContext","fields","supportedUDFTypes","getTypeFromUDFType","udfType","allFields","nullable","textField","filterFields","displayFields","TableName","label","listData","list","result","fieldVisibilityMap","components","fvs","fieldName","testField","onChange","RequestServicePopup","defaultSort","sortableFields","TabContent","filterText","setFilterText","debouncedFilterText","useDebounce","grid","setGrid","popupIsHidden","setPopupIsHidden","advancedFilterEnabled","setAdvancedFilterEnabled","advancedFilter","setAdvancedFilter","debouncedAdvancedFilter","hideRequestService","companyInfoPending","appNameAbbreviation","useApplicationName","fvsParams","app","containerId","useFieldVisibilitySettings","fvSettings","setFvSettings","cachedCompanyIdString","cachedCompanyId","force","getFilterFromString","baseFilter","IN_PROGRESS","COMPLETED","ON_HOLD","setSort","event","target","placeholder","primary","initialValue","setState","maxSorts","gridInstance","stage","gridRefresh","StyledTabs","fetchOrderCounts","All","InProgress","Completed","Scheduled","useOrderBadgeCounts","badgesPending","badgeColor","badgeValue","EquipmentPage","EquipmentGrid","filterable","excelExport","Serial","FilterWrapper","SearchInfo","span","OrderNotesPage","CreatedDateTime","dangerouslySetInnerHTML","__html","stripHTML","html","Contents","keepStyling","Sites","Country","OneHour","useGroups","userId","fetchGroups","groups","useGroupCustomers","groupName","fetchGroupCustomers","groupCustomers","useGroupSites","fetchGroupSites","groupSites","useUserCustomers","fetchUserCustomers","userCustomers","useUserSites","fetchUserSites","userSites","useIsUserGroupAdmin","fetchIsUserGroupAdmin","AdminEditAccessPopup","selectedUser","setSelectedUser","adminSites","useAdminSites","adminSitesPending","adminCustomers","useAdminCustomers","adminCustomersPending","selectedGroup","setSelectedGroup","groupSitesPending","groupCustomersPending","isUserGroupAdminPending","userSitesPending","userCustomersPending","isChangingAccess","setIsChangingAccess","setSelected","ListBoxWrapper","PopupContainer","GroupAdminLabel","lang","availableHeader","selectedHeader","moveAllLeft","moveAllRight","moveLeft","moveRight","userSite","userCustomer","site","customer","deselected","promises","option","startsWith","UserId","SiteId","CustomerId","delete","siteId","customerId","all","newState","finally","GroupAdminEditAccessPopup","ConfirmPasswordResetPopup","resetPasswordUser","setResetPasswordUser","hermesBrand","contains","ButtonsWrapper","CancelButtonWrapper","AddButtonWrapper","ChangePasswordUrl","origin","Brand","baseURL","RemoveUserFromGroupPopup","selectedRemoveUser","setSelectedRemoveUser","refetchUsers","userIsAdmin","shouldRefetch","setShouldRefetch","pull","ContainerWrapper","IconSpacing","AddUserPopup","requireGroup","setRequireGroup","email","setEmail","emailAddress","findUser","useFindUser","userPending","loading","setLoading","firstNameRef","lastNameRef","current","setValue","onFormSubmit","Admin","GroupName","formContext","onBlur","required","ignoreFVS","ref","submit","ModifyAccessButton","UserHeader","AddUserWrapper","Users","users","ReactQueryCache","usePortalUsers","usersPending","userGroups","userGroupsPending","removeUserGroups","removeUserGroupsPending","addUserVisible","setAddUserVisible","cellData","colSpan","onDoubleClick","LoginRoute","portal","LogoutRoute","SelectTenantRoute","setIsAuthenticated","returnComponent","setReturnComponent","spToken","spCompanyId","spNumOfCompanies","useCookie","accessToken","toString","to","ZSelectTenant","getTenantsEndpoint","redirectToSlug","handleAuth0Error","description","errorDescription","error_description","handleAuth0Profile","profile","onReturn","ChangePasswordRoute","root","getElementById","_props","setProperty","removeProperty","withMaxWidth","withUserPreferences","withBanner","OrderPage","Tabs","OrderRoute","Equipment","EquipmentRoute","OrderNotesRoute","OrderNotes","InspectionRoute","Inspection","UsersPage","UsersRoute","SitesPage","SitesRoute","CustomersPage","CustomersRoute","DefaultRoute","isAuthenticated","lsCompanyId","App","useFaviconFromTheme","nonProtectedRoutes","sessionTimer","unprotectedRoutes","exact","component","Boolean","hostname","match","loadLanguageJSON","enus","engb","enza","ennz","enau","esmx","frfr","jajp","loadLocaleData","fvsCorrelationGroupId","guid","addHeaders","token","transformOData","selects","expands","getExpandsFromSelects","handleResponse","handleError","endsWith","defaultQueryConfig","queries","retry","refetchOnWindowFocus","WrappedApp","disableSSORegex","RegExp","nonSSOConnections","client","appConfig","requestConfig","ServiceProAPIClient","Axios","create","interceptors","use","defaults","CancelToken","isCancel","zeact","useServiceProAPI","useApiClientWithGroupCorrelationId","useMedia","maxWidth","loc","titleKey","appContextValue","authConfig","ReactQueryConfigProvider","ReactDOM","maxAlerts","initialIsOpen","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.ddcabc96.chunk.js","sourcesContent":["import * as React from \"react\";\nimport { AppContext } from \"@msidata/zeact\";\nexport const useAppContext = () => React.useContext(AppContext);\n","import { ReactQuery, defaultLocaleId, KendoIntl } from \"@msidata/zeact\";\nimport { UserDefinedField } from \"@msidata/service-pro-api-schema\";\nimport { useHistory } from \"react-router-dom\";\nimport { useAppContext } from \"../data/AppContext\";\n\nexport interface Code {\n Id: number;\n CodeNumber: string;\n Value: string;\n}\n\nexport const defaultCulture: Code = {\n Id: 1,\n Value: defaultLocaleId,\n CodeNumber: defaultLocaleId\n};\n\nconst defaultCodes = {\n Culture: [defaultCulture],\n CallPriority: [],\n CallType: [],\n NoteType: [],\n PortalFVSLevel: []\n};\n\nexport interface Option {\n Id: number;\n OptionNumber: string;\n Value: string;\n}\n\nexport interface UserDefinedList {\n Id: number;\n ListName: string;\n Values: [];\n}\n\nexport interface PortalSettings {\n DefaultLocale: string;\n CultureId?: number;\n}\n\nexport interface CompanyInfo {\n codes: {\n [Key: string]: {\n Id: number;\n CodeNumber: string;\n Value: string;\n }[];\n };\n id: number;\n logo?: string;\n name: string;\n options: { [key: string]: string };\n settings: PortalSettings;\n currency: string;\n userDefinedFields: Partial[];\n userDefinedLists: UserDefinedList[];\n}\n\nexport interface CompanyInfoValue {\n pending: boolean;\n companyInfo: CompanyInfo;\n error: any;\n refresh: () => void;\n}\n\nconst queryConfig = {\n cacheTime: 0,\n suspense: false\n};\n\nexport const useCompanyInfo = (companyId?: number): CompanyInfoValue => {\n const { apiClient } = useAppContext();\n const compId = companyId || localStorage.getItem(\"Company-Id\") || -1;\n const cookieUsed = localStorage.getItem(\"cookieUsed\")?.toLowerCase() || \"\";\n const history = useHistory();\n const fetchInfo = function () {\n return new Promise((resolve, reject) => {\n const companyInfo: CompanyInfo = JSON.parse(\n localStorage.getItem(\"companyInfo\") || \"{}\"\n );\n if (companyInfo.id && companyInfo.id === compId && cookieUsed !== \"true\") {\n resolve(companyInfo);\n } else {\n apiClient\n .post(\"SelectCompany\", null, {\n params: { companyId: compId }\n })\n .then(resp => {\n if (resp.status === 200) {\n const results = resp?.data?.d?.results || {};\n let compInfo = {} as CompanyInfo;\n compInfo.id = results?.Id;\n compInfo.logo = results?.Logo\n ? `data:image/png;base64,${results.Logo}`\n : undefined;\n compInfo.name = results?.Name;\n\n const rCodes = results?.Codes || [];\n let codes: {\n [key: string]: {\n Id: number;\n CodeNumber: string;\n Value: string;\n }[];\n } = {};\n if (rCodes.length > 1) {\n rCodes.forEach((c: any) => {\n codes[c.Key] = c.Value;\n });\n compInfo.codes = codes;\n } else {\n compInfo.codes = defaultCodes;\n }\n\n const rOptions = results?.Options || [];\n let options: { [key: string]: string } = {};\n rOptions.forEach((o: any) => {\n options[o.OptionNumber] = o.Value;\n });\n compInfo.options = options;\n\n const settings = results?.Settings || {\n DefaultLocale: defaultLocaleId,\n CultureId: 1\n };\n compInfo.settings = settings;\n const companyLocale = codes.Culture\n ? codes.Culture.find(c => c.Id === settings.CultureId)\n ?.Value || settings.DefaultLocale\n : settings.DefaultLocale;\n const companyCurrency = companyLocale\n ? KendoIntl.localeCurrency(companyLocale)\n : \"\";\n compInfo.currency = companyCurrency;\n\n const rUDFs = results?.UserDefinedFields || [];\n compInfo.userDefinedFields = rUDFs;\n\n const rUDLs = results?.UserDefinedLists || [];\n compInfo.userDefinedLists = rUDLs;\n\n localStorage.setItem(\n \"companyInfo\",\n JSON.stringify(compInfo)\n );\n localStorage.removeItem(\"cookieUsed\");\n resolve(compInfo);\n } else {\n localStorage.removeItem(\"companyInfo\");\n resolve({} as CompanyInfo);\n }\n })\n .catch(err => {\n const { config, status, statusText } = err;\n const apiError = err?.data?.Errors?.General[0];\n const { headers, url } = config;\n const correlationId = headers[\"Correlation-Id\"];\n const correlationGroupId = headers[\"Correlation-Group-Id\"];\n const split = \"/api/portal\";\n const requestUrl = `${split}${url.split(split)[1]}`;\n const errorObj = {\n requestUrl,\n error: apiError?.Error,\n errorCode: apiError?.ErrorCode,\n correlationId,\n correlationGroupId,\n status,\n statusText\n };\n console.error(JSON.stringify(errorObj, undefined, 4));\n localStorage.clear();\n history.push(\n `/Login#error=${status} ${statusText}&error_description=An error occurred while fetching company info`\n );\n });\n }\n });\n };\n\n const { data, error, refetch, isFetching } = ReactQuery.useQuery(\n \"SelectCompany\",\n fetchInfo,\n queryConfig\n );\n\n return {\n companyInfo: (data as CompanyInfo) || {\n codes: [],\n options: {},\n settings: {},\n userDefinedFields: [],\n userDefinedLists: []\n },\n error: error,\n refresh: refetch,\n pending: isFetching\n };\n};\n","import React from \"react\";\nimport { defaultLocaleId } from \"@msidata/zeact\";\nimport { CompanyInfo, useCompanyInfo, PortalSettings } from \"../hooks/useCompanyInfo\";\n\nexport interface CompanyInfoValue {\n pending: boolean;\n companyInfo: CompanyInfo;\n error: any;\n refresh: () => void;\n}\n\nexport const CompanyInfoContext = React.createContext({} as CompanyInfoValue);\n\nexport interface CompanyInfoProviderProps {\n companyId?: number;\n children?: React.ReactChild;\n}\n\nconst getLSCompanyId = () => {\n const lsComp = localStorage.getItem(\"Company-Id\")\n let compId = -1;\n if (lsComp) {\n compId = parseInt(lsComp);\n }\n return compId;\n}\n\nexport const CompanyInfoProvider = (props: CompanyInfoProviderProps) => {\n const { companyId } = props;\n const compId = companyId || getLSCompanyId();\n const { pending, companyInfo, error, refresh } = useCompanyInfo(compId);\n\n return (\n \n {props.children}\n \n )\n}\n\nexport const withCompanyInfo = (Component: () => JSX.Element): JSX.Element => {\n const compId = getLSCompanyId();\n\n return (\n \n \n \n )\n};\n\nexport const useCompanyInfoContext = () => React.useContext(CompanyInfoContext);\n\nconst useOptionValue = (optionNumber: string, defaultValue: any): any => {\n const { companyInfo } = React.useContext(CompanyInfoContext);\n const options = companyInfo.options;\n if (!options) {\n return defaultValue;\n }\n return options[optionNumber] !== undefined\n ? options[optionNumber]\n : defaultValue;\n}\nexport const getOptionValue = useOptionValue;\n\nconst useBooleanOption = (optionNumber: string, defaultValue: boolean): boolean => {\n const value = useOptionValue(optionNumber, defaultValue);\n return value ? value.toLowerCase() === \"true\" : defaultValue;\n}\nexport const getBooleanOption = useBooleanOption;\n\nexport const defaultCulture = {\n Id: 1,\n Value: defaultLocaleId,\n CodeNumber: defaultLocaleId\n};\n\nconst useSettingValue = (settingNumber: keyof PortalSettings, defaultValue: any): any => {\n const { companyInfo } = React.useContext(CompanyInfoContext);\n const settings = companyInfo?.settings;\n if (!settings) {\n return defaultValue;\n }\n return settings[settingNumber] !== undefined\n ? settings[settingNumber]\n : defaultValue;\n}\nexport const getSettingValue = useSettingValue;\n\nconst useBooleanSetting = (settingNumber: keyof PortalSettings, defaultValue: boolean): boolean => {\n const value = useSettingValue(settingNumber, defaultValue);\n return value ? `${value}`.toLowerCase() === \"true\" : defaultValue;\n}\nexport const getBooleanSetting = useBooleanSetting;\n","import { CacheTimes, ReactQuery, useAlerts } from \"@msidata/zeact\";\nimport { User } from \"@msidata/service-pro-api-schema\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: true,\n staleTime: CacheTimes.TwentyFourHours\n};\n\nexport const useUser = (): User & { Type: string } => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchUser = () =>\n apiClient\n .request({ url: `Administration/User` })\n .then(response => response.data?.d?.results)\n .catch(error => {\n console.error(error);\n issueAlert({\n type: \"error\",\n header: \"Error\",\n message: \"UserCannotGet\",\n key: \"UserCannotGet\"\n });\n });\n const { data: user } = ReactQuery.useQuery(\"user\", fetchUser, queryConfig);\n\n return user;\n};\n\nconst useIsAdmin = () => {\n var user = useUser();\n\n return user?.Type === \"Admin\";\n};\nexport const isAdmin = useIsAdmin;\n\nconst useIsGroupAdmin = () => {\n var user = useUser();\n\n return user?.Type === \"GroupAdmin\";\n};\nexport const isGroupAdmin = useIsGroupAdmin;\n","import { ZAlertOptions } from \"@msidata/zeact\";\nimport * as FileSaver from \"file-saver\";\n\nexport interface DownloadAttachmentArgs {\n apiClient: any;\n issueAlert: (options: ZAlertOptions) => string | number;\n attachmentId?: number;\n endpoint?: string;\n}\n\nexport const downloadAttachment = (\n args: DownloadAttachmentArgs\n): string | number | void => {\n const { attachmentId, apiClient, issueAlert, endpoint } = args;\n\n if (!endpoint && !attachmentId) {\n const key = issueAlert({\n type: \"error\",\n header: \"UnableToOpenAttachment\",\n message: \"AttachmentIdIsNullOrUndefined\"\n });\n return key;\n }\n\n apiClient\n .get(endpoint || `Media/GetMedia?attachmentId=${attachmentId}`, {\n responseType: \"blob\"\n })\n .then((response: any) => {\n FileSaver.saveAs(response.data, response.headers[\"file-name\"]);\n })\n .catch(() =>\n issueAlert({\n type: \"error\",\n message: \"UnableToOpenAttachment\"\n })\n );\n};\n\nexport const getDateTimeString = (): string => {\n const date = new Date();\n let dateStr = `${date.getFullYear()}`;\n dateStr +=\n date.getMonth() + 1 < 10\n ? `0${date.getMonth() + 1}`\n : (date.getMonth() + 1).toString();\n dateStr +=\n date.getDate() < 10 ? `0${date.getDate()}` : date.getDate().toString();\n dateStr +=\n date.getHours() < 10 ? `0${date.getHours()}` : date.getHours().toString();\n dateStr +=\n date.getMinutes() < 10\n ? `0${date.getMinutes()}`\n : date.getMinutes().toString();\n dateStr +=\n date.getSeconds() < 10\n ? `0${date.getSeconds()}`\n : date.getSeconds().toString();\n return dateStr;\n};\n\nexport const getCookie = (name: string): string => {\n const decodedCookie = decodeURIComponent(document.cookie);\n const cookies = decodedCookie.split(\";\");\n for (let i = 0; i < cookies.length; i++) {\n let cookie = cookies[i];\n while (cookie.charAt(0) === \" \") {\n cookie = cookie.substring(1);\n }\n if (cookie.indexOf(name) === 0) {\n return cookie.substring(name.length + 1, cookie.length);\n }\n }\n return \"\";\n};\n\nexport const removeCookie = (name: string) => {\n document.cookie = `${name}=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/`;\n};\n","var map = {\n\t\"./1.jpg\": 781,\n\t\"./2.jpg\": 782,\n\t\"./3.jpg\": 783,\n\t\"./4.jpg\": 784,\n\t\"./5.jpg\": 785,\n\t\"./6.jpg\": 786,\n\t\"./7.jpg\": 787,\n\t\"./8.jpg\": 788,\n\t\"./9.jpg\": 789\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 780;","import * as React from \"react\";\nimport { ll, llContext, ZGrid } from \"@msidata/zeact\";\nimport styled from \"styled-components\";\n\nconst odata = {\n $select: [\n \"CustomerNumber\",\n \"CustomerName\",\n \"ShipToDefault/Address1\",\n \"ShipToDefault/Address2\",\n \"ShipToDefault/Address3\",\n \"ShipToDefault/City\",\n \"ShipToDefault/Region\",\n \"ShipToDefault/PostalCode\"\n ],\n $expand: [\"ShipToDefault\"]\n};\n\nexport const Customers = (props: any) => {\n const { languageId } = React.useContext(llContext);\n const { isWide } = props;\n const Wrapper = React.useMemo(\n () => styled.div`\n margin-top: ${isWide ? `60px` : \"55px\"};\n text-align: left;\n `,\n [isWide]\n );\n\n return (\n \n {\n if (dataItem.ShipToDefault.Address1) {\n return (\n \n {dataItem.ShipToDefault.Address1}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"Address2\",\n field: \"ShipToDefault.Address2\",\n columnMenu: null,\n cell: ({ dataItem, className }) => {\n if (dataItem.ShipToDefault.Address2) {\n return (\n \n {dataItem.ShipToDefault.Address2}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"City\",\n field: \"ShipToDefault.City\",\n columnMenu: null,\n cell: ({ dataItem, className }) => {\n if (dataItem.ShipToDefault.City) {\n return (\n \n {dataItem.ShipToDefault.City}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"Region\",\n field: \"ShipToDefault.Region\",\n columnMenu: null,\n cell: ({ dataItem, className }) => {\n if (dataItem.ShipToDefault.Region) {\n return (\n \n {dataItem.ShipToDefault.Region}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"PostalCode\",\n field: \"ShipToDefault.PostalCode\",\n columnMenu: null,\n cell: ({ dataItem, className }) => {\n if (dataItem.ShipToDefault.PostalCode) {\n return (\n \n {dataItem.ShipToDefault.PostalCode}\n \n );\n } else {\n return {\"---\"};\n }\n }\n }\n ]}\n scrollable={\"scrollable\"}\n pageable={true}\n pageSize={10}\n />\n \n );\n};\n","import * as React from \"react\";\nimport { Auth0Config, BrandInfo } from \"@msidata/zeact\";\nimport local from \"../config/local.config.json\";\nimport dev from \"../config/dev.config.json\";\nimport qa from \"../config/qa.config.json\";\nimport mock from \"../config/mock.config.json\";\n\nexport interface PortalConfig {\n loaded: boolean;\n debug: boolean;\n defaultLanguage?: string;\n defaultLocale?: string;\n serviceProApiUrl: string;\n auth: Auth0Config;\n useAuth: boolean;\n brand?: BrandInfo;\n version?: string;\n}\n\nconst getDefaultConfiguration = (): PortalConfig => ({\n loaded: false,\n debug: true,\n serviceProApiUrl: \"\",\n auth: {\n domain: \"\",\n clientId: \"\",\n audience: \"\",\n redirect_uri: \"\",\n allowed_connections: []\n },\n useAuth: true,\n defaultLanguage: \"en-US\",\n defaultLocale: \"en-US\",\n brand: { name: \"ServiceProPortal\" }\n});\n\nconst configs: { [key: string]: PortalConfig } = {\n local,\n dev,\n qa,\n mock,\n test: { ...getDefaultConfiguration(), serviceProApiUrl: \"test\" }\n};\n\nexport const useConfiguration = (): PortalConfig => {\n const [config, setConfig] = React.useState(getDefaultConfiguration());\n\n React.useEffect(() => {\n const specifiedConfig: string | undefined =\n process.env.NODE_ENV === \"test\"\n ? \"test\"\n : process.env.REACT_APP_CONFIG;\n if (specifiedConfig) {\n if (configs[specifiedConfig]) {\n setConfig({\n ...configs[specifiedConfig],\n version: `${process.env.REACT_APP_VERSION} (${process.env.REACT_APP_BRANCH})`\n });\n } else {\n throw new Error(\n `Could not load the following config: ${process.env.REACT_APP_CONFIG}`\n );\n }\n } else {\n fetch(`/static/config.json`)\n .then(data => data.json())\n .then(configJson => {\n configJson[\"loaded\"] = true;\n setConfig(configJson);\n })\n .catch(error => {\n throw new Error(`Could not load config: ${error}`);\n });\n }\n }, []);\n\n return config;\n};\n","import {\n CacheTimes,\n ReactQuery,\n displayAndLogErrorWithMessage,\n useAlerts,\n useLanguage,\n useLocale,\n LLProvider,\n LocaleProvider\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\nimport React from \"react\";\nimport { useCompanyInfoContext } from \"../data/CompanyInfoContext\";\nimport _ from \"lodash\";\nconst queryConfig = { staleTime: CacheTimes.TwentyFourHours, suspense: true };\nexport interface PortalUserPreferences {\n Locale?: string;\n Language?: string;\n}\n\nexport const parsePortalUserPreferences = (\n preferences: {\n UserPreferenceNumber: keyof PortalUserPreferences;\n Value: any;\n }[]\n) =>\n _.reduce(\n preferences,\n (prev, curr) => {\n prev[curr.UserPreferenceNumber] = curr.Value;\n return prev;\n },\n {} as PortalUserPreferences\n );\n\nexport const useUserPreferences = () => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchUserPreferences: () => Promise<\n PortalUserPreferences\n > = React.useCallback(\n () =>\n new Promise(resolve => {\n const lsPrefs: PortalUserPreferences = JSON.parse(\n localStorage.getItem(\"userPreferences\") || \"null\"\n );\n if (lsPrefs) {\n resolve(lsPrefs);\n } else {\n return apiClient\n .get(\"UserPreferences/GetUserPreferences\")\n .then(response => {\n if (response.status === 200) {\n const prefs = parsePortalUserPreferences(\n response?.data?.d?.results\n );\n localStorage.setItem(\n \"userPreferences\",\n JSON.stringify(prefs)\n );\n resolve(prefs);\n } else {\n resolve({});\n }\n })\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"GetUserPreferencesErrorMessage\",\n issueAlert\n );\n resolve({});\n });\n }\n }),\n [apiClient, issueAlert]\n );\n\n const setUserPreferences = React.useCallback(\n (val: PortalUserPreferences) =>\n new Promise(resolve =>\n apiClient\n .patch(\"UserPreferences/SetUserPreferences\", val)\n .then(() => {\n ReactQuery.queryCache.invalidateQueries(\"UserPreferences\");\n })\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"SetUserPreferencesErrorMessage\",\n issueAlert\n );\n resolve({});\n })\n ),\n [apiClient, issueAlert]\n );\n const [updateUserPreferencesMutation] = ReactQuery.useMutation(\n setUserPreferences,\n {\n onMutate: async () => {\n localStorage.removeItem(\"userPreferences\");\n }\n }\n );\n const queryConfigMemo = React.useMemo(\n () => ({\n ...queryConfig,\n enabled: !!issueAlert && !!apiClient\n }),\n [issueAlert, apiClient]\n );\n\n const { data, error, refetch, isFetching } = ReactQuery.useQuery<\n PortalUserPreferences,\n \"UserPreferences\"\n >(\"UserPreferences\", fetchUserPreferences, queryConfigMemo);\n\n return {\n userPreferences: data,\n updateUserPreferencesMutation,\n error,\n refresh: refetch,\n pending: isFetching\n };\n};\n\nconst PrefsWrapper = (props: React.PropsWithChildren) => {\n const { userPreferences } = useUserPreferences();\n const languageId = useLanguage();\n const localeId = useLocale();\n const { companyInfo } = useCompanyInfoContext();\n const { codes, settings } = companyInfo;\n let companyLocale = undefined,\n companyLanguage = undefined;\n if (settings.CultureId) {\n const culture = codes?.Culture\n ? codes.Culture.find(c => c.Id === settings.CultureId)\n : undefined;\n companyLanguage = culture?.Value;\n companyLocale = culture?.Value;\n }\n if (settings.DefaultLocale) {\n // 'DefaultLocale' in the API is actually Language\n const culture = codes?.Culture\n ? codes.Culture.find(c => c.CodeNumber === settings.DefaultLocale)\n : undefined;\n companyLanguage = culture?.Value;\n }\n return (\n {}\n }}\n >\n {}\n }}\n >\n {props.children}\n \n \n );\n};\nexport const withUserPreferences = (\n Component: () => JSX.Element\n): JSX.Element => (\n \n \n \n);\n","import {\n ZDropDownButton,\n ZDropDownButtonItem,\n ZDropDownButtonProps,\n ll,\n llContext\n} from \"@msidata/zeact\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport _ from \"lodash\";\nimport {\n defaultCulture,\n useCompanyInfoContext\n} from \"../data/CompanyInfoContext\";\nimport { useUserPreferences } from \"../hooks/useUserPreferences\";\n\nexport const LanguagePicker = styled(\n (props: Partial & { className?: string }) => {\n const { updateUserPreferencesMutation } = useUserPreferences();\n const { companyInfo } = useCompanyInfoContext();\n const { codes } = companyInfo;\n\n const { languageId, setLanguageId } = React.useContext(llContext);\n\n const languages = [\n { value: \"en-US\", text: \"🇺🇸 English (US)\" },\n { value: \"en-GB\", text: \"🇬🇧 English (UK)\" },\n { value: \"en-AU\", text: \"🇦🇺 English (Australia)\" },\n { value: \"en-NZ\", text: \"🇳🇿 English (New Zealand)\" },\n { value: \"en-ZA\", text: \"🇿🇦 English (South Africa)\" },\n { value: \"es-MX\", text: \"🇲🇽 Spanish (México)\" },\n { value: \"fr-FR\", text: \"🇫🇷 French (France)\" },\n { value: \"ja-JP\", text: \"🇯🇵 Japanese (Japan)\" }\n ];\n const excludedCodeNumbers = [\"en-qt\"];\n const languageCodes = codes?.Culture\n ? codes?.Culture.filter(\n c => !_.includes(excludedCodeNumbers, c.CodeNumber)\n ).map(culture => ({\n ...culture,\n text:\n languages.find(l => l.value === culture.Value)?.text ||\n culture.Value\n }))\n : [{ ...defaultCulture, text: defaultCulture.Value }];\n const [selection, setSelection] = React.useState(\n languageCodes.findIndex(\n l => l.Value.toLowerCase() === languageId.toLowerCase()\n )\n );\n const switchLanguage = (index: number) => {\n const value = languageCodes[index].Value;\n\n updateUserPreferencesMutation &&\n updateUserPreferencesMutation({\n Language: value\n }).then(() => {\n setSelection(index);\n if (setLanguageId) {\n setLanguageId(value);\n }\n });\n };\n return (\n
\n switchLanguage(e.itemIndex)}\n look={\"bare\"}\n popupClass={props.className}\n localize={false}\n >\n {languageCodes.map((language, index) => (\n \n ))}\n \n
\n );\n }\n)`\n float: left;\n`;\n","import {\n ZDropDownButton,\n ZDropDownButtonItem,\n ZDropDownButtonProps,\n ll,\n llContext,\n localeContext\n} from \"@msidata/zeact\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport {\n defaultCulture,\n useCompanyInfoContext\n} from \"../data/CompanyInfoContext\";\nimport _ from \"lodash\";\nimport { useUserPreferences } from \"../hooks/useUserPreferences\";\n\nexport const LocalePicker = styled(\n (props: Partial & { className?: string }) => {\n const { updateUserPreferencesMutation } = useUserPreferences();\n const { companyInfo } = useCompanyInfoContext();\n const { codes } = companyInfo;\n\n const { languageId } = React.useContext(llContext);\n const { localeId, setLocaleId } = React.useContext(localeContext);\n\n const locales = [\n { value: \"en-US\", text: \"🇺🇸 English (US)\" },\n { value: \"en-GB\", text: \"🇬🇧 English (UK)\" },\n { value: \"en-AU\", text: \"🇦🇺 English (Australia)\" },\n { value: \"en-NZ\", text: \"🇳🇿 English (New Zealand)\" },\n { value: \"en-ZA\", text: \"🇿🇦 English (South Africa)\" },\n { value: \"en-QT\", text: \"🇶🇦 English (Qatar)\" },\n { value: \"es-MX\", text: \"🇲🇽 Spanish (México)\" },\n { value: \"fr-FR\", text: \"🇫🇷 French (France)\" },\n { value: \"ja-JP\", text: \"🇯🇵 Japanese (Japan)\" }\n ];\n const excludedCodeNumbers = [] as string[];\n\n const localeCodes = codes?.Culture\n ? codes.Culture.filter(\n c => !_.includes(excludedCodeNumbers, c.CodeNumber)\n ).map(culture => ({\n ...culture,\n text:\n locales.find(l => l.value === culture.Value)?.text ||\n culture.Value\n }))\n : [{ ...defaultCulture, text: defaultCulture.Value }];\n const [selection, setSelection] = React.useState(\n localeCodes.findIndex(\n l => l.Value.toLowerCase() === localeId.toLowerCase()\n )\n );\n const switchLocale = (index: number) => {\n const value = localeCodes[index].Value;\n\n updateUserPreferencesMutation &&\n updateUserPreferencesMutation({\n Locale: value\n }).then(() => {\n setSelection(index);\n if (setLocaleId) {\n setLocaleId(value);\n }\n });\n };\n return (\n
\n switchLocale(e.itemIndex)}\n look={\"bare\"}\n popupClass={props.className}\n localize={false}\n >\n {localeCodes.map((locale, index) => (\n \n ))}\n \n
\n );\n }\n)`\n float: left;\n`;\n","import * as React from \"react\";\nimport {\n ZPopup,\n ZLoadingMask,\n ZWell,\n ErrorBoundary,\n ll,\n useLanguage\n} from \"@msidata/zeact\";\nimport styled from \"styled-components\";\nimport { LanguagePicker } from \"./LanguagePicker\";\nimport { LocalePicker } from \"./LocalePicker\";\nimport { isAdmin } from \"../hooks/useUser\";\nimport { useAppContext } from \"../data/AppContext\";\nimport { useUserPreferences } from \"../hooks/useUserPreferences\";\n\ninterface UserPreferencesPopupProps {\n visible?: boolean;\n onClose?: (e?: any) => void;\n className?: string;\n}\n\nconst UserPreferences = styled.div`\n display: grid;\n grid-gap: 10px;\n margin: 20px;\n`;\n\nconst Warning = styled.div`\n color: red;\n`;\nexport const UserPreferencesPopup = styled(\n (props: UserPreferencesPopupProps) => {\n const { pending: updatingUserPreferences } = useUserPreferences();\n const isServiceProUser = isAdmin();\n const { brand } = useAppContext().config;\n const languageId = useLanguage();\n return (\n \n {\n props.onClose && props.onClose();\n }}\n className={props.className}\n width={600}\n height={620}\n >\n \n \n \n \n \n \n {isServiceProUser ? (\n \n {ll({\n key: \"SetUserPreferencesIn\",\n variables: [\n brand.name === \"PULSEPortal\"\n ? ll({ key: \"PulseService\", languageId })\n : ll({ key: \"ServicePro\", languageId })\n ],\n languageId\n })}\n \n ) : null}\n \n {updatingUserPreferences && (\n \n )}\n \n );\n }\n)`\n & .z-popup-action-buttons {\n display: flex;\n flex-direction: row-reverse;\n align-items: flex-end;\n }\n & .z-popup-create-button {\n margin-top: 15px;\n }\n & .z-popup-cancel-button {\n margin-top: 15px;\n }\n text-align: initial;\n`;\n\nexport default UserPreferencesPopup;\n","import * as React from \"react\";\nimport {\n ZPopup,\n ZLoadingMask,\n ZPortalLabel,\n ll,\n llContext,\n ErrorBoundary\n} from \"@msidata/zeact\";\nimport styled from \"styled-components\";\nimport { useConfiguration } from \"../hooks/useConfiguration\";\n\ninterface AboutPopupProps {\n visible?: boolean;\n onClose?: (e?: any) => void;\n className?: string;\n}\n\nconst About = styled.div`\n display: grid;\n grid-gap: 0px;\n margin: 20px;\n`;\nexport const AboutPopup = styled((props: AboutPopupProps) => {\n const [updatingAbout] = React.useState(false);\n const config = useConfiguration();\n const { languageId } = React.useContext(llContext);\n const supportEmail =\n config.brand?.supportEmail || \"serviceprosupport@msidata.com\";\n const Logo = styled.img.attrs(props => {\n return { src: props.theme[\"app-logo-color-url\"] };\n })`\n height: 90px;\n width: 90px;\n justify-self: center;\n `;\n\n const SupportEmailLink = styled.div`\n position: relative;\n top: -7px;\n left: 10px;\n `;\n\n const CopyrightNotice = styled.div`\n margin-top: 30px;\n justify-self: center;\n `;\n return (\n \n
\n {\n props.onClose && props.onClose();\n }}\n maximizeButton={() => null}\n minimizeButton={() => null}\n className={props.className}\n >\n \n \n \n \n \n \n {supportEmail}\n \n \n \n © {new Date().getFullYear()}{\" \"}\n \n {ll({\n key: config.brand?.name || \"EmptyString\",\n languageId\n })}\n \n \n \n \n {updatingAbout && (\n \n )}\n
\n
\n );\n})`\n align-items: center;\n & .z-popup-action-buttons {\n display: flex;\n flex-direction: row-reverse;\n align-items: flex-end;\n }\n & .z-popup-ok-button {\n margin-top: 15px;\n }\n text-align: initial;\n`;\n\nexport default AboutPopup;\n","import * as React from \"react\";\nimport {\n ZBanner,\n ZBannerItem,\n ZBannerSubItem,\n ZMenuItem,\n ll,\n useAuthContext,\n useLanguage\n} from \"@msidata/zeact\";\nimport { useHistory, useLocation } from \"react-router-dom\";\nimport styled, { ThemeProvider, ThemeContext } from \"styled-components\";\nimport { Route } from \"react-router-dom\";\nimport { isAdmin, useUser, isGroupAdmin } from \"../hooks/useUser\";\nimport { useConfiguration } from \"../hooks/useConfiguration\";\nimport UserPreferencesPopup from \"./UserPreferencesPopup\";\nimport AboutPopup from \"./AboutPopup\";\nimport {\n getOptionValue,\n useCompanyInfoContext\n} from \"../data/CompanyInfoContext\";\n\nconst Banner = (props: any) => {\n const user = useUser();\n const config = useConfiguration();\n const history = useHistory();\n const location = useLocation();\n const languageId = useLanguage();\n const { companyInfo } = useCompanyInfoContext();\n const logoUrl = companyInfo?.logo;\n const theme = React.useContext(ThemeContext);\n const portalBannerColor = getOptionValue(\n \"PortalBannerColor\",\n theme[\"banner-background-color\"]\n );\n const [redirect, setRedirect] = React.useState(false);\n const productName = config.brand?.name || \"ServiceProPortal\";\n const localizedProductName = ll({ key: productName, languageId });\n const isUserAdmin = isAdmin();\n const isUserGroupAdmin = isGroupAdmin();\n const basePath = location.pathname\n .replace(\"/About\", \"\")\n .replace(\"/UserPreferences\", \"\");\n\n const RedirectToLogout = (props: any) => {\n useAuthContext().logout();\n return <>;\n };\n const useSwitchTenant = (): React.ReactNode => {\n const numOfCompaniesLS = localStorage.getItem(\"numOfCompanies\") || \"1\";\n const numOfCompanies = parseInt(numOfCompaniesLS, 10);\n if (numOfCompanies > 1) {\n return (\n \n history.push(\"/SelectTenant\")\n }\n >\n {ll({ key: \"SwitchTenant\", languageId })}\n \n );\n }\n return React.Fragment;\n }\n return (\n \n {redirect ? : <>}\n \n {\n history.push(\"/Customers\");\n }}\n >\n {ll({ key: \"Customers\", languageId })}\n ,\n {\n history.push(\"/Sites\");\n }}\n >\n {ll({ key: \"Sites\", languageId })}\n ,\n {\n history.push(`${basePath}/About`);\n }}\n >\n {ll({\n key: \"AboutMenuItemTitle\",\n languageId,\n variables: [localizedProductName]\n })}\n ,\n {\n history.push(`${basePath}/UserPreferences`);\n }}\n >\n {ll({ key: \"UserPreferences\", languageId })}\n ,\n useSwitchTenant(),\n setRedirect(true)}\n >\n {ll({ key: \"LogOut\", languageId })}\n \n ]}\n >\n \n \n \n \n \n {isUserAdmin || isUserGroupAdmin ? (\n \n ) : (\n <>\n )}\n \n (\n {\n history.push(basePath);\n }}\n />\n )}\n />\n (\n {\n history.push(basePath);\n }}\n />\n )}\n />\n \n \n );\n};\n\nconst StyledBanner = styled(Banner)`\n text-align: initial;\n`;\n\nexport const withBanner = (Component: () => JSX.Element): JSX.Element => (\n <>\n \n \n \n);\n\nexport default StyledBanner;\n","import React from \"react\";\nimport {\n OrderSummary as OrderSummaryComponent,\n ZButton,\n ZLoadingMask,\n ZPopup,\n ZTooltip,\n ll,\n useLanguage\n} from \"@msidata/zeact\";\nimport {\n getBooleanOption,\n useCompanyInfoContext\n} from \"../data/CompanyInfoContext\";\nimport styled from \"styled-components\";\nimport { useAppContext } from \"../data/AppContext\";\nimport { isAdmin } from \"../hooks/useUser\";\n\nconst Popup = styled(ZPopup)`\n .k-window {\n position: fixed;\n }\n\n .k-window-content {\n padding-bottom: 0;\n }\n`;\n\nconst OrderSummary = (props: { orderId: number; onClose: () => void }) => {\n const [printing, setPrinting] = React.useState(false),\n [maximized, setMaximized] = React.useState(false),\n languageId = useLanguage(),\n Button = styled(ZButton)`\n float: right;\n margin-top: 15px !important;\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2),\n 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12) !important;\n `,\n OrderSummaryContainer =\n window.innerWidth > window.innerHeight\n ? styled.div`\n height: ${maximized\n ? window.innerHeight - 143\n : window.innerHeight * 0.9 - 143}px;\n overflow-y: scroll;\n overflow-x: hidden;\n `\n : styled.div`\n height: ${window.innerHeight}px;\n width: ${window.innerWidth}px;\n overflow-y: scroll;\n overflow-x: hidden;\n position: fixed;\n top: 0;\n left: 0;\n z-index: 10001;\n background-color: white;\n `,\n PrintingMaskWrapper = styled.div`\n position: fixed;\n top: 0;\n left: 0;\n width: ${window.innerWidth};\n height: ${window.innerHeight};\n `,\n MaskWrapper = styled.div`\n width: 100%;\n height: 100%;\n `,\n OffScreenWrapper = styled.div`\n position: absolute;\n bottom: 10000px;\n left: 10000px;\n `,\n { apiClient, isMobile } = useAppContext(),\n CloseWrapper = styled.div`\n position: fixed;\n top: 10px;\n right: ${isMobile ? \"10px\" : \"20px\"};\n `,\n PrintWrapper = styled.div`\n position: fixed;\n bottom: 10px;\n right: ${isMobile ? \"10px\" : \"20px\"};\n `,\n [data, setData] = React.useState(null),\n editableFVS = isAdmin(),\n { companyInfo } = useCompanyInfoContext(),\n { codes, currency: companyCurrency, logo: logoUrl } = companyInfo,\n isVista = getBooleanOption(\"IsVista\", false);\n\n if (isVista && data) {\n const udfs = (data as any).UserDefinedFields;\n const udls = (data as any).UserDefinedLists;\n const udf = udfs.find((udf: any) => udf.BindName === \"UDF_Price_Method\");\n const udl =\n udf && udls.find((udl: any) => udl.Id === udf.UserDefinedListId);\n\n if (udl) {\n (data as any).Order.OrderSegment.forEach((os: any) => {\n const priceMethod = udl?.Values?.find(\n (udlv: any) => `${udlv.Id}` === os[\"UDF_Price_Method\"]\n )?.CodeNumber;\n\n if (priceMethod === \"N\" || priceMethod === \"F\") {\n os.OrderLine = [];\n }\n });\n }\n }\n\n React.useEffect(() => {\n apiClient\n .get(`Order/GetOrderSummaryData`, {\n params: {\n orderId: props.orderId\n }\n })\n .then(response => {\n setData(response.data.d.results);\n });\n }, [props.orderId, apiClient]);\n \n if (isVista) {\n if (data?.Order.LastIntegratedDateTime === null) {\n data.Order.OrderNumber = ll({key: \"NewOrder\", languageId});\n data.Order.OrderSegment.forEach((segment: any) => segment.SegmentNumber = ll({key: \"NewOrderSegment\", languageId}))\n } else if (data) {\n data.Order.OrderSegment.forEach((segment: any) => {\n if(!isNaN(segment.SegmentNumber) && parseInt(segment.SegmentNumber) < 0)\n segment.SegmentNumber = ll({key: \"NewOrderSegment\", languageId});\n })\n if(!isNaN(data.Order.OrderNumber) && parseInt(data.Order.OrderNumber) < 0)\n data.Order.OrderNumber = ll({key: \"NewOrder\", languageId});\n }\n }\n \n return (\n <>\n {printing && data ? (\n \n setPrinting(false)}\n companyCurrency={companyCurrency}\n fvsLevelData={\n codes.PortalFVSLevel.length > 0\n ? codes.PortalFVSLevel\n : undefined\n }\n fvsLevelId={\n data.Order.OrderStatus.PortalFVSLevelId\n ? data.Order.OrderStatus.PortalFVSLevelId\n : undefined\n }\n >\n \n ) : (\n undefined\n )}\n {window.innerWidth > window.innerHeight ? (\n {\n props.onClose();\n }}\n allowMaximize={true}\n onMaximizeChange={(maximize: boolean) => setMaximized(maximize)}\n title={\"OrderSummary\"}\n width={window.innerWidth * 0.6 + 80}\n height={window.innerHeight * 0.9}\n >\n \n {data ? (\n 0\n ? codes.PortalFVSLevel\n : undefined\n }\n fvsLevelId={\n data.Order.OrderStatus.PortalFVSLevelId\n ? data.Order.OrderStatus.PortalFVSLevelId\n : undefined\n }\n >\n ) : (\n
\n \n
\n )}\n
\n {\n setPrinting(true);\n }}\n disabled={printing}\n >\n Print\n \n {printing && }\n \n ) : (\n \n {data ? (\n 0\n ? codes.PortalFVSLevel\n : undefined\n }\n fvsLevelId={\n data.Order.OrderStatus.PortalFVSLevelId\n ? data.Order.OrderStatus.PortalFVSLevelId\n : undefined\n }\n >\n ) : (\n \n \n \n )}\n \n {\n setPrinting(true);\n }}\n disabled={printing}\n >\n Print\n \n \n {\n props.onClose();\n }}\n >\n \n \n \n \n {printing && (\n \n \n \n )}\n \n )}\n \n );\n};\n\nexport default OrderSummary;\n","import { InspectionResult } from \"@msidata/service-pro-api-schema\";\nimport { CacheTimes, OData, ReactQuery } from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nexport interface UseCompletedInspectionResultsParams {\n [key: string]: any;\n orderId: number;\n}\n\nexport interface UseCompletedInspectionResultsReturnValue {\n data: InspectionResult[] | null;\n error: Error | null;\n done: boolean;\n refresh: () => void;\n}\n\nconst odata = {\n $expand: [\"CompletedByUser\", \"Inspection\", \"InspectionResult\"],\n $select: [\n \"CompletedDateTime\",\n \"CompletedByUser/EmailAddress\",\n \"Inspection/InspectionName\",\n \"Inspection/VersionNumber\",\n \"InspectionResult/AttachmentId\"\n ],\n $top: 1000\n};\n\n//@ts-ignore\nexport const useCompletedInspectionResults = (\n params: UseCompletedInspectionResultsParams & OData\n) => {\n const { apiClient } = useAppContext();\n const fetchInspectionResults = (\n key: string,\n params: UseCompletedInspectionResultsParams & OData\n ): Promise =>\n new Promise((res, rej) =>\n apiClient\n .request({\n method: \"GET\",\n url: \"Order/GetInspectionOrderLines\",\n params: { ...params, ...odata }\n })\n .then(resp => {\n if (resp.status === 200) {\n res(resp.data.d.results);\n } else {\n rej(resp.statusText);\n }\n })\n );\n\n const { data, error, refetch, isFetching } = ReactQuery.useQuery(\n [\"completed-inspection-results\", params],\n fetchInspectionResults,\n { suspense: false, staleTime: CacheTimes.FifteenMinutes }\n );\n\n return {\n data,\n error,\n done: isFetching,\n refresh: refetch\n };\n};\n","import * as React from \"react\";\nimport {\n ZGrid,\n ZPopup,\n CustomGridColumnProps,\n FormattedValue,\n shortDateTimeFormat,\n useAlerts,\n useLanguage,\n ll\n} from \"@msidata/zeact\";\nimport styled from \"styled-components\";\nimport { useCompletedInspectionResults } from \"../hooks/useCompletedInspectionResults\";\nimport { OrderLine } from \"@msidata/service-pro-api-schema\";\nimport { downloadAttachment } from \"../util/utils\";\nimport { useAppContext } from \"../data/AppContext\";\n\nexport interface InspectionResultReportProps {\n className?: string;\n orderId: number;\n onClose?: () => void;\n}\n\nexport const InspectionResultReport = (props: InspectionResultReportProps) => {\n const { data, done } = useCompletedInspectionResults({\n orderId: props.orderId\n });\n const [ir, setIR] = React.useState(data);\n const userLanguage = useLanguage();\n const { issueAlert } = useAlerts();\n const { apiClient } = useAppContext();\n const Popup = styled(ZPopup)`\n .order-inspection-results-grid {\n height: 100%;\n }\n `;\n const Link = styled.a`\n color: ${props => props.theme[\"app-link-color\"]} !important;\n :hover {\n color: ${props => props.theme[\"hover-color\"]} !important;\n cursor: pointer;\n }\n :active {\n color: ${props => props.theme[\"active-color\"]} !important;\n }\n `;\n\n React.useEffect(() => {\n setIR(data);\n return () => setIR(undefined);\n }, [data]);\n\n return (\n {\n setIR(undefined);\n props.onClose && props.onClose();\n }}\n resizable={false}\n height={575}\n width={1000}\n >\n (\n \n {dataItem.CompletedByUser === null ||\n dataItem.CompletedByUser === undefined\n ? \"---\"\n : dataItem.CompletedByUser.EmailAddress}\n \n )\n },\n {\n title: \"CompletedDate\",\n field: \"CompletedDateTime\",\n filter: \"date\",\n cell: ({\n dataItem,\n className\n }: {\n dataItem: OrderLine;\n className?: string;\n }) => (\n \n {dataItem.CompletedDateTime === null ? (\n \"---\"\n ) : (\n \n )}\n \n )\n },\n {\n title: \"Attachment\",\n sortable: false,\n reorderable: false,\n cell: ({\n dataItem,\n className\n }: {\n dataItem: OrderLine;\n className?: string;\n }) => (\n \n {dataItem.InspectionResult === null ||\n dataItem.InspectionResult === undefined ||\n //@ts-ignore\n dataItem.InspectionResult.AttachmentId === null ||\n //@ts-ignore\n dataItem.InspectionResult.AttachmentId ===\n undefined ? (\n ---\n ) : (\n \n downloadAttachment({\n attachmentId:\n dataItem.InspectionResult\n ?.AttachmentId || 0,\n apiClient: apiClient,\n issueAlert: issueAlert\n })\n }\n >\n {ll({\n key: \"DownloadAttachment\",\n languageId: userLanguage\n })}\n \n )}\n \n )\n }\n ] as CustomGridColumnProps[]\n }\n scrollable={\"scrollable\"}\n pageable={true}\n pageSize={10}\n sort={[{ dir: \"desc\", field: \"CompletedDateTime\" }]}\n />\n \n );\n};\n","import {\n CorrelationGroup,\n FieldStateName,\n FontAwesomeIcon,\n FormattedValue,\n ZContainer,\n ZContainerChildren,\n ZLoadingMask,\n ZPortalLabel,\n ZTooltip,\n buildAddressString,\n getUDFValue,\n llContext,\n localeContext,\n longDateFormat,\n ll,\n shortDateFormat,\n longDateTimeFormat,\n shortDateTimeFormat,\n useAlerts,\n useLayoutContext\n} from \"@msidata/zeact\";\nimport moment from \"moment\";\nimport styled from \"styled-components\";\nimport { Order as IOrder } from \"@msidata/service-pro-api-schema\";\nimport * as React from \"react\";\nimport OrderSummary from \"./OrderSummary\";\nimport { InspectionResultReport } from \"./InspectionResultReport\";\nimport { isAdmin } from \"../hooks/useUser\";\nimport {\n getBooleanOption,\n getOptionValue,\n useCompanyInfoContext\n} from \"../data/CompanyInfoContext\";\nimport _ from \"lodash\";\nimport { downloadAttachment } from \"../util/utils\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst OrderNotesPopup = React.lazy(() => import(\"./OrderNotesPopup\"));\nconst ServiceItemsPopup = React.lazy(() => import(\"./ServiceItemsPopup\"));\nconst width50px = { width: \"50px\" };\nconst fontSize20px = {\n fontSize: \"20px\"\n};\nconst visibleAndHidden = [\"Visible\", \"Hidden\"] as FieldStateName[];\nconst blankDiv = () =>
;\nconst StatusBar = styled(\n (props: {\n status: string;\n onHold: boolean;\n className?: string;\n style?: any;\n key: string;\n }) =>
\n)`\n background: ${props => {\n if (props.onHold === true) {\n return props.theme[\"on-hold-color\"];\n } else if (props.status !== \"COMPLETED\") {\n return props.theme[\"in-progress-color\"];\n } else if (props.status === \"COMPLETED\") {\n return props.theme[\"completed-color\"];\n }\n return \"white\";\n }};\n grid-column: 1;\n grid-row: 1/9;\n`;\n\nexport interface OrderCellProps {\n dataItem: IOrder;\n dataIndex: number;\n className?: string;\n isWide: boolean;\n}\nconst OrderCellComponent: React.FC = ({\n dataItem,\n dataIndex,\n className\n}) => {\n const { isWide } = useLayoutContext();\n\n const {\n Appointment,\n Customer,\n CustomerPO,\n Description,\n Id,\n JobNumber,\n OnHold,\n OrderDate,\n OrderedBy,\n OrderNumber,\n OrderStatus,\n RepairItem,\n Site,\n TechOrderStatus,\n TotalPrice,\n WaitingFor,\n WaitingForId,\n OrderAttachment,\n LastIntegratedDateTime\n } = dataItem as IOrder;\n\n const serviceItemsBadge = RepairItem ? RepairItem.length : 0;\n const address = Site?.ShipTo;\n\n const firstOpenScheduledAppointment = Appointment\n ? _.chain(Appointment)\n .filter(\n appointment =>\n !!appointment.ScheduledDateTime &&\n appointment?.AppointmentStatus?.Closed === false\n )\n .sortBy(\"ScheduledDateTime\")\n .head()\n .value()\n : undefined;\n const ScheduledDateTime = firstOpenScheduledAppointment?.ScheduledDateTime;\n const RequestedDateTime =\n firstOpenScheduledAppointment &&\n firstOpenScheduledAppointment.RequestedDateTime\n ? firstOpenScheduledAppointment.RequestedDateTime\n : _.chain(Appointment)\n .filter(\n appointment =>\n !!appointment.RequestedDateTime &&\n appointment?.AppointmentStatus?.Closed === false\n )\n .sortBy(\"RequestedDateTime\")\n .head()\n .value()?.RequestedDateTime;\n const AssignedTech =\n firstOpenScheduledAppointment?.AssignedTech?.ServiceTechName;\n const { localeId } = React.useContext(localeContext);\n const { languageId } = React.useContext(llContext);\n const { companyInfo } = useCompanyInfoContext();\n const { issueAlert } = useAlerts();\n const { apiClient } = useAppContext();\n const { codes, currency, userDefinedFields, userDefinedLists } = companyInfo;\n const UserDefinedData = {\n UserDefinedLists: userDefinedLists,\n UserDefinedFields: userDefinedFields\n };\n const orderSummaryDocumentTypeId = _.find(\n codes.DocumentType,\n dt => dt.CodeNumber === \"ORDER SUMMARY\"\n )?.Id;\n const orderHasOrderSummaryReport =\n _.filter(\n OrderAttachment,\n oa => oa.Attachment.DocumentTypeId === orderSummaryDocumentTypeId\n ).length > 0;\n\n const isVista = getBooleanOption(\"IsVista\", false);\n const containerItems = React.useMemo(\n () =>\n [\n ,\n ,\n ,\n ,\n ,\n ,\n ,\n \n }\n propsToLocalize={[\"header\"]}\n id={\"OrderDate\"}\n key={\"OrderDate\"}\n />,\n \n }\n propsToLocalize={[\"header\"]}\n fontSize={18}\n id={\"OrderTotal\"}\n key={\"OrderTotal\"}\n />,\n ,\n ,\n ,\n ,\n \n ) : (\n \"NotScheduled\"\n )\n }\n propsToLocalize={[\"header\", !ScheduledDateTime ? \"content\" : \"\"]}\n id={\"Appointment/ScheduledDateTime\"}\n key={\"NextScheduledAppointment\"}\n />,\n \n ) : (\n \"---\"\n )\n }\n propsToLocalize={[\"header\"]}\n id={\"Appointment/RequestedDateTime\"}\n key={\"RequestedDateTime\"}\n />,\n ,\n ,\n ,\n ...userDefinedFields\n .filter(udf => !!udf.ShowOnDesktop && udf.Type !== \"SIGNATURE\")\n .map(udf => (\n \n ))\n ] as ZContainerChildren,\n [\n AssignedTech,\n Customer,\n CustomerPO,\n Description,\n JobNumber,\n OrderNumber,\n OrderDate,\n OrderStatus,\n OrderedBy,\n RequestedDateTime,\n ScheduledDateTime,\n Site,\n TechOrderStatus,\n TotalPrice,\n WaitingFor,\n userDefinedFields,\n address,\n isWide,\n dataItem,\n UserDefinedData,\n languageId,\n localeId,\n currency,\n isVista,\n LastIntegratedDateTime\n ]\n );\n const ButtonBar = styled.div`\n height: 25px;\n font-size: 22px;\n display: flex;\n align-items: center;\n flex-direction: row-reverse;\n justify-content: ${isWide ? \"flex-start\" : \"space-evenly\"};\n `;\n const Button: any = styled.div`\n color: ${props => props.theme[\"app-link-color\"]};\n display: block;\n width: 30px;\n cursor: pointer;\n :hover {\n color: ${props => props.theme[\"hover-color\"]};\n }\n :active {\n color: ${props => props.theme[\"active-color\"]};\n }\n `;\n const [orderSummaryVisible, setOrderSummaryVisible] = React.useState(false);\n const [inspectionsVisible, setInspectionsVisible] = React.useState(false);\n const [orderNotesVisible, setOrderNotesVisible] = React.useState(false);\n const [serviceItemsVisible, setServiceItemsVisible] = React.useState(false);\n\n const hideOrderSummary = getBooleanOption(\"PortalHideOrderSummary\", false);\n const hideInspections = getBooleanOption(\"PortalHideInspections\", false);\n const hideOrderNotes = getBooleanOption(\"PortalHideOrderNotes\", false);\n const hideServiceItems = getBooleanOption(\"PortalHideServiceItems\", false);\n const orderSummaryFormat = getOptionValue(\n \"PortalOrderSummaryFormat\",\n \"Portal\"\n );\n\n return (\n \n }\n >\n
\n \n \n 0\n ? codes.PortalFVSLevel\n : undefined\n }\n fvsLevelId={\n OrderStatus?.PortalFVSLevelId\n ? OrderStatus?.PortalFVSLevelId\n : undefined\n }\n />\n {orderSummaryVisible && !hideOrderSummary && (\n \n setOrderSummaryVisible(false)}\n />\n \n )}\n {inspectionsVisible && !hideInspections && (\n \n setInspectionsVisible(false)}\n />\n \n )}\n {orderNotesVisible && !hideOrderNotes && (\n }>\n \n setOrderNotesVisible(false)}\n />\n \n \n )}\n {serviceItemsVisible && !hideServiceItems && (\n }>\n \n setServiceItemsVisible(false)}\n />\n \n \n )}\n \n {!hideServiceItems && (\n \n )}\n {!hideOrderNotes && (\n \n )}\n {!hideInspections && (\n \n )}\n {!hideOrderSummary && (\n {\n if (orderSummaryFormat === \"BackOffice\") {\n if (orderHasOrderSummaryReport) {\n downloadAttachment({\n endpoint: `Order/GetLatestOrderSummaryReport?orderId=${Id}`,\n apiClient: apiClient,\n issueAlert: issueAlert\n });\n }\n } else {\n setOrderSummaryVisible(true);\n }\n }}\n style={width50px}\n >\n \n <>\n \n \n \n \n \n )}\n \n
\n
\n \n \n );\n};\n\nconst StyledOrderCell = styled(OrderCellComponent)`\n .portal-label-text {\n display: contents;\n }\n td& {\n margin: 0px;\n padding: 0px;\n line-height: 1.25;\n position: relative;\n }\n & .order-cell {\n width: 100vw;\n &.wide {\n width: 100%;\n max-width: 1080px;\n }\n display: inline-grid;\n & div.portal-label div {\n &:nth-child(2n) {\n justify-content: flex-end;\n }\n justify-content: flex-start;\n align-content: flex-start;\n }\n & div.portal-label {\n &:nth-child(2n) {\n text-align: right;\n justify-content: flex-end;\n }\n justify-content: flex-start;\n align-content: flex-start;\n }\n &.wide div.portal-label,\n &.wide div.portal-label div {\n &:nth-child(2n) {\n text-align: unset;\n justify-content: unset;\n }\n justify-content: flex-start;\n align-content: flex-start;\n }\n & div.portal-label-header,\n & div.portal-label-content {\n white-space: nowrap;\n }\n grid-template-columns: 6px 1fr;\n\n tr.k-alt & {\n background-color: #f9f9f9;\n }\n & div.right {\n align-self: center;\n justify-self: flex-end;\n\n & .portal-label-text {\n text-align: right;\n }\n }\n & .dl-item .portal-label-text {\n display: none;\n }\n }\n`;\nexport default StyledOrderCell;\n","import { OrderList } from \"./OrderList\";\nimport {\n Cache,\n FieldVisibilityProvider,\n ZButton,\n ZLoadingMask,\n ZPopup,\n ZSorter,\n ZTab,\n ZTabStrip,\n ZTabStripContentProps,\n ZTextBox,\n ZTextBoxProps,\n useApplicationName,\n useDebounce,\n useFieldVisibilitySettings,\n useLayoutContext,\n useViewport\n} from \"@msidata/zeact\";\nimport { useState } from \"react\";\nimport styled from \"styled-components\";\nimport * as React from \"react\";\nimport { useOrderBadgeCounts } from \"../hooks/useOrderBadgeCounts\";\nimport {\n CompositeFilterDescriptor,\n SortDescriptor\n} from \"@progress/kendo-data-query\";\nimport {\n getBooleanOption,\n useCompanyInfoContext\n} from \"../data/CompanyInfoContext\";\nimport {\n completedFilters,\n inProgressFilters,\n onHoldFilters\n} from \"../data/TabFilters\";\nimport { AdvancedFilter } from \"./AdvancedFilter\";\n\nexport enum orderTabs {\n NONE = 0,\n IN_PROGRESS = 1,\n COMPLETED = 2,\n ON_HOLD = 3,\n SCHEDULED = 4\n}\n\nconst RequestServicePopup = React.lazy(\n () => import(\"./RequestService/RequestServicePopup\")\n);\n\nconst defaultSort: SortDescriptor[] = [{ field: \"OrderDate\", dir: \"desc\" }];\nconst sortableFields = [\n \"Customer/CustomerName\",\n \"Customer/CustomerNumber\",\n \"CustomerPO\",\n \"JobNumber\",\n \"OrderDate\",\n \"OrderedBy\",\n \"OrderNumber\",\n \"Site/SiteName\",\n \"Site/SiteNumber\",\n { field: \"TotalPrice\", label: \"OrderTotal\" }\n];\nconst TabContent = (props: ZTabStripContentProps) => {\n const [filterText, setFilterText] = useState(\"\");\n const debouncedFilterText = useDebounce(filterText, 200);\n const [cache, setCache] = useState({});\n const [grid, setGrid] = useState(null);\n const setGridInstance = (gridInstance: any) => setGrid(gridInstance);\n const { innerHeight } = useViewport();\n const [popupIsHidden, setPopupIsHidden] = React.useState(true);\n const { isWide } = useLayoutContext();\n const [advancedFilterEnabled, setAdvancedFilterEnabled] =\n React.useState(false);\n const [advancedFilter, setAdvancedFilter] = React.useState(\"\");\n const debouncedAdvancedFilter = useDebounce(advancedFilter, 200);\n const hideRequestService = getBooleanOption(\n \"PortalHideRequestService\",\n false\n );\n const { companyInfo, pending: companyInfoPending } = useCompanyInfoContext();\n const { id: companyId } = companyInfo;\n const { appNameAbbreviation } = useApplicationName();\n const fvsParams = React.useMemo(() => {\n return {\n app: appNameAbbreviation,\n containerId: \"PortalOrderCell\"\n };\n }, [appNameAbbreviation]);\n const { fieldVis, refetch } = useFieldVisibilitySettings(fvsParams);\n const [fvSettings, setFvSettings] = React.useState(fieldVis);\n const selectedTab = props.value;\n React.useEffect(() => {\n setFvSettings(fieldVis);\n }, [fieldVis]);\n\n React.useEffect(() => {\n if (!companyInfoPending) {\n const cachedCompanyIdString =\n localStorage.getItem(\"Company-Id\") || \"-1\";\n const cachedCompanyId = parseInt(cachedCompanyIdString);\n if (companyId === cachedCompanyId) {\n refetch({ force: true })\n .then(fvs => {\n setCache({});\n setFvSettings(fvs);\n })\n .catch(err => console.error(err));\n }\n }\n }, [companyId, companyInfoPending, refetch]);\n\n const getFilterFromString = React.useCallback(\n (\n filter: string,\n selectedTab?: number\n ): CompositeFilterDescriptor | undefined => {\n let baseFilter: CompositeFilterDescriptor | undefined = undefined;\n\n if (filter && !advancedFilterEnabled) {\n baseFilter = {\n logic: \"or\",\n filters: [\n {\n field: \"OrderNumber\",\n operator: \"startswith\",\n value: filter\n },\n {\n field: \"Site/SiteName\",\n operator: \"startswith\",\n value: filter\n },\n {\n field: \"Customer/CustomerName\",\n operator: \"startswith\",\n value: filter\n },\n {\n field: \"Customer/CustomerNumber\",\n operator: \"startswith\",\n value: filter\n }\n ]\n };\n }\n\n if (selectedTab) {\n switch (selectedTab) {\n case orderTabs.IN_PROGRESS:\n return {\n logic: \"and\",\n filters: baseFilter\n ? [baseFilter, ...inProgressFilters]\n : inProgressFilters\n };\n case orderTabs.COMPLETED:\n return {\n logic: \"and\",\n filters: baseFilter\n ? [baseFilter, ...completedFilters]\n : completedFilters\n };\n case orderTabs.ON_HOLD:\n return {\n logic: \"and\",\n filters: baseFilter\n ? [baseFilter, ...onHoldFilters]\n : onHoldFilters\n };\n case orderTabs.SCHEDULED: // filtered on back end through custom endpoint\n default:\n return baseFilter;\n }\n }\n return baseFilter;\n },\n [advancedFilterEnabled]\n );\n\n const filter = React.useMemo(\n () => getFilterFromString(debouncedFilterText, selectedTab),\n [debouncedFilterText, getFilterFromString, selectedTab]\n );\n\n const [sort, setSort] = React.useState(defaultSort);\n\n return (\n <>\n
\n
\n \n {\n setFilterText(`${event?.target.value || \"\"}`);\n }) as ZTextBoxProps[\"onChange\"]\n }\n disabled={advancedFilterEnabled}\n placeholder={\n \"SearchByOrderNumberOrSiteNameOrCustomerNameOrCustomerNumber\"\n }\n width={300}\n />\n \n setAdvancedFilterEnabled(true)\n }\n >\n AdvancedSearch\n \n \n {!hideRequestService && (\n \n
\n {\n setPopupIsHidden(false);\n }}\n >\n RequestService\n \n
\n
\n )}\n
\n \n {advancedFilterEnabled ? (\n
\n {\n setAdvancedFilterEnabled(false)}\n />\n }\n \n setAdvancedFilter(oDataFilter)\n }\n />\n
\n ) : undefined}\n
\n \n fvSettings?.components.length\n ? fvSettings?.components.find(\n c =>\n c.visible &&\n ((typeof field === \"string\" &&\n c.fieldName === field) ||\n (typeof field === \"object\" &&\n (c.fieldName === field.field ||\n c.fieldName === field.label)))\n )\n : field\n )}\n initialValue={defaultSort}\n onChange={e => {\n setSort(e.value);\n grid.setState({ sort: e.value });\n }}\n maxSorts={2}\n />\n
\n
\n \n
\n
\n
\n {!popupIsHidden && (\n \n
\n \n \n }\n >\n setPopupIsHidden(true)}\n gridRefresh={() => grid && grid.refresh()}\n />\n \n )}\n \n );\n};\n\nconst TabStrip = (props: any) => {\n const { results, refresh, pending: badgesPending } = useOrderBadgeCounts();\n const { All, InProgress, Completed, OnHold, Scheduled } = results;\n const { companyInfo, pending: companyInfoPending } = useCompanyInfoContext();\n const { id: companyId } = companyInfo;\n\n React.useEffect(() => {\n if (!companyInfoPending) {\n const cachedCompanyIdString =\n localStorage.getItem(\"Company-Id\") || \"-1\";\n const cachedCompanyId = parseInt(cachedCompanyIdString);\n if (companyId === cachedCompanyId) {\n refresh();\n }\n }\n }, [companyId, companyInfoPending, refresh]);\n\n return (\n <>\n
\n \n \n \n \n \n \n \n
\n \n );\n};\nconst StyledTabs = styled(TabStrip)`\n .MuiTabs-root {\n margin-top: ${props => (props.isWide ? `60px` : \"55px\")};\n }\n .MuiTab-root {\n overflow: visible;\n padding: 15px;\n }\n .k-grid {\n width: 100%;\n min-width: 300px;\n & .k-grid-norecords {\n line-height: 2;\n }\n }\n .k-grid th,\n .k-grid td {\n padding: 0px;\n min-width: 280px;\n }\n .advanced-filter {\n width: 100%;\n text-align: left;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-sizing: border-box;\n\n & .k-filter {\n margin-left: 15px;\n }\n }\n .advanced-filter-close {\n display: block;\n float: right;\n font-size: 24px;\n padding: 10px;\n }\n & .portal-action-bar input {\n grid-column: 1;\n }\n & .portal-action-bar {\n display: grid;\n text-align: initial;\n ${props =>\n props.isWide\n ? `grid-template-columns: auto 1fr;`\n : `grid-template-columns: 1fr;\n justify-items: center;`}\n\n width: 100%;\n align-items: end;\n }\n\n & .sorter {\n display: flex;\n align-items: flex-start;\n }\n\n & .grid-span {\n align-self: end;\n margin-bottom: ${props => (props.isWide ? `5px` : null)};\n justify-self: ${props => (props.isWide ? `end` : `center`)};\n & .k-textbox-container {\n padding-top: ${props => (props.isWide ? null : `0`)};\n }\n }\n\n & #request-service-button {\n align-self: center;\n justify-self: ${props => (props.isWide ? \"end\" : \"center\")};\n grid-column: ${props => (props.isWide ? 2 : 1)};\n grid-row: ${props => (props.isWide ? 1 : 2)};\n margin-bottom: 2px;\n & a {\n text-decoration: none;\n }\n }\n`;\n\nexport default StyledTabs;\n","import {\n ErrorBoundary,\n ZGridList,\n ZLoadingLogo,\n useViewport,\n Cache,\n CacheTimes,\n useLayoutContext\n} from \"@msidata/zeact\";\nimport * as React from \"react\";\nimport OrderCell from \"./OrderCell\";\nimport {\n CompositeFilterDescriptor,\n SortDescriptor\n} from \"@progress/kendo-data-query\";\nimport { useCompanyInfoContext } from \"../data/CompanyInfoContext\";\nimport _ from \"lodash\";\nimport { orderTabs } from \"./Tabs\";\n\nconst defaultOData = {\n $select: [\n \"Appointment/AppointmentStatus/Closed\",\n \"Appointment/AssignedTech/ServiceTechName\",\n \"Appointment/RequestedDateTime\",\n \"Appointment/ScheduledDateTime\",\n \"Customer/CustomerName\",\n \"Customer/CustomerNumber\",\n \"CustomerPO\",\n \"Description\",\n \"JobNumber\",\n \"OnHold\",\n \"OrderDate\",\n \"OrderedBy\",\n \"OrderNumber\",\n \"OrderStatus/CodeNumber\",\n \"OrderStatus/PortalFVSLevelId\",\n \"RepairItem/InventoryNumber\",\n \"RepairItem/Description\",\n \"RepairItem/SerialNumber\",\n \"Site/ShipTo/Address1\",\n \"Site/ShipTo/Address2\",\n \"Site/ShipTo/Address3\",\n \"Site/ShipTo/City\",\n \"Site/ShipTo/PostalCode\",\n \"Site/ShipTo/Region\",\n \"Site/SiteName\",\n \"Site/SiteNumber\",\n \"TechOrderStatus\",\n \"TotalPrice\",\n \"WaitingFor/CodeNumber\",\n \"WaitingFor/PortalInProgress\",\n \"OrderAttachment\",\n \"OrderAttachment/Attachment/DocumentTypeId\",\n \"LastIntegratedDateTime\"\n ],\n $expand: [\n \"Appointment\",\n \"Appointment/AppointmentStatus\",\n \"Appointment/AssignedTech\",\n \"Customer\",\n \"OrderStatus\",\n \"RepairItem\",\n \"Site\",\n \"Site/ShipTo\",\n \"WaitingFor\",\n \"OrderAttachment/Attachment\"\n ]\n};\nconst style = { width: \"100vw\" };\nexport const OrderList = (props: {\n filter?: CompositeFilterDescriptor;\n oDataFilter?: string;\n sort?: SortDescriptor[];\n cache: Cache;\n setCache: React.Dispatch>;\n setGridInstance?: (gridInstance: any) => void;\n selectedTab: orderTabs;\n}) => {\n const { innerHeight } = useViewport();\n const { isWide } = useLayoutContext();\n const { filter, cache, setCache, selectedTab, sort } = props;\n const { companyInfo, pending } = useCompanyInfoContext();\n const { userDefinedFields } = companyInfo;\n const getParams = React.useCallback(() => {\n let params = Object.assign({}, defaultOData);\n userDefinedFields.forEach(udf =>\n udf?.BindName ? params.$select.push(udf.BindName) : undefined\n );\n return params;\n }, [userDefinedFields]);\n const [odata, setOData] = React.useState(getParams());\n React.useEffect(() => {\n if (!pending) {\n let params = getParams();\n setOData(params);\n setCache({});\n }\n }, [pending, setCache, setOData, getParams]);\n\n const uniqueExpands = React.useMemo(\n () => _.uniq(odata.$expand),\n [odata.$expand]\n );\n const uniqueSelects = React.useMemo(\n () => _.uniq(odata.$select),\n [odata.$select]\n );\n\n return (\n \n }>\n {pending ? (\n \n ) : (\n \n )}\n \n \n );\n};\n","import {\n CacheTimes,\n ReactQuery,\n useAlerts,\n displayAndLogErrorWithMessage\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\nimport React from \"react\";\n\ninterface OrderBadgeCountResult {\n All: number;\n InProgress: number;\n Completed: number;\n OnHold: number;\n Scheduled: number;\n}\n\nexport interface UseOrderBadgeCountsHookReturnValue {\n results: OrderBadgeCountResult;\n refresh: (\n args?:\n | {\n force?: boolean | undefined;\n throwOnError?: boolean | undefined;\n }\n | undefined\n ) => Promise>;\n error: any;\n pending: boolean;\n}\n\nconst queryConfig = {\n staleTime: CacheTimes.FifteenMinutes,\n suspense: false,\n retryCount: 2\n};\n\nexport const useOrderBadgeCounts = () => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n const fetchOrderCounts = React.useCallback(() => {\n return new Promise>((resolve, reject) =>\n apiClient\n .request({\n method: \"GET\",\n url: `Order/GetOrderBadgeCounts`\n })\n .then(response => {\n if (response.status === 200) {\n resolve(response.data.d.results);\n } else {\n throw response;\n }\n })\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"GetOrderBadgeCountsErrorMessage\",\n issueAlert\n );\n\n resolve({});\n })\n );\n }, [apiClient, issueAlert]);\n\n const { data, error, refetch, isFetching } = ReactQuery.useQuery(\n \"order-badge-counts\",\n fetchOrderCounts,\n queryConfig\n );\n\n let results = data || {};\n const All = results.All || 0;\n const InProgress = results.InProgress || 0;\n const Completed = results.Completed || 0;\n const OnHold = results.OnHold || 0;\n const Scheduled = results.Scheduled || 0;\n\n return {\n results: {\n All,\n InProgress,\n Completed,\n OnHold,\n Scheduled\n },\n error,\n refresh: refetch,\n pending: isFetching\n };\n};\n","import { CompositeFilterDescriptor, FilterDescriptor } from \"@progress/kendo-data-query\";\n\nexport const inProgressFilters: CompositeFilterDescriptor[] = [\n {\n logic: \"and\",\n filters:[\n {\n field: \"OrderStatus/CodeNumber\",\n operator: \"neq\",\n value: \"COMPLETED\"\n },\n {\n field: \"OnHold\",\n operator: \"neq\",\n value: true\n },\n {\n logic: \"or\",\n filters:[\n {\n field: \"WaitingForId\",\n operator: \"isnull\"\n },\n {\n field: \"WaitingFor/PortalInProgress\",\n operator: \"eq\",\n value: true\n }\n ]\n }\n ]\n }\n];\n\nexport const completedFilters: FilterDescriptor[] =\n [{\n field: \"OrderStatus/CodeNumber\",\n operator: \"eq\",\n value: \"COMPLETED\"\n\n }];\n\nexport const onHoldFilters: CompositeFilterDescriptor[] = [\n {\n logic: \"and\",\n filters: [\n {\n field: \"OrderStatus/CodeNumber\",\n operator: \"neq\",\n value: \"COMPLETED\"\n },\n {\n logic: \"or\",\n filters: [\n {\n logic: \"and\",\n filters: [\n {\n field: \"WaitingForId\",\n operator: \"isnotnull\"\n },\n {\n field: \"WaitingFor/PortalInProgress\",\n operator: \"neq\",\n value: true\n }\n ]\n },\n {\n field: \"OnHold\",\n operator: \"eq\",\n value: true\n }\n ]\n }\n ]\n }\n];","import { ZFilter, useFieldVisibilityContext } from \"@msidata/zeact\";\nimport { useCompanyInfoContext } from \"../data/CompanyInfoContext\";\nimport React from \"react\";\nimport _ from \"lodash\";\n\nconst defaultFilter = [\n { field: \"OrderNumber\", operator: \"contains\" },\n { field: \"SiteId\", operator: \"eq\" },\n { field: \"CustomerId\", operator: \"eq\" }\n];\n\nexport const AdvancedFilter = (props: any) => {\n const { fieldVis } = useFieldVisibilityContext();\n const { companyInfo } = useCompanyInfoContext();\n const { userDefinedFields, userDefinedLists } = companyInfo;\n const UserDefinedData = {\n UserDefinedLists: userDefinedLists,\n UserDefinedFields: userDefinedFields\n };\n const fields = React.useMemo(() => {\n const supportedUDFTypes = [\n \"STRING\",\n \"FLOAT\",\n \"INT\",\n \"ENUM\",\n \"DATE\",\n \"DATETIME\",\n \"CHECKBOX\",\n \"TEXTAREA\"\n ];\n const getTypeFromUDFType = (udfType: string) => {\n switch (udfType) {\n case \"STRING\":\n case \"TEXTAREA\":\n return \"text\";\n case \"FLOAT\":\n case \"INT\":\n return \"numeric\";\n case \"DATE\":\n return \"date\";\n case \"DATETIME\":\n return \"datetime\";\n case \"CHECKBOX\":\n return \"boolean\";\n }\n };\n\n let allFields: any[] = [\n { field: \"OrderNumber\", type: \"text\" },\n { field: \"OrderDate\", type: \"date\" },\n { field: \"OrderedBy\", type: \"text\", nullable: true },\n { field: \"Description\", type: \"text\", nullable: true },\n { field: \"JobNumber\", type: \"text\", nullable: true },\n { field: \"CustomerPO\", type: \"text\", nullable: true },\n { field: \"OrderTotal\", type: \"numeric\" },\n { field: \"SiteAddress1\", type: \"text\", nullable: true },\n { field: \"SiteAddress2\", type: \"text\", nullable: true },\n { field: \"SiteAddress3\", type: \"text\", nullable: true },\n { field: \"SiteCity\", type: \"text\", nullable: true },\n { field: \"SiteRegion\", type: \"text\", nullable: true },\n { field: \"SitePostalCode\", type: \"text\", nullable: true },\n { field: \"SiteCountry\", type: \"text\", nullable: true },\n {\n field: \"SiteId\",\n type: \"entity\",\n entity: \"Site\",\n endpoint: \"Site/GetSites\",\n textField: \"SiteName\",\n filterFields: [\"Site/SiteNumber\", \"Site/SiteName\"],\n displayFields: [\"SiteNumber\", \"SiteName\"]\n },\n {\n field: \"CustomerId\",\n type: \"entity\",\n entity: \"Customer\",\n endpoint: \"Customer/GetCustomers\",\n textField: \"CustomerName\",\n filterFields: [\"Customer/CustomerNumber\", \"Customer/CustomerName\"],\n displayFields: [\"CustomerNumber\", \"CustomerName\"]\n },\n {\n field: \"RepairItem/EquipmentId\",\n type: \"entity\",\n entity: \"Equipment\",\n endpoint: \"Equipment/GetEquipment\",\n textField: \"InventoryNumber\",\n filterFields: [\n \"Equipment/InventoryNumber\",\n \"Equipment/EquipmentNumber\",\n \"Equipment/Serial\"\n ],\n displayFields: [\"InventoryNumber\", \"EquipmentNumber\", \"Serial\"]\n }\n ];\n\n UserDefinedData.UserDefinedFields.filter(\n field => field.TableName === \"Order\" && field.ShowOnDesktop\n ).forEach(field => {\n if (supportedUDFTypes.includes(field.Type || \"\")) {\n if (field.Type === \"ENUM\") {\n allFields.push({\n field: field.BindName,\n label: field.DisplayValue,\n localize: false,\n type: \"list\",\n textField: \"Value\",\n listData: UserDefinedData.UserDefinedLists.find(\n list => list.Id === field.UserDefinedListId\n )?.Values\n });\n } else {\n allFields.push({\n field: field.BindName,\n label: field.DisplayValue,\n localize: false,\n type: getTypeFromUDFType(field.Type || \"\")\n });\n }\n }\n });\n\n let result: any[] = [];\n let fieldVisibilityMap: any = {};\n\n _.forEach(fieldVis?.components, (fvs: any) => {\n fieldVisibilityMap[fvs.fieldName] = fvs.visible;\n });\n\n fieldVisibilityMap[\"OrderNumber\"] = true;\n\n _.forEach(allFields, (field: any) => {\n let testField = field.field;\n\n testField =\n testField.indexOf(\"UDF_\") !== -1\n ? testField.substring(4)\n : testField;\n\n if (\n fieldVisibilityMap[testField] === undefined ||\n fieldVisibilityMap[testField]\n ) {\n result.push(field);\n }\n });\n\n return result;\n }, [\n UserDefinedData.UserDefinedFields,\n UserDefinedData.UserDefinedLists,\n fieldVis\n ]);\n\n return (\n props.onChange(oDataFilter)}\n />\n );\n};\n","import { ZGrid } from \"@msidata/zeact\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\n\nconst odata = {\n $select: [\n \"EquipmentNumber\",\n \"Serial\",\n \"InventoryNumber\",\n \"Description\",\n \"Site/OwningCustomer/CustomerNumber\",\n \"Site/SiteNumber\"\n ],\n $expand: [\"Site/OwningCustomer\", \"Site\"]\n};\n\nexport const EquipmentPage = (props: any) => {\n const EquipmentGrid = styled.div`\n margin-top: ${props.isWide ? `60px` : \"55px\"};\n `;\n\n return (\n <>\n
\n \n {\n if (dataItem.Serial) {\n return (\n \n {dataItem.Serial}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"Description\",\n field: \"Description\",\n resizable: true,\n cell: ({ dataItem, className }) => {\n if (dataItem.Description) {\n return (\n \n {dataItem.Description}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"CustomerNumber\",\n field: \"Site.OwningCustomer.CustomerNumber\",\n resizable: true\n },\n {\n title: \"SiteNumber\",\n field: \"Site.SiteNumber\",\n resizable: true\n }\n ]}\n />\n \n
\n \n );\n};\n\nexport default EquipmentPage;\n","import {\n FormattedValue,\n ZFilter,\n ZFilterField,\n ZGrid,\n ll,\n shortDateTimeFormat,\n stripHTML,\n useAlerts,\n useDebounce,\n useLanguage,\n useLayoutContext\n} from \"@msidata/zeact\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport { useAppContext } from \"../data/AppContext\";\nimport { useCompanyInfoContext } from \"../data/CompanyInfoContext\";\nimport { downloadAttachment } from \"../util/utils\";\n\nconst odata = {\n select: [\n \"Order/OrderNumber\",\n \"CreatedDateTime\",\n \"Contents\",\n \"AttachmentId\",\n \"NoteType/CodeNumber\",\n \"Id\"\n ],\n expand: [\"NoteType\", \"Order\"],\n sort: [\n { field: \"Order/OrderNumber\", dir: \"desc\" as \"desc\" },\n { field: \"CreatedDateTime\", dir: \"desc\" as \"desc\" }\n ]\n};\n\nconst Link = styled.a`\n color: ${props => props.theme[\"app-link-color\"]} !important;\n :hover {\n color: ${props => props.theme[\"hover-color\"]} !important;\n cursor: pointer;\n }\n :active {\n color: ${props => props.theme[\"active-color\"]} !important;\n }\n`;\n\nconst defaultFilter = [{ field: \"AttachmentId\", operator: \"isnotnull\" }];\n\nconst FilterWrapper = styled.div`\n text-align: left;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-sizing: border-box;\n padding: 10px;\n position: relative;\n\n .k-filter-container {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n`;\n\nconst SearchInfo = styled.span`\n display: inline-block;\n position: absolute;\n top: 5px;\n right: 10px;\n color: rgba(0, 0, 0, 0.5);\n`;\n\nconst AdvancedFilter = (props: any) => {\n const { companyInfo } = useCompanyInfoContext();\n const { codes } = companyInfo;\n const { NoteType } = codes;\n const fields = React.useMemo(() => {\n const fields: ZFilterField[] = [\n {\n label: \"OrderNumber\",\n field: \"Order/OrderNumber\",\n type: \"text\"\n },\n {\n label: \"OrderDate\",\n field: \"Order/OrderDate\",\n type: \"date\"\n },\n {\n label: \"Attachment\",\n field: \"AttachmentId\",\n type: \"null\"\n },\n {\n label: \"Contents\",\n field: \"Contents\",\n type: \"text\"\n },\n {\n label: \"CreatedDateTime\",\n field: \"CreatedDateTime\",\n type: \"datetime\"\n },\n {\n label: \"NoteType\",\n field: \"NoteTypeId\",\n type: \"list\",\n listData: NoteType,\n textField: \"CodeNumber\"\n },\n {\n label: \"SiteId\",\n field: \"Order/SiteId\",\n type: \"entity\",\n entity: \"Site\",\n endpoint: \"Site/GetSites\",\n textField: \"SiteName\",\n filterFields: [\"Site/SiteNumber\", \"Site/SiteName\"],\n displayFields: [\"SiteNumber\", \"SiteName\"]\n },\n {\n label: \"CustomerId\",\n field: \"Order/CustomerId\",\n type: \"entity\",\n entity: \"Customer\",\n endpoint: \"Customer/GetCustomers\",\n textField: \"CustomerName\",\n filterFields: [\"Customer/CustomerNumber\", \"Customer/CustomerName\"],\n displayFields: [\"CustomerNumber\", \"CustomerName\"]\n },\n {\n label: \"RepairItem/EquipmentId\",\n field: \"Order/RepairItem/EquipmentId\",\n type: \"entity\",\n entity: \"Equipment\",\n endpoint: \"Equipment/GetEquipment\",\n textField: \"InventoryNumber\",\n filterFields: [\n \"Equipment/InventoryNumber\",\n \"Equipment/EquipmentNumber\",\n \"Equipment/Serial\"\n ],\n displayFields: [\"InventoryNumber\", \"EquipmentNumber\", \"Serial\"]\n }\n ];\n\n return fields;\n }, [NoteType]);\n\n return (\n props.onChange(oDataFilter)}\n />\n );\n};\n\nexport const OrderNotesPage = () => {\n const userLanguage = useLanguage();\n const { issueAlert } = useAlerts();\n const [advancedFilter, setAdvancedFilter] = React.useState(\n \"(AttachmentId ne null)\"\n );\n const debouncedAdvancedFilter = useDebounce(advancedFilter, 200);\n const { isWide } = useLayoutContext();\n const { apiClient } = useAppContext();\n\n const Wrapper = React.useMemo(\n () => styled.div`\n margin-top: ${isWide ? `60px` : \"55px\"};\n `,\n [isWide]\n );\n\n return (\n \n \n \n setAdvancedFilter(oDataFilter)\n }\n />\n \n {ll({ key: \"SearchOrderNotes\", languageId: userLanguage })}\n \n \n {\n return (\n \n \n \n );\n }\n },\n {\n title: \"Contents\",\n field: \"Contents\",\n width: 500,\n resizable: true,\n cell: ({ dataItem, className }) => {\n return (\n \n
\n \n );\n }\n },\n {\n title: \"Attachment\",\n field: \"AttachmentId\",\n resizable: true,\n cell: ({ dataItem, className }) => {\n if (dataItem.AttachmentId) {\n return (\n \n \n downloadAttachment({\n attachmentId: dataItem.AttachmentId,\n apiClient: apiClient,\n issueAlert: issueAlert\n })\n }\n >\n {ll({\n key: \"DownloadAttachment\",\n languageId: userLanguage\n })}\n \n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"NoteType\",\n field: \"NoteType.CodeNumber\",\n resizable: true\n }\n ]}\n />\n \n );\n};\n\nexport default OrderNotesPage;\n","import {\n FormattedValue,\n ZFilter,\n ZFilterField,\n ZGrid,\n ll,\n shortDateTimeFormat,\n useAlerts,\n useDebounce,\n useLanguage,\n useLayoutContext\n} from \"@msidata/zeact\";\nimport * as React from \"react\";\nimport styled from \"styled-components\";\nimport { useAppContext } from \"../data/AppContext\";\nimport { downloadAttachment } from \"../util/utils\";\n\nconst odata = {\n expand: [\"CompletedByUser\", \"Inspection\", \"InspectionResult\"],\n select: [\n \"CompletedDateTime\",\n \"CompletedByUser/EmailAddress\",\n \"Inspection/InspectionName\",\n \"Inspection/VersionNumber\",\n \"InspectionResult/AttachmentId\"\n ],\n sort: [{ field: \"CompletedDateTime\", dir: \"desc\" as \"desc\" }]\n};\n\nconst Link = styled.a`\n color: ${props => props.theme[\"app-link-color\"]} !important;\n :hover {\n color: ${props => props.theme[\"hover-color\"]} !important;\n cursor: pointer;\n }\n :active {\n color: ${props => props.theme[\"active-color\"]} !important;\n }\n`;\n\nconst defaultFilter = [\n { field: \"InspectionResult/AttachmentId\", operator: \"isnotnull\" }\n];\n\nconst fields: ZFilterField[] = [\n {\n label: \"OrderNumber\",\n field: \"OrderSegment/Order/OrderNumber\",\n type: \"text\"\n },\n {\n label: \"OrderDate\",\n field: \"OrderSegment/Order/OrderDate\",\n type: \"date\"\n },\n {\n label: \"InspectionName\",\n field: \"Inspection/InspectionName\",\n type: \"text\",\n nullable: true\n },\n {\n label: \"VersionNumber\",\n field: \"Inspection/VersionNumber\",\n type: \"numeric\"\n },\n {\n label: \"CompletedBy\",\n field: \"CompletedByUser/EmailAddress\",\n type: \"text\"\n },\n {\n label: \"CompletedDate\",\n field: \"CompletedDateTime\",\n type: \"datetime\",\n nullable: true\n },\n\n {\n label: \"Attachment\",\n field: \"InspectionResult/AttachmentId\",\n type: \"null\"\n },\n {\n label: \"SiteId\",\n field: \"OrderSegment/Order/SiteId\",\n type: \"entity\",\n entity: \"Site\",\n endpoint: \"Site/GetSites\",\n textField: \"SiteName\",\n filterFields: [\"Site/SiteNumber\", \"Site/SiteName\"],\n displayFields: [\"SiteNumber\", \"SiteName\"]\n },\n {\n label: \"CustomerId\",\n field: \"OrderSegment/Order/CustomerId\",\n type: \"entity\",\n entity: \"Customer\",\n endpoint: \"Customer/GetCustomers\",\n textField: \"CustomerName\",\n filterFields: [\"Customer/CustomerNumber\", \"Customer/CustomerName\"],\n displayFields: [\"CustomerNumber\", \"CustomerName\"]\n },\n {\n label: \"RepairItem/EquipmentId\",\n field: \"OrderSegment/Order/RepairItem/EquipmentId\",\n type: \"entity\",\n entity: \"Equipment\",\n endpoint: \"Equipment/GetEquipment\",\n textField: \"InventoryNumber\",\n filterFields: [\n \"Equipment/InventoryNumber\",\n \"Equipment/EquipmentNumber\",\n \"Equipment/Serial\"\n ],\n displayFields: [\"InventoryNumber\", \"EquipmentNumber\", \"Serial\"]\n }\n];\n\nconst AdvancedFilter = (props: any) => {\n return (\n props.onChange(oDataFilter)}\n />\n );\n};\n\nconst FilterWrapper = styled.div`\n text-align: left;\n border: 1px solid rgba(0, 0, 0, 0.12);\n box-sizing: border-box;\n padding: 10px;\n position: relative;\n\n .k-filter-container {\n margin-top: 0 !important;\n margin-bottom: 0 !important;\n }\n`;\n\nconst SearchInfo = styled.span`\n display: inline-block;\n position: absolute;\n top: 5px;\n right: 10px;\n color: rgba(0, 0, 0, 0.5);\n`;\n\nexport const EquipmentPage = () => {\n const userLanguage = useLanguage();\n const { issueAlert } = useAlerts();\n const [advancedFilter, setAdvancedFilter] = React.useState(\n \"(InspectionResult/AttachmentId ne null)\"\n );\n const debouncedAdvancedFilter = useDebounce(advancedFilter, 200);\n const { isWide } = useLayoutContext();\n const { apiClient } = useAppContext();\n const Wrapper = React.useMemo(\n () => styled.div`\n margin-top: ${isWide ? `60px` : \"55px\"};\n `,\n [isWide]\n );\n\n return (\n \n \n \n setAdvancedFilter(oDataFilter)\n }\n />\n \n {ll({ key: \"SearchInspections\", languageId: userLanguage })}\n \n \n (\n \n {dataItem.CompletedByUser === null ||\n dataItem.CompletedByUser === undefined\n ? \"---\"\n : dataItem.CompletedByUser.EmailAddress}\n \n )\n },\n {\n title: \"CompletedDate\",\n field: \"CompletedDateTime\",\n filter: \"date\",\n cell: ({ dataItem, className }) => (\n \n {dataItem.CompletedDateTime === null ? (\n \"---\"\n ) : (\n \n )}\n \n )\n },\n {\n title: \"Attachment\",\n sortable: false,\n reorderable: false,\n cell: ({ dataItem, className }) => (\n \n {dataItem.InspectionResult === null ||\n dataItem.InspectionResult === undefined ||\n dataItem.InspectionResult.AttachmentId === null ||\n dataItem.InspectionResult.AttachmentId === undefined ? (\n ---\n ) : (\n \n downloadAttachment({\n attachmentId:\n dataItem.InspectionResult\n ?.AttachmentId || 0,\n apiClient: apiClient,\n issueAlert: issueAlert\n })\n }\n >\n {ll({\n key: \"DownloadAttachment\",\n languageId: userLanguage\n })}\n \n )}\n \n )\n }\n ]}\n />\n \n );\n};\n\nexport default EquipmentPage;\n","import * as React from \"react\";\nimport { ll, llContext, ZGrid } from \"@msidata/zeact\";\nimport styled from \"styled-components\";\n\nconst odata = {\n $select: [\n \"SiteNumber\",\n \"SiteName\",\n \"ShipTo/Address1\",\n \"ShipTo/Address2\",\n \"ShipTo/Address3\",\n \"ShipTo/City\",\n \"ShipTo/Region\",\n \"ShipTo/PostalCode\"\n ],\n $expand: [\"ShipTo\"]\n};\n\nexport const Sites = (props: any) => {\n const { languageId } = React.useContext(llContext);\n const { isWide } = props;\n const Wrapper = React.useMemo(\n () => styled.div`\n margin-top: ${isWide ? `60px` : \"55px\"};\n text-align: left;\n `,\n [isWide]\n );\n\n return (\n \n {\n if (dataItem.ShipTo.Address1) {\n return (\n \n {dataItem.ShipTo.Address1}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"Address2\",\n field: \"ShipTo.Address2\",\n columnMenu: null,\n cell: ({ dataItem, className }) => {\n if (dataItem.ShipTo.Address2) {\n return (\n \n {dataItem.ShipTo.Address2}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"City\",\n field: \"ShipTo.City\",\n columnMenu: null,\n cell: ({ dataItem, className }) => {\n if (dataItem.ShipTo.City) {\n return (\n {dataItem.ShipTo.City}\n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"Region\",\n field: \"ShipTo.Region\",\n columnMenu: null,\n cell: ({ dataItem, className }) => {\n if (dataItem.ShipTo.Region) {\n return (\n \n {dataItem.ShipTo.Region}\n \n );\n } else {\n return {\"---\"};\n }\n }\n },\n {\n title: \"Country\",\n field: \"ShipTo.Country\",\n columnMenu: null,\n cell: ({ dataItem, className }) => {\n if (dataItem.ShipTo.Country) {\n return (\n \n {dataItem.ShipTo.Country}\n \n );\n } else {\n return {\"---\"};\n }\n }\n }\n ]}\n scrollable={\"scrollable\"}\n pageable={true}\n pageSize={10}\n />\n \n );\n};\n","import {\n CacheTimes,\n ReactQuery,\n ReactQueryCache,\n displayAndLogErrorWithMessage,\n useAlerts\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n staleTime: CacheTimes.OneHour\n};\n\nexport const usePortalUsers = (): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchPortalUsers = () =>\n apiClient\n .request({\n url: `Administration/Users`,\n params: { $top: 10000 }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"PortalUsersCannotGet\",\n issueAlert\n );\n return Promise.resolve([]);\n });\n\n const { data, isFetching } = ReactQuery.useQuery(\n \"PortalUsers\",\n fetchPortalUsers,\n queryConfig\n );\n\n return {\n users: data,\n pending: isFetching,\n refetch: () => ReactQueryCache.invalidateQueries(\"PortalUsers\")\n };\n};\n","import {\n ReactQuery,\n displayAndLogErrorWithMessage,\n useAlerts\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n cacheTime: 0\n};\n\nexport const useGroups = (userId?: number | null): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchGroups =\n userId !== null\n ? () =>\n apiClient\n .request({\n url: `Administration/Group`,\n params: {\n userId,\n $top: 10000\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"GroupsCannotGet\",\n issueAlert\n );\n return Promise.resolve(null);\n })\n : () => {\n return Promise.resolve(null);\n };\n\n const { data, isFetching } = ReactQuery.useQuery(\n [\"Groups\", { userId }],\n fetchGroups,\n queryConfig\n );\n\n return {\n groups: data,\n pending: isFetching\n };\n};\n","import {\n ReactQuery,\n displayAndLogErrorWithMessage,\n useAlerts\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n cacheTime: 0\n};\n\nexport const useGroupCustomers = (groupName: string | null): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchGroupCustomers = groupName\n ? () =>\n apiClient\n .request({\n url: `Administration/GroupCustomer`,\n params: {\n groupName,\n $top: 10000,\n $select: \"CustomerNumber,CustomerName\"\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"GroupCustomersCannotGet\",\n issueAlert\n );\n return Promise.resolve([]);\n })\n : () => {\n return Promise.resolve(null);\n };\n\n const { data, isFetching } = ReactQuery.useQuery(\n [\"GroupCustomers\", { groupName }],\n fetchGroupCustomers,\n queryConfig\n );\n\n return {\n groupCustomers: data,\n pending: isFetching\n };\n};\n","import {\n ReactQuery,\n displayAndLogErrorWithMessage,\n useAlerts\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n cacheTime: 0\n};\n\nexport const useGroupSites = (groupName: string | null): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchGroupSites = groupName\n ? () =>\n apiClient\n .request({\n url: `Administration/GroupSite`,\n params: {\n groupName,\n $top: 10000,\n $select: \"SiteNumber,SiteName\"\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"GroupSitesCannotGet\",\n issueAlert\n );\n return Promise.resolve([]);\n })\n : () => {\n return Promise.resolve(null);\n };\n\n const { data, isFetching } = ReactQuery.useQuery(\n [\"GroupSites\", { groupName }],\n fetchGroupSites,\n queryConfig\n );\n\n return {\n groupSites: data,\n pending: isFetching\n };\n};\n","import {\n ReactQuery,\n useAlerts,\n displayAndLogErrorWithMessage\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n cacheTime: 0\n};\n\nexport const useUserCustomers = (\n userId: number | null,\n groupName?: string | null\n): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchUserCustomers =\n userId && (groupName || groupName === undefined)\n ? () =>\n apiClient\n .request({\n url: `Administration/UserCustomer`,\n params: {\n userId,\n groupName,\n $top: 10000,\n $select: \"CustomerNumber,CustomerName\"\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"UserCustomersCannotGet\",\n issueAlert\n );\n return Promise.resolve([]);\n })\n : () => {\n return Promise.resolve(null);\n };\n\n const { data, isFetching } = ReactQuery.useQuery(\n [\"UserCustomers\", { userId, groupName }],\n fetchUserCustomers,\n queryConfig\n );\n\n return {\n userCustomers: data,\n pending: isFetching\n };\n};\n","import {\n ReactQuery,\n useAlerts,\n displayAndLogErrorWithMessage\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n cacheTime: 0\n};\n\nexport const useUserSites = (\n userId: number | null,\n groupName?: string | null\n): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchUserSites =\n userId && (groupName || groupName === undefined)\n ? () =>\n apiClient\n .request({\n url: `Administration/UserSite`,\n params: {\n userId,\n groupName,\n $top: 10000,\n $select: \"SiteNumber,SiteName\"\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"UserSitesCannotGet\",\n issueAlert\n );\n return Promise.resolve([]);\n })\n : () => {\n return Promise.resolve(null);\n };\n\n const { data, isFetching } = ReactQuery.useQuery(\n [\"UserSites\", { userId, groupName }],\n fetchUserSites,\n queryConfig\n );\n\n return {\n userSites: data,\n pending: isFetching\n };\n};\n","import {\n CacheTimes,\n ReactQuery,\n displayAndLogErrorWithMessage,\n useAlerts\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n staleTime: CacheTimes.OneHour\n};\n\nexport const useAdminSites = (): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchAdminSites = () =>\n apiClient\n .request({\n url: `Site/GetSites`,\n params: {\n $select: \"SiteNumber,SiteName\",\n $top: 10000\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(error, \"SitesCannotGet\", issueAlert);\n return Promise.resolve([]);\n });\n\n const { data, isFetching } = ReactQuery.useQuery(\n \"AdminSites\",\n fetchAdminSites,\n queryConfig\n );\n\n return {\n adminSites: data,\n pending: isFetching\n };\n};\n","import {\n CacheTimes,\n ReactQuery,\n displayAndLogErrorWithMessage,\n useAlerts\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n staleTime: CacheTimes.OneHour\n};\n\nexport const useAdminCustomers = (): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchAdminCustomers = () =>\n apiClient\n .request({\n url: \"Customer/GetCustomers\",\n params: {\n $select: \"CustomerNumber,CustomerName\",\n $top: 10000\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"CustomersCannotGet\",\n issueAlert\n );\n return Promise.resolve([]);\n });\n\n const { data, isFetching } = ReactQuery.useQuery(\n \"AdminCustomers\",\n fetchAdminCustomers,\n queryConfig\n );\n\n return {\n adminCustomers: data,\n pending: isFetching\n };\n};\n","import {\n ReactQuery,\n displayAndLogErrorWithMessage,\n useAlerts\n} from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n cacheTime: 0\n};\n\nexport const useIsUserGroupAdmin = (\n userId: number | null,\n groupName: string | null\n): any => {\n const { apiClient } = useAppContext();\n const { issueAlert } = useAlerts();\n\n const fetchIsUserGroupAdmin =\n userId && groupName\n ? () =>\n apiClient\n .request({\n url: `Administration/IsUserGroupAdmin`,\n params: {\n userId,\n groupName\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"IsUserGroupAdminErrorMessage\",\n issueAlert\n );\n return Promise.resolve(false);\n })\n : () => {\n return Promise.resolve(false);\n };\n\n const { data, isFetching } = ReactQuery.useQuery(\n [\"IsUserGroupAdmin\", { userId, groupName }],\n fetchIsUserGroupAdmin,\n queryConfig\n );\n\n return {\n isUserGroupAdmin: data,\n pending: isFetching\n };\n};\n","import { ReactQuery } from \"@msidata/zeact\";\nimport { useAppContext } from \"../data/AppContext\";\n\nconst queryConfig = {\n suspense: false,\n cacheTime: 0\n};\n\nexport const useFindUser = (emailAddress: string) => {\n const { apiClient } = useAppContext();\n\n const findUser = emailAddress\n ? () =>\n apiClient\n .request({\n url: `Administration/User`,\n params: {\n emailAddress\n }\n })\n .then(response => response.data.d.results)\n .catch(error => {\n return Promise.resolve(null);\n })\n : () => Promise.resolve(null);\n\n const { data, isFetching } = ReactQuery.useQuery(\n [\"FindUser\", { emailAddress }],\n findUser,\n queryConfig\n );\n\n return {\n user: data,\n pending: isFetching\n };\n};\n","import * as React from \"react\";\nimport {\n CorrelationGroup,\n FontAwesomeIcon,\n FormContextValue,\n ZButton,\n ZCheckbox,\n ZComboBox,\n ZContainer,\n ZForm,\n ZGrid,\n ZListBox,\n ZListBoxChangeEvent,\n ZLoadingMask,\n ZPopup,\n ZTextBox,\n displayAndLogErrorWithMessage,\n ll,\n llContext,\n useAlerts,\n useDebounce\n} from \"@msidata/zeact\";\nimport styled from \"styled-components\";\nimport _ from \"lodash\";\nimport { isAdmin } from \"../hooks/useUser\";\nimport { usePortalUsers } from \"../hooks/usePortalUsers\";\nimport { useGroups } from \"../hooks/useGroups\";\nimport { useGroupCustomers } from \"../hooks/useGroupCustomers\";\nimport { useGroupSites } from \"../hooks/useGroupSites\";\nimport { useUserCustomers } from \"../hooks/useUserCustomers\";\nimport { useUserSites } from \"../hooks/useUserSites\";\nimport { useAppContext } from \"../data/AppContext\";\nimport { useAdminSites } from \"../hooks/useAdminSites\";\nimport { useAdminCustomers } from \"../hooks/useAdminCustomers\";\nimport { useIsUserGroupAdmin } from \"../hooks/useIsUserGroupAdmin\";\nimport { useFindUser } from \"../hooks/useFindUser\";\nimport { useConfiguration, PortalConfig } from \"../hooks/useConfiguration\";\n\ninterface EditAccessPopupProps {\n selectedUser: any;\n setSelectedUser: React.Dispatch;\n groups: string[];\n}\n\ninterface ConfirmResetPasswordProps {\n resetPasswordUser: any;\n setResetPasswordUser: React.Dispatch;\n config: PortalConfig;\n}\n\ninterface RemoveFromGroupPopupProps {\n selectedRemoveUser: any;\n setSelectedRemoveUser: React.Dispatch;\n groups: string[];\n refetchUsers: (shouldRefetch: boolean) => void;\n userIsAdmin: boolean;\n}\n\nconst AdminEditAccessPopup = (props: EditAccessPopupProps) => {\n const { selectedUser, setSelectedUser, groups } = props;\n const { adminSites, pending: adminSitesPending } = useAdminSites();\n const {\n adminCustomers,\n pending: adminCustomersPending\n } = useAdminCustomers();\n const [selectedGroup, setSelectedGroup] = React.useState(\n null\n );\n const { groupSites, pending: groupSitesPending } = useGroupSites(\n selectedGroup\n );\n const { groupCustomers, pending: groupCustomersPending } = useGroupCustomers(\n selectedGroup\n );\n const {\n isUserGroupAdmin,\n pending: isUserGroupAdminPending\n } = useIsUserGroupAdmin(selectedUser && selectedUser.Id, selectedGroup);\n const { userSites, pending: userSitesPending } = useUserSites(\n selectedUser && selectedUser.Id\n );\n const { userCustomers, pending: userCustomersPending } = useUserCustomers(\n selectedUser && selectedUser.Id\n );\n const { languageId } = React.useContext(llContext);\n const { apiClient } = useAppContext();\n const [isChangingAccess, setIsChangingAccess] = React.useState(\n false\n );\n const [selected, setSelected] = React.useState<(string | number)[] | null>(\n null\n );\n const ListBoxWrapper = styled.div`\n position: relative;\n `;\n const PopupContainer = styled.div`\n text-align: left;\n `;\n const { issueAlert } = useAlerts();\n const GroupAdminLabel = styled.div`\n width: 100%;\n font-weight: bold;\n margin-top: 10px;\n margin-bottom: 10px;\n `;\n\n return (\n {\n setSelectedUser(null);\n setSelectedGroup(null);\n }}\n >\n \n {\n setSelectedGroup(e.value);\n }}\n />\n \n {(selectedGroup\n ? groupSites && groupCustomers\n : adminSites && adminCustomers) &&\n userSites &&\n userCustomers &&\n !isUserGroupAdminPending ? (\n <>\n {isUserGroupAdmin ? (\n \n {`${selectedUser.FirstName} ${selectedUser.LastName} is an Admin of Group ${selectedGroup}`}\n \n ) : (\n <> \n )}\n ({\n label: `${userSite.SiteNumber} - ${userSite.SiteName}`,\n value: `site-${userSite.Id}`\n }))\n },\n {\n label: ll({ key: \"Customers\", languageId }),\n options: (selectedGroup\n ? groupCustomers\n : adminCustomers\n ).map((userCustomer: any) => ({\n label: `${userCustomer.CustomerNumber} - ${userCustomer.CustomerName}`,\n value: `customer-${userCustomer.Id}`\n }))\n }\n ]}\n value={\n isUserGroupAdmin\n ? [\n ...groupSites.map(\n (site: any) => `site-${site.Id}`\n ),\n ...groupCustomers.map(\n (customer: any) =>\n `customer-${customer.Id}`\n )\n ]\n : selected || [\n ...userSites.map(\n (site: any) => `site-${site.Id}`\n ),\n ...userCustomers.map(\n (customer: any) =>\n `customer-${customer.Id}`\n )\n ]\n }\n onChange={(event: ZListBoxChangeEvent) => {\n setIsChangingAccess(true);\n const { selected, deselected } = event;\n let promises: any[] = [];\n (selected as string[]).forEach((option: string) => {\n if (option.startsWith(\"site\")) {\n promises.push(\n apiClient.post(`Administration/UserSite`, {\n UserId: selectedUser.Id,\n SiteId: option.split(\"-\")[1]\n })\n );\n } else {\n promises.push(\n apiClient.post(\n `Administration/UserCustomer`,\n {\n UserId: selectedUser.Id,\n CustomerId: option.split(\"-\")[1]\n }\n )\n );\n }\n });\n (deselected as string[]).forEach(\n (option: string) => {\n if (option.startsWith(\"site\")) {\n promises.push(\n apiClient.delete(\n `Administration/UserSite`,\n {\n params: {\n userId: selectedUser.Id,\n siteId: option.split(\"-\")[1]\n }\n }\n )\n );\n } else {\n promises.push(\n apiClient.delete(\n `Administration/UserCustomer`,\n {\n params: {\n userId: selectedUser.Id,\n customerId: option.split(\"-\")[1]\n }\n }\n )\n );\n }\n }\n );\n Promise.all(promises)\n .then(() => setSelected(event.newState))\n .catch(error => {\n setSelectedUser(null);\n setSelectedGroup(null);\n displayAndLogErrorWithMessage(\n error,\n \"EditAccessErrorMessage\",\n issueAlert\n );\n })\n .finally(() => {\n setIsChangingAccess(false);\n });\n }}\n />\n \n ) : (selectedGroup\n ? groupSitesPending || groupCustomersPending\n : adminSitesPending || adminCustomersPending) ||\n userSitesPending ||\n userCustomersPending ||\n isUserGroupAdminPending ? (\n \n ) : (\n <>\n )}\n {isChangingAccess && (\n \n )}\n \n \n \n );\n};\n\nconst GroupAdminEditAccessPopup = (props: EditAccessPopupProps) => {\n const { selectedUser, setSelectedUser, groups } = props;\n const [selectedGroup, setSelectedGroup] = React.useState(\n null\n );\n const { groupSites, pending: groupSitesPending } = useGroupSites(\n selectedGroup\n );\n const { groupCustomers, pending: groupCustomersPending } = useGroupCustomers(\n selectedGroup\n );\n const {\n isUserGroupAdmin,\n pending: isUserGroupAdminPending\n } = useIsUserGroupAdmin(selectedUser && selectedUser.Id, selectedGroup);\n const { userSites, pending: userSitesPending } = useUserSites(\n isUserGroupAdmin === false ? selectedUser && selectedUser.Id : null,\n isUserGroupAdmin === false ? selectedGroup : null\n );\n const { userCustomers, pending: userCustomersPending } = useUserCustomers(\n isUserGroupAdmin === false ? selectedUser && selectedUser.Id : null,\n isUserGroupAdmin === false ? selectedGroup : null\n );\n const { languageId } = React.useContext(llContext);\n const { apiClient } = useAppContext();\n const [isChangingAccess, setIsChangingAccess] = React.useState(\n false\n );\n const [selected, setSelected] = React.useState<(string | number)[] | null>(\n null\n );\n const ListBoxWrapper = styled.div`\n position: relative;\n `;\n const PopupContainer = styled.div`\n text-align: left;\n `;\n const { issueAlert } = useAlerts();\n const GroupAdminLabel = styled.div`\n width: 100%;\n font-weight: bold;\n margin-top: 10px;\n margin-bottom: 10px;\n `;\n\n React.useEffect(() => {\n if (groups && groups.length === 1 && !selectedGroup) {\n setSelectedGroup(groups[0]);\n }\n }, [groups, selectedGroup]);\n\n return (\n {\n setSelectedUser(null);\n setSelectedGroup(null);\n }}\n >\n \n {\n setSelectedGroup(e.value);\n }}\n />\n \n {groupSites &&\n groupCustomers &&\n (isUserGroupAdmin === false\n ? userSites && userCustomers\n : isUserGroupAdmin === true) ? (\n <>\n {isUserGroupAdmin ? (\n \n {ll({\n key: \"UserIsAdminOfGroup\",\n languageId\n }).format(\n `${selectedUser.FirstName} ${selectedUser.LastName}`,\n selectedGroup\n )}\n \n ) : (\n <>\n )}\n ({\n label: `${userSite.SiteNumber} - ${userSite.SiteName}`,\n value: `site-${userSite.Id}`\n }))\n },\n {\n label: ll({ key: \"Customers\", languageId }),\n options: groupCustomers.map(\n (userCustomer: any) => ({\n label: `${userCustomer.CustomerNumber} - ${userCustomer.CustomerName}`,\n value: `customer-${userCustomer.Id}`\n })\n )\n }\n ]}\n value={\n isUserGroupAdmin\n ? [\n ...groupSites.map(\n (site: any) => `site-${site.Id}`\n ),\n ...groupCustomers.map(\n (customer: any) =>\n `customer-${customer.Id}`\n )\n ]\n : selected || [\n ...userSites.map(\n (site: any) => `site-${site.Id}`\n ),\n ...userCustomers.map(\n (customer: any) =>\n `customer-${customer.Id}`\n )\n ]\n }\n onChange={(event: ZListBoxChangeEvent) => {\n setIsChangingAccess(true);\n const { selected, deselected } = event;\n let promises: any[] = [];\n (selected as string[]).forEach((option: string) => {\n if (option.startsWith(\"site\")) {\n promises.push(\n apiClient.post(`Administration/UserSite`, {\n UserId: selectedUser.Id,\n SiteId: option.split(\"-\")[1]\n })\n );\n } else {\n promises.push(\n apiClient.post(\n `Administration/UserCustomer`,\n {\n UserId: selectedUser.Id,\n CustomerId: option.split(\"-\")[1]\n }\n )\n );\n }\n });\n (deselected as string[]).forEach(\n (option: string) => {\n if (option.startsWith(\"site\")) {\n promises.push(\n apiClient.delete(\n `Administration/UserSite`,\n {\n params: {\n userId: selectedUser.Id,\n siteId: option.split(\"-\")[1]\n }\n }\n )\n );\n } else {\n promises.push(\n apiClient.delete(\n `Administration/UserCustomer`,\n {\n params: {\n userId: selectedUser.Id,\n customerId: option.split(\"-\")[1]\n }\n }\n )\n );\n }\n }\n );\n Promise.all(promises)\n .then(() => setSelected(event.newState))\n .catch(error => {\n setSelectedUser(null);\n setSelectedGroup(null);\n displayAndLogErrorWithMessage(\n error,\n \"EditAccessErrorMessage\",\n issueAlert\n );\n })\n .finally(() => {\n setIsChangingAccess(false);\n });\n }}\n />\n \n ) : groupSitesPending ||\n groupCustomersPending ||\n userSitesPending ||\n userCustomersPending ||\n isUserGroupAdminPending ? (\n \n ) : (\n <>\n )}\n {isChangingAccess && (\n \n )}\n \n \n \n );\n};\n\nconst ConfirmPasswordResetPopup = (props: ConfirmResetPasswordProps) => {\n const { resetPasswordUser, setResetPasswordUser, config } = props;\n const { apiClient } = useAppContext();\n const PopupContainer = styled.div`\n text-align: left;\n `;\n const { issueAlert } = useAlerts();\n const { languageId } = React.useContext(llContext);\n const serviceProApiUrl = config.serviceProApiUrl;\n const brand = config?.brand?.name?.toLowerCase() || \"\";\n const hermesBrand = brand.contains(\"pulse\") ? \"trimblepulse\" : \"portal\";\n\n return (\n {\n setResetPasswordUser(null);\n }}\n >\n \n

\n {ll({\n key: \"ConfirmResetPassword\",\n languageId\n }).format(resetPasswordUser.EmailAddress)}\n

\n \n \n setResetPasswordUser(null)}>\n Cancel\n \n \n \n {\n apiClient\n .request({\n data: {\n EmailAddress: resetPasswordUser.EmailAddress,\n ChangePasswordUrl: document.location.origin,\n Brand: hermesBrand\n },\n baseURL: `${serviceProApiUrl}/api`,\n method: \"post\",\n url: `Password/RequestReset`\n })\n .catch(error => {\n displayAndLogErrorWithMessage(\n error,\n \"RequestPasswordResetFailed\",\n issueAlert\n );\n })\n .finally(() => {\n setResetPasswordUser(null);\n });\n }}\n >\n Reset\n \n \n \n
\n \n );\n};\n\nconst RemoveUserFromGroupPopup = (props: RemoveFromGroupPopupProps) => {\n const {\n selectedRemoveUser,\n setSelectedRemoveUser,\n groups,\n refetchUsers,\n userIsAdmin\n } = props;\n const [selectedGroup, setSelectedGroup] = React.useState(\n null\n );\n\n const { apiClient } = useAppContext();\n const [isChangingAccess, setIsChangingAccess] = React.useState(\n false\n );\n const [shouldRefetch, setShouldRefetch] = React.useState(false);\n\n const PopupContainer = styled.div`\n text-align: left;\n `;\n const { issueAlert } = useAlerts();\n\n return (\n {\n setSelectedRemoveUser(null);\n setSelectedGroup(null);\n refetchUsers(shouldRefetch);\n }}\n >\n \n {\n setSelectedGroup(e.value);\n }}\n />\n {\n if (\n selectedGroup &&\n selectedRemoveUser &&\n selectedRemoveUser.Id\n ) {\n setIsChangingAccess(true);\n apiClient\n .delete(`Administration/GroupMembership`, {\n params: {\n groupName: selectedGroup,\n userId: selectedRemoveUser.Id\n }\n })\n .then(() => {\n _.pull(groups, selectedGroup);\n setSelectedGroup(null);\n if (!userIsAdmin) {\n setShouldRefetch(true);\n }\n })\n .catch(error => {\n setSelectedRemoveUser(null);\n setSelectedGroup(null);\n displayAndLogErrorWithMessage(\n error,\n \"RemoveUserFromGroupErrorMessage\",\n issueAlert\n );\n })\n .finally(() => {\n setIsChangingAccess(false);\n });\n }\n }}\n >\n RemoveUserFromGroup\n \n {isChangingAccess && (\n \n )}\n \n \n );\n};\n\nconst ContainerWrapper = styled.div`\n text-align: left;\n margin-left: 30px;\n`;\n\nconst CancelButtonWrapper = styled.div`\n position: absolute;\n display: inline-block;\n left: 5px;\n bottom: 5px;\n`;\n\nconst AddButtonWrapper = styled.div`\n position: absolute;\n display: inline-block;\n right: 5px;\n bottom: 5px;\n`;\n\nconst ButtonsWrapper = styled.div`\n margin-top: 30px;\n`;\nconst IconSpacing = styled.div`\n padding-right: 14px;\n display: inline;\n`;\n\ninterface AddUserPopupProps {\n groups: any[];\n isUserAdmin: boolean;\n onClose: (shouldRefetch: boolean) => void;\n}\n\nconst AddUserPopup = (props: AddUserPopupProps) => {\n const { groups, onClose, isUserAdmin } = props;\n const { apiClient } = useAppContext();\n const [requireGroup, setRequireGroup] = React.useState(false);\n const [email, setEmail] = React.useState(\"\");\n const { user, pending: userPending } = useFindUser(email);\n const [loading, setLoading] = React.useState(false);\n const firstNameRef = React.useRef();\n const lastNameRef = React.useRef();\n const { issueAlert } = useAlerts();\n\n React.useEffect(() => {\n if (user) {\n firstNameRef.current.setValue(user.FirstName);\n lastNameRef.current.setValue(user.LastName);\n }\n }, [user]);\n\n return (\n onClose(false)}\n >\n {\n result.Admin = result.GroupName ? !!result.Admin : undefined;\n result.GroupName = result.GroupName || undefined;\n setLoading(true);\n apiClient\n .post(\"Administration/CreateUser\", result)\n .then(() => {\n onClose(true);\n })\n .catch((error) => {\n if (\n error?.data?.Errors?.General.length > 0 &&\n error?.data?.Errors?.General[0]?.ErrorCode === 40000\n ) {\n issueAlert({\n type: \"warning\",\n message: \"UserAlreadyHasAccess\"\n });\n } else {\n displayAndLogErrorWithMessage(\n error,\n \"AddUserErrorMessage\",\n issueAlert\n );\n }\n setLoading(false);\n });\n }}\n render={(formContext: FormContextValue) => (\n \n \n \n setRequireGroup((e.target.value as any).value)\n }\n />\n ) => {\n setEmail(e.target.value);\n }}\n required\n ignoreFVS\n />\n \n \n \n \n \n \n onClose(false)}>Cancel\n \n \n {\n formContext.submit && formContext.submit();\n }}\n disabled={userPending}\n primary\n >\n Add\n \n \n \n \n )}\n >\n {!groups || loading ? (\n \n ) : (\n <>\n )}\n \n );\n};\n\nconst ModifyAccessButton = styled.div`\n color: ${props => props.theme[\"app-link-color\"]};\n display: inline;\n font-size: 16px;\n cursor: pointer;\n :hover {\n color: ${props => props.theme[\"hover-color\"]};\n }\n :active {\n color: ${props => props.theme[\"active-color\"]};\n }\n`;\n\nconst UserHeader = styled.div`\n display: inline-block;\n width: 100%;\n position: relative;\n`;\n\nconst AddUserWrapper = styled.div`\n position: absolute;\n display: inline-block;\n padding: 5px;\n right: 0;\n bottom: 0;\n`;\n\nexport const Users = (props: any) => {\n const { isWide } = props;\n const Wrapper = React.useMemo(\n () => styled.div`\n margin-top: ${isWide ? `60px` : \"55px\"};\n text-align: left;\n `,\n [isWide]\n );\n const isUserAdmin = isAdmin();\n const {\n users,\n pending: usersPending,\n refetch: refetchUsers\n } = usePortalUsers();\n const [selectedUser, setSelectedUser] = React.useState(null);\n const [selectedRemoveUser, setSelectedRemoveUser] = React.useState(\n null\n );\n const [resetPasswordUser, setResetPasswordUser] = React.useState(null);\n const { groups: userGroups, pending: userGroupsPending } = useGroups(\n selectedUser && selectedUser.Id\n );\n const {\n groups: removeUserGroups,\n pending: removeUserGroupsPending\n } = useGroups(selectedRemoveUser && selectedRemoveUser.Id);\n const { groups } = useGroups();\n const [filterText, setFilterText] = React.useState(\"\");\n const debouncedFilterText = useDebounce(filterText, 200);\n const [addUserVisible, setAddUserVisible] = React.useState(false);\n const config = useConfiguration();\n\n return (\n \n \n ) =>\n setFilterText(`${(event && event.target.value) || \"\"}`)\n }\n placeholder={\"SearchByNameOrEmail\"}\n width={300}\n />\n \n setAddUserVisible(true)}>\n AddUser\n \n \n \n (\n \n {\n setSelectedUser(cellData.dataItem);\n }}\n >\n \n \n \n {\n setSelectedRemoveUser(cellData.dataItem);\n }}\n >\n \n \n \n {\n setResetPasswordUser(cellData.dataItem);\n }}\n >\n \n \n \n )\n }\n ]}\n onDoubleClick={(event, dataItem) => {\n setSelectedUser(dataItem.dataItem);\n }}\n scrollable={\"scrollable\"}\n pageable={true}\n pageSize={10}\n />\n {selectedUser && userGroups ? (\n isUserAdmin ? (\n \n \n \n ) : (\n \n \n \n )\n ) : (\n <>\n )}\n {selectedRemoveUser && removeUserGroups ? (\n {\n if (shouldRefetch) {\n refetchUsers();\n }\n }}\n userIsAdmin={isUserAdmin}\n />\n ) : (\n <>\n )}\n {addUserVisible ? (\n {\n if (shouldRefetch) {\n refetchUsers();\n }\n setAddUserVisible(false);\n }}\n />\n ) : (\n <>\n )}\n {resetPasswordUser ? (\n \n ) : (\n <>\n )}\n \n );\n};\n","import * as React from \"react\";\nimport {\n ZLogin,\n ZSelectTenant,\n ZLogout,\n portal,\n useAuthContext,\n useFaviconFromTheme,\n useLayoutContext,\n SessionTimer,\n ChangePassword,\n Footer,\n ModalWrapper,\n Background,\n CorrelationGroup\n} from \"@msidata/zeact\";\nimport { Customers } from \"./components/Customers\";\nimport { withBanner } from \"./components/Banner\";\nimport Tabs from \"./components/Tabs\";\nimport Equipment from \"./components/Equipment\";\nimport OrderNotesPage from \"./components/OrderNotes\";\nimport InspectionPage from \"./components/Inspection\";\nimport {\n BrowserRouter as Router,\n Redirect,\n Route,\n Switch,\n useHistory\n} from \"react-router-dom\";\nimport { isAdmin, isGroupAdmin } from \"./hooks/useUser\";\nimport { Sites } from \"./components/Sites\";\nimport { withMaxWidth } from \"./hooks/withMaxWidth\";\nimport { Users } from \"./components/Users\";\nimport { useConfiguration } from \"./hooks/useConfiguration\";\nimport { withCompanyInfo } from \"./data/CompanyInfoContext\";\nimport { withUserPreferences } from \"./hooks/useUserPreferences\";\nimport { getCookie, removeCookie } from \"./util/utils\";\n\nconst LoginRoute = () => ;\n\nconst LogoutRoute = () => ;\n\nconst SelectTenantRoute = () => {\n const config = useConfiguration();\n const { logout, setIsAuthenticated } = useAuthContext();\n const [returnComponent, setReturnComponent] = React.useState(<>);\n const token = \"spToken\",\n companyId = \"spCompanyId\",\n numOfCompanies = \"spNumOfCompanies\";\n\n React.useEffect(() => {\n const spToken = getCookie(token);\n const spCompanyId = getCookie(companyId);\n const spNumOfCompanies = getCookie(numOfCompanies);\n const useCookie = spToken !== \"\"\n && spCompanyId !== \"\"\n && spNumOfCompanies !== \"\";\n\n if (useCookie) {\n removeCookie(token);\n removeCookie(companyId);\n removeCookie(numOfCompanies);\n localStorage.setItem(\"authResult\", JSON.stringify({\n accessToken: spToken\n }))\n localStorage.setItem(\"Company-Id\", spCompanyId);\n localStorage.setItem(\"numOfCompanies\", spNumOfCompanies);\n localStorage.setItem(\"cookieUsed\", useCookie.toString());\n setReturnComponent();\n } else {\n setReturnComponent(\n config.loaded\n ? ZSelectTenant({\n getTenantsEndpoint: `${config.serviceProApiUrl}/api/portal/SelectCompany/UserCompanies`,\n redirectToSlug: \"/Order\",\n clientId: \"Portal\",\n handleAuth0Error: error => {\n console.error(error);\n let url = \"/Login\";\n if (error.error) {\n url += `#error=${error.error}`;\n if (\n error.description ||\n error.errorDescription ||\n error.error_description\n ) {\n url += `&error_description=${error.description ||\n error.errorDescription ||\n error.error_description}`;\n }\n }\n\n document.location.replace(url);\n },\n handleAuth0Profile: profile => {\n localStorage.setItem(\"authProfile\", JSON.stringify(profile));\n setIsAuthenticated(true);\n },\n onReturn: () => logout()\n })\n : <>\n );\n }\n }, [config, logout, setIsAuthenticated]);\n\n return returnComponent;\n};\n\nconst ChangePasswordRoute = () => (\n <>\n \n \n \n \n \n