{"version":3,"file":"static/js/9636.2d81e820.chunk.js","mappings":"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","sources":["components/CountSlice.ts","Variables/NavState.ts","components/Nav/NavSlice.ts","Variables/StaticVariables.ts","redux/api/BaseApi.ts","redux/api/UserApi.ts","redux/api/ProjectApi.ts","slices/TicketSlice.ts","slices/ActionSlice.ts","components/Attachment/FileSlice.ts","slices/FeedSlice.ts","slices/FavoriteSlice.ts","Variables/RightBarState.ts","slices/RightBarSlice.ts","slices/KBSlice.ts","slices/RevelationSlice.ts","redux/api/errorHandling/ApiErrorHandler.ts","redux/store.ts","components/Auth/AuthSettings.ts","redux/hooks.ts","components/Nav/Spinny.tsx","context/UserContext.ts","components/Common/ErrorCard.tsx","context/RevelationContext.tsx","components/ErrorPages/NoAuthServer.tsx","redux/api/AssetApi.ts","redux/api/TicketApi.ts","components/Ticket/FormControls/LogOptions.tsx","utils/utils.ts","components/Ticket/GridControls/TicketGrid.tsx","components/Ticket/FormControls/TicketHierarchy.tsx","components/Ticket/GridControls/ExistingTickets.tsx","components/Asset/GridColumnOptions.tsx","components/Asset/AssetGrid.tsx","components/Ticket/GridControls/TicketAssets.tsx","components/Ticket/Timeline.tsx","components/CustomForms/FieldTypes/DateField.tsx","components/CustomForms/FieldTypes/DropdownField.tsx","components/CustomForms/FieldTypes/NumericField.tsx","components/CustomForms/FieldTypes/TextField.tsx","redux/api/ClientApi.ts","components/Client/ListControls/ClientFieldList.tsx","components/CustomForms/FieldTypes/ClientField.tsx","components/User/ListControls/StaffList.tsx","components/CustomForms/FieldTypes/StaffField.tsx","components/Common/Time.tsx","components/CustomForms/FieldTypes/TimeField.tsx","components/CustomForms/FieldTypes/EndUserField.tsx","components/CustomForms/FormField.tsx","components/CustomForms/CustomForm.tsx","components/ClientType/FilterButton.tsx","components/Ticket/FormControls/BulkLogButton.tsx","components/User/UserDetailsModal.tsx","components/Ticket/ListControls/UserFynd.tsx","components/Ticket/ListControls/SLAList.tsx","components/Ticket/ListControls/StatusList.tsx","components/Project/ListControls/ProjectList.tsx","components/Ticket/ListControls/PriorityList.tsx","components/Ticket/ListControls/AssociatedContacts.tsx","components/Ticket/ListControls/TeamList.tsx","components/Ticket/ListControls/AssignedStaff.tsx","components/Ticket/ListControls/TypeList.tsx","components/CustomForms/Validators/DropdownFieldValidator.ts","components/CustomForms/Validators/NumberFieldValidator.ts","components/CustomForms/Validators/CustomFieldValidator.ts","components/CustomForms/Validators/EndUserFieldValidator.ts","components/CustomForms/Validators/DateFieldValidator.ts","components/Ticket/TicketSavedDialog.tsx","components/Ticket/ListControls/RoleList.tsx","types/Setting/Setting.ts","redux/api/SystemApi.ts","components/Action/ActionDate.tsx","utils/TreeDataOperations.ts","components/Ticket/QuickNotes/AddQuickNote.tsx","components/Ticket/QuickNotes/QuickNotesList.tsx","components/Ticket/FormControls/Stopwatch.tsx","components/Common/Mentions/Mentions.tsx","components/Common/Mentions/utils.ts","components/Common/Mentions/Handlers.ts","components/Common/TextEditor.tsx","components/Action/ActionNote/ActionNoteTextEditor.tsx","components/Action/ActionNote/ActionNote.tsx","components/ClientType/ClientTypeList.tsx","components/ClientType/ClientTypeFilter.tsx","components/Ticket/ListControls/BulkContacts.tsx","components/Ticket/TicketDetails/TicketDescription/Description.tsx","components/Ticket/TicketDetails/TicketDescription/TicketDescription.tsx","components/Test/JsonTreeViewer.tsx","components/Gameplan/WorkstreamList.tsx","components/Gameplan/TicketWorkstream.tsx","components/Gameplan/WorkstreamAssignment.tsx","components/Ticket/FormControls/FlaggedNotes.tsx","components/Ticket/TicketDetails/TicketDetails.tsx","components/Ticket/ListControls/TemplateList.tsx","redux/api/FileApi.ts","types/File/FileType.ts","components/Ticket/FormControls/TemplateActions.tsx","components/Ticket/FormControls/Templates.tsx","components/Ticket/FormControls/KBPreview.tsx","components/Ticket/FormControls/KnowledgeBase.tsx","components/Attachment/FileUpload.tsx","components/Ticket/FormControls/Attachments.tsx","redux/api/KBApi.ts","components/Ticket/FormControls/SplitActions.tsx","components/Ticket/TicketDrawer.tsx","components/Ticket/TicketPage.tsx","components/Ticket/TicketModal.tsx","redux/api/FavoriteApi.ts","components/User/Settings.ts","components/RightBar/Contacts/HeaderMenu.tsx","components/RightBar/Revelations/Revelations.tsx","components/RightBar/Revelations/RevelationsPage.tsx","redux/api/FeedApi.ts","components/RightBar/ActivityFeed/HeaderMenu.tsx","components/Team/TeamMultiSelect.tsx","components/Project/ListControls/ProjectTypeList.tsx","components/Client/ListControls/ClientList.tsx","components/RightBar/ActivityFeed/SettingsDialog.tsx","components/Common/ErrorBoundry.tsx","components/RightBar/ActivityFeed/ActivityFeed.tsx","components/User/Fav.tsx","components/RightBar/Contacts/ContactsMenu.tsx","components/RightBar/Contacts/ContactCard.tsx","components/RightBar/Contacts/SettingsDialog.tsx","components/RightBar/Contacts/Settings.tsx","components/RightBar/Contacts/Contacts.tsx","components/RightBar/ToolButton.tsx","components/RightBar/Chat/ChatBar.tsx","components/Chat/ChatRequest.tsx","components/RightBar/RightBar.tsx","components/Revelation/SessionKeepAlive.tsx","components/Revelation/RevelationIframe.tsx","components/Nav/Deeplink.tsx","components/License/LicenseManager.tsx","components/Nav/MimicBar.tsx","components/Nav/NavLogo.tsx","redux/api/AlertApi.ts","components/Nav/Notifications/Notifications.tsx","components/Nav/ProfileNav/HamburgerMenu/HamburgerMenu.tsx","components/Nav/ProfileNav/ProfileDropdown/ProductTour.tsx","components/Nav/ProfileNav/ProfileDropdown/TrialTour.tsx","components/Nav/ProfileNav/ProfileDropdown/ProfileDropdown.tsx","components/DropdownCheckbox/constants.ts","components/DropdownCheckbox/styled/background.tsx","components/DropdownCheckbox/styled/dropdown.tsx","components/DropdownCheckbox/styled/wrapper.tsx","components/DropdownCheckbox/styled/label.tsx","components/DropdownCheckbox/styled/option.tsx","components/DropdownCheckbox/styled/single.tsx","components/DropdownCheckbox/styled/multi.tsx","components/DropdownCheckbox/hooks.ts","components/DropdownCheckbox/CustomSmartOption.tsx","components/DropdownCheckbox/utils.ts","components/DropdownCheckbox/CustomSmartSelect.tsx","components/Nav/ProfileNav/CheckBoxDropdownFilter/CheckBoxDropdownFilter.tsx","components/Nav/ProfileNav/QuickSearch/QuickSearch.tsx","components/Nav/ProfileNav/QuickSearch/QuickSearchWrapper.tsx","components/Nav/ProfileNav/FocusedViewToggle.tsx","components/Nav/ProfileNav/Logout.tsx","components/Nav/ProfileNav/AdminAreaButton.tsx","components/Nav/ProfileNav/CoreIcon.tsx","components/Nav/ProfileNav/ProfileNav.tsx","components/Nav/NavButton/NavButton.tsx","components/Nav/NavButton/FluentButtonBar.tsx","components/Nav/NavWrapper.tsx","components/Nav/NavBar.tsx","components/RightBar/ActivityFeed/FeedPage.tsx","components/Action/ActionForm.tsx","components/Action/ActionSavedDialog.tsx","components/Action/ActionModal.tsx","components/RightBar/Contacts/ContactsPage.tsx","components/Chat/ChatPageWarpper.tsx","redux/api/ChatApi.ts","components/Chat/LogTicketFromChat.tsx","components/Routes/AppRoutes.tsx","components/Auth/SignoutPage.tsx","App.tsx","reportWebVitals.ts","components/Auth/CallbackPage.tsx","components/Auth/SilentRenewPage.tsx","utils/ApplicationInsights.ts","bootstrap.tsx"],"sourcesContent":["import { createSlice } from \"@reduxjs/toolkit\";\n\nconst CountSlice = createSlice({\n name: \"count\",\n initialState: {\n value: 0,\n },\n reducers: {\n IncreaseCount: (state, action) => {\n state.value = action.payload;\n },\n DecreaseCount: (state, action) => {\n state.value = action.payload;\n },\n },\n});\n\nexport const {IncreaseCount, DecreaseCount} = CountSlice.actions\nexport default CountSlice.reducer\n","import { ISearchQuickResults } from \"../types/ISearch\";\n\nconst NavInitialState = {\n quickSearchResults: [] as ISearchQuickResults[],\n quickSearchingFlag: false,\n quickSearchInput: \"\",\n contextMenuOpen: \"\",\n};\nexport default NavInitialState;\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport NavInitialState from \"../../Variables/NavState\";\n\nconst NavSlice = createSlice({\n name: \"nav1\",\n initialState: NavInitialState,\n reducers: {\n updateQuickSearchResults: (state, action) => {\n state.quickSearchResults = action.payload;\n },\n toggleQuickSearchingFlag: (state, action) => {\n state.quickSearchingFlag = action.payload;\n },\n updateQuickSearchInput: (state, action) => {\n state.quickSearchInput = action.payload;\n },\n setContextMenuOpen: (state, action) => {\n state.contextMenuOpen = action.payload;\n },\n },\n});\n\nexport const {\n updateQuickSearchResults,\n toggleQuickSearchingFlag,\n updateQuickSearchInput,\n setContextMenuOpen,\n} = NavSlice.actions;\nexport default NavSlice.reducer;\n","\nimport { IUserProfile } from \"../types/User/IUserProfile\";\n\nexport const INITIAL_USER_CONTEXT: Partial<IUserProfile> = {};\nexport class Constants {\n //Identity server settings\n public static stsAuthority = \"https://login.revelationhelpdesk.com/common/\";\n // public static stsAuthority = \"https://localhost:5001/common/\";\n public static clientId = \"Revelation.NewUX\";\n //public static clientRoot = \"https://localhost:4200/\";\n public static clientRoot = window.location.origin + process.env.PUBLIC_URL; // window.location.pathname;\n public static clientScope = \"offline_access Revelation.Api\"; //openid makes sure we get the id_token so we get the \"Sign back in\" button on the logout page.\n\n //Revelation API (V2) (moved to .env)\n public static apiRoot = process.env.REACT_APP_REVELATION_API_URL;\n public static appInsightsInstrumentationKey = process.env.REACT_APP_APPLICATION_INSIGHTS_CONNECTION;\n}\n//console.log('process.env.REACT_APP_REVELATION_API_URL', process.env)\n\nconst REVELATION_IFRAME = \"RevelationIframe\";\n\nconst ticketFilters = [\n \"Check All\",\n \"Quick Search\",\n \"Tickets Open\",\n \"Tickets Closed\",\n \"Client\",\n \"Projects\",\n \"People\",\n \"KBs\",\n \"Assets\",\n];\nconst profileDropdownItems = [\n \"My Account\",\n \"Ticket Monitor\",\n \"Email Signature\",\n \"@Tag Settings\",\n \"Single Sign On\",\n \"Interface Options\",\n \"Product Tour\",\n];\nconst symbolSize = 30;\nexport {\n REVELATION_IFRAME,\n ticketFilters,\n profileDropdownItems,\n symbolSize\n};\n","import { createApi, fetchBaseQuery } from \"@reduxjs/toolkit/query/react\";\nimport {\n ISearchQuick,\n ISearchQuickPost,\n ISearchType,\n} from \"../../types/ISearch\";\nimport { IUserProfile } from \"../../types/User/IUserProfile\";\nimport { IAssConfig, IUser } from \"../../types/User/IUser\";\nimport { Constants } from \"../../Variables/StaticVariables\";\nimport { ITenant } from \"../../types/ITenant\";\nimport IForm from \"../../types/Form/IForm\";\nimport { IProject } from \"../../types/Project/IProject\";\nimport { IPriority } from \"../../types/IPriority\";\nimport { ISLA } from \"../../types/ISLA\";\nimport { ISearchField } from \"../../types/ISearchField\";\nimport { IFyndResult } from \"../../types/IFyndResult\";\nimport { IAssociatedContact } from \"../../types/Ticket/ITicket\";\nimport { IProjectAssignment } from \"../../types/Project/IProjectAssignment\";\nimport { IFormConfig } from \"../../types/Form/IFormConfig\";\nimport { RootState } from \"../store\";\nimport Cookies from 'js-cookie';\n\nconst Api = createApi({\n reducerPath: \"api\",\n baseQuery: fetchBaseQuery({\n baseUrl: Constants.apiRoot,\n prepareHeaders: async (headers, { getState }) => {\n //console.log('prepareHeaders', (getState() as RootState).auth);\n const token = (getState() as RootState).auth.user?.access_token;\n //const token = (await userManager.getUser()).access_token;\n if (token !== \"null\" && token) {\n headers.set(\"authorization\", `Bearer ${token}`);\n }\n return headers;\n },\n }),\n tagTypes: [\n \"Chat\",\n \"Chats\",\n \"ChatMessages\",\n \"UserProfile\",\n \"UpdateSearchType\",\n \"QuickSearch\",\n \"UpdateStaff\",\n \"GetTenant\",\n \"ImageTicketTimeline\",\n \"ImageTimeline\",\n \"FormByProject\",\n \"ProjectList\",\n \"SLAList\",\n \"PriorityList\",\n \"ClientList\",\n \"GetPriority\",\n \"GetSLA\",\n \"GetTeams\",\n \"GetTeam\",\n \"UserFyndConfig\",\n \"GetProject\",\n \"GetStatuses\",\n \"GetTicket\",\n \"GetForm\",\n \"GetUsers\",\n \"TypeList\",\n \"SLAConfig\",\n \"GetAssociatedContacts\",\n \"GetProjectAssignment\",\n \"GetOpenTickets\",\n \"GetOpenParentTickets\",\n \"GetAssContactConfig\",\n \"GetClient\",\n \"GetUsersByIds\",\n \"GetUser\",\n \"MyLogOptions\",\n \"GetAssets\",\n \"UserRoles\",\n \"GetUsersById\",\n \"FormConfig\",\n \"GetUserSetting\",\n \"UpdateUserSetting\",\n \"GetClientTypes\",\n \"GetClientTypeFilter\",\n \"GetSystemHours\",\n \"GetQuickNotes\",\n \"GetMyTemplates\",\n \"GetTemplate\",\n \"GetTemplateAssignment\",\n \"GetTemplateActions\",\n \"GetStatus\",\n \"GetQuickNoteAsAction\",\n \"FileIsActive\",\n \"GetStopwatches\",\n \"GetSystemStartEnd\",\n \"GetFiles\",\n \"GetFileSetting\",\n \"KBSearch\",\n \"GetMyStatuses\",\n \"GetUserFeed\",\n \"GetUserFavs\",\n \"GetFeedConfig\",\n \"ProjectTypeList\",\n \"GetContacts\",\n \"GetFavConfig\",\n \"GetAlertConfig\",\n \"GetTenantConfig\",\n \"GetWorkstreams\",\n \"GetOffice\",\n \"GetClassification\",\n \"GetMyClient\",\n \"DebugTimezone\"\n ],\n endpoints: (build) => ({\n getTenant: build.query<ITenant, string | void>({\n query: (tenantUid) => {\n const revTenantCookie = Cookies.get('RevTenantUid');\n return \"Account/TenantConfig/?tenantUrl=\" + document.location.host + \"&tenantUid=\" + (revTenantCookie || \"\")\n },\n providesTags: [\"GetTenant\"],\n }),\n renewlicense: build.mutation({\n query: () => ({\n url: \"License/Renew\",\n method: \"POST\",\n }),\n }),\n releaselicense: build.mutation({\n query: () => ({\n url: \"License/Release\",\n method: \"POST\",\n }),\n }),\n getAssContactConfig: build.query<IAssConfig, number>({\n query: (clientTypeId) => `ClientType/${clientTypeId}/AssociatedContacts`,\n providesTags: [\"GetAssContactConfig\"],\n }),\n getSLAList: build.query<ISLA[], { projectId: number; priorityId: number }>({\n query: ({ projectId, priorityId }) =>\n \"SLA/?projectId=\" + projectId + \"&priorityId=\" + priorityId,\n providesTags: [\"SLAList\"],\n }),\n getPriorityList: build.query<IPriority[], number>({\n query: (prioritySetId) =>\n \"Ticket/Priority/?prioritySetId=\" + prioritySetId,\n providesTags: [\"PriorityList\"],\n }),\n getProjectAssignment: build.query<IProjectAssignment[], number>({\n query: (projectId) => `Project/${projectId}/Assignment`,\n providesTags: [\"GetProjectAssignment\"],\n }),\n getAssociatedContacts: build.query<\n IAssociatedContact[],\n { ticketId: number }\n >({\n query: (ticketId) => `Ticket/${ticketId}/Contact`,\n providesTags: [\"GetAssociatedContacts\"],\n }),\n getUserProfile: build.query<IUserProfile, string | void>({\n query: (uid) => {\n console.log('getUserProfile', uid);\n if (uid) {\n return `User/${uid}/Profile`;\n }\n return \"User/Profile\";\n },\n providesTags: [\"UserProfile\"],\n }),\n invalidateProfile: build.mutation<null, void>({\n queryFn: () => {\n console.log('invalidateProfile')\n return ({ data: null })\n },\n invalidatesTags: [\"UserProfile\"],\n }),\n updateFocusedViewToggle: build.mutation<IUserProfile, boolean>({\n query: (info) => ({\n url: `User/Me/ToggleNav`,\n method: \"POST\",\n body: { Collapsed: info },\n }),\n async onQueryStarted(info, { dispatch, queryFulfilled }) {\n const postResult = dispatch(\n Api.util.updateQueryData(\"getUserProfile\", undefined, (draft) => {\n draft.Nav_Collapsed = info;\n })\n );\n try {\n await queryFulfilled;\n } catch {\n postResult.undo();\n }\n },\n invalidatesTags: [\"UserProfile\"],\n }),\n getTicketTimelineImage: build.query<any, number>({\n query: (ticketId) => ({\n url: \"Image/Timeline/\" + ticketId,\n headers: { Accept: \"image/jpeg\" },\n responseHandler: async (response) => {\n const reader = new FileReader();\n return new Promise((resolve, reject) => {\n reader.onload = () => {\n const base64data = reader.result;\n resolve(base64data);\n };\n reader.onerror = (err) => {\n reject(err);\n };\n response.blob().then((value) => reader.readAsDataURL(value));\n });\n },\n }),\n providesTags: [\"ImageTicketTimeline\"],\n }),\n getTimelineImage: build.query<\n any,\n { projectId: number; slaId: number; priorityId: number }\n >({\n query: ({ projectId, slaId, priorityId }) => ({\n url: `Image/Timeline/${projectId}/${slaId ? slaId : 0}/${priorityId}/`,\n headers: { Accept: \"image/jpeg\" },\n responseHandler: async (response) => {\n const reader = new FileReader();\n return new Promise((resolve, reject) => {\n reader.onload = () => {\n const base64data = reader.result;\n resolve(base64data);\n };\n reader.onerror = (err) => {\n reject(err);\n };\n response.blob().then((value) => reader.readAsDataURL(value));\n });\n },\n }),\n providesTags: [\"ImageTimeline\"],\n }),\n getForm: build.query<IForm, number>({\n query: (formId) => {\n return `Form/${formId}/`;\n },\n providesTags: [\"FormByProject\"],\n }),\n getFormConfig: build.query<IFormConfig, void>({\n query: () => `Form/Config`,\n providesTags: [\"FormConfig\"],\n }),\n getFormByProject: build.query<\n IForm,\n { projectId: number; companyId?: number; locationId?: number }\n >({\n query: ({ projectId, companyId, locationId }) => {\n console.log(\"locationId\", locationId);\n if (companyId)\n return `Form/ByProject/${projectId}/${companyId}/${locationId | 0}`;\n else return `Form/ByProject/${projectId}`;\n },\n providesTags: [\"FormByProject\"],\n }),\n getPriority: build.query<IPriority, number>({\n query: (priorityId: number) => `Ticket/Priority/${priorityId}`,\n providesTags: [\"GetPriority\"],\n }),\n getSLA: build.query<ISLA, number>({\n query: (slaId: number) => `SLA/${slaId}`,\n providesTags: [\"GetSLA\"],\n }),\n getSearchType: build.query<ISearchType[], void>({\n query: () => \"Search/type\",\n providesTags: [\"UpdateSearchType\"],\n }),\n getProject: build.query<IProject, number>({\n query: (Id) => `Project/${Id}`,\n providesTags: [\"GetProject\"],\n }),\n getUserFyndConfig: build.query<ISearchField[], void>({\n query: () => \"Search/UserFynd/Config\",\n providesTags: [\"UserFyndConfig\"],\n }),\n getUsers: build.query<IUser[], { companyId: number; locationId?: number }>({\n query: ({ companyId, locationId }) =>\n `User/?companyId=${companyId}${locationId ? \"&locationId=\" + locationId : \"\"\n }`,\n providesTags: [\"GetUsers\"],\n }),\n // updateContactSetting: build.mutation<void, IContactSetting>({\n // query: (info) => ({\n // url: \"User/Setting\",\n // method: \"POST\",\n // body: info,\n // }),\n // }),\n postUserFynd: build.mutation<IFyndResult[], String>({\n query: (info) => ({\n url: \"Search/UserFynd\",\n method: \"POST\",\n body: { SearchPhrase: info },\n }),\n }),\n postSearchQuick: build.mutation<ISearchQuick, ISearchQuickPost>({\n query: (info) => ({\n url: \"Search/quick\",\n method: \"POST\",\n body: info,\n }),\n }),\n updateSearchType: build.mutation<unknown, ISearchType[]>({\n query: (info) => ({\n url: \"Search/type/my\",\n method: \"POST\",\n body: info,\n }),\n async onQueryStarted(info, { dispatch, queryFulfilled }) {\n const postResult = dispatch(\n Api.util.updateQueryData(\"getSearchType\", undefined, (draft) => {\n const selectOption = draft.find((item) => item.ID === info[0].ID);\n const checkAllBoolTrue = info.every((ele) => ele.Checked === true);\n if (draft.length === info.length) {\n // \"Check All\" Option was checked\n draft.forEach((item) => {\n if (checkAllBoolTrue) {\n item.Checked = true;\n } else {\n item.Checked = false;\n }\n });\n } else if (selectOption) {\n // Only a single Option was check\n selectOption.Checked = info[0].Checked;\n }\n })\n );\n try {\n await queryFulfilled;\n } catch {\n postResult.undo();\n }\n },\n invalidatesTags: [\"UpdateSearchType\"],\n }),\n }),\n});\n\nexport const {\n useGetTicketTimelineImageQuery,\n useReleaselicenseMutation,\n useRenewlicenseMutation,\n useGetUserProfileQuery,\n useGetSearchTypeQuery,\n useUpdateSearchTypeMutation,\n usePostSearchQuickMutation,\n useGetTenantQuery,\n useUpdateFocusedViewToggleMutation,\n} = Api;\n\nexport { Api };\n","import { Api } from './BaseApi'\nimport { IUser } from '../../types/User/IUser';\nimport { IStaff } from '../../types/IStaff';\nimport { ITeam } from '../../types/ITeam';\nimport { ILogOptions } from '../../types/User/ILogOptions';\nimport { IRole } from '../../types/User/IRole';\nimport { ISetting } from '../../types/User/ISetting';\nimport { IClientTypeFilter } from '../../types/User/IClientTypeFilter';\nimport { IContactResults, IContactSearchProps } from '../../types/User/IContact';\nimport { IMention } from '../../types/User/IMention';\nimport { IMentionConfig } from '../../types/User/IMentionConfig';\nimport { IClassification } from '../../types/User/IClassification';\n\nconst UserApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getUsersByIds: build.query<IUser[], string>({\n query: (Ids) => `User/ByIds/${Ids}`,\n providesTags: [\"GetUsersByIds\"],\n }),\n getUserById: build.query<IUser, number>({\n query: (id) => `User/ById/${id}`,\n providesTags: [\"GetUsersById\"],\n }),\n getStaff: build.query<IStaff[], { teamId?: number, includeQueues: boolean, includeStaffPlusForCompanyId: number }>({\n query: ({ teamId, includeQueues, includeStaffPlusForCompanyId }) => `User/Staff?teamId=${teamId ? teamId : ''}&includeQueues=${includeQueues}&includeStaffPlusForCompanyId=${includeStaffPlusForCompanyId}`,\n providesTags: [\"UpdateStaff\"],\n }),\n getMention: build.query<IMention[], string>({\n query: (prefix) => `User/Mention?prefix=${prefix}`,\n }),\n getMentionConfig: build.query<IMentionConfig, void>({\n query: () => `User/Mention/Config`,\n }),\n getContacts: build.query<IContactResults, IContactSearchProps>({\n query: (props) => `User/${props.uid}/Contacts?favsOnly=${props.favsOnly || 'false'}&filter=${props.filter || ''}&pageLetter=${props.pageLetter || ''}&groupByOffice=${props.groupByOffice ? 'true' : 'false'}`,\n providesTags: [\"GetContacts\"],\n //Only have one cache entry because the arg always maps to one string\n // serializeQueryArgs: ({ endpointName }) => {\n // return endpointName;\n // },\n }),\n getUser: build.query<IUser, string | void>({\n query: (uid) => `User/${uid}`,\n providesTags: [\"GetUser\"],\n }),\n debugTimezone: build.query<void, string>({\n query: (query) => `Debug/${query}`,\n providesTags: [\"DebugTimezone\"],\n }),\n getTeams: build.query<ITeam[], void>({\n query: () => \"User/Team\",\n providesTags: [\"GetTeams\"],\n }),\n getTeam: build.query<ITeam, number>({\n query: (Id: number) => `User/Team/${Id}`,\n providesTags: [\"GetTeam\"],\n }),\n getLogOptions: build.query<ILogOptions, void>({\n query: () => \"User/Me/LogOptions\",\n providesTags: [\"MyLogOptions\"],\n }),\n getRoles: build.query<IRole[], string>({\n query: (uid) => `User/${uid}/Role`,\n providesTags: [\"UserRoles\"],\n }),\n getSetting: build.query<ISetting, number>({\n query: (settingId) => `User/Setting/${settingId}/`,\n providesTags: [\"GetUserSetting\"],\n }),\n saveSetting: build.mutation<unknown, ISetting>({\n query: (setting) => ({\n url: `User/Setting/`,\n method: \"POST\",\n body: setting,\n }),\n invalidatesTags: [\"GetUserSetting\"]\n }),\n getClientTypeFilters: build.query<IClientTypeFilter[], void>({\n query: (settingId) => `User/ClientTypeFilter`,\n providesTags: [\"GetClientTypeFilter\"],\n }),\n getUserClassification: build.query<IClassification, void>({\n query: () => `User/Classification`,\n providesTags: [\"GetClassification\"],\n }),\n postLogOptions: build.mutation<unknown, ILogOptions>({\n query: (options) => ({\n url: \"User/Me/LogOptions\",\n method: \"POST\",\n body: options,\n }),\n invalidatesTags: [\"MyLogOptions\"]\n }),\n postClientTypeFilter: build.mutation<unknown, IClientTypeFilter>({\n query: (filter) => ({\n url: \"User/ClientTypeFilter\",\n method: \"POST\",\n body: filter,\n }),\n invalidatesTags: [\"GetClientTypeFilter\", \"GetMyClient\"]\n }),\n dismissIntro: build.mutation<void, number>({\n query: (featureId) => ({\n url: `User/Me/DismissIntro/${featureId || 0}`,\n method: \"POST\",\n body: {},\n }),\n invalidatesTags: [\"UserProfile\"]\n }),\n }),\n overrideExisting: false,\n})\n\nexport { UserApi };","import { Api } from './BaseApi'\nimport { IProject } from '../../types/Project/IProject';\nimport { IProjectType } from '../../types/Project/IProjectType';\nimport { IWorkstream } from '../../types/Gameplan/IWorkstream';\n\nconst ProjectApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getProjectList: build.query<IProject[], number>({\n query: (companyId) => \"Project/?companyId=\" + companyId,\n providesTags: [\"ProjectList\"],\n }),\n getProjectTypeList: build.query<IProjectType[], void>({\n query: () => \"Project/Type\",\n providesTags: [\"ProjectTypeList\"],\n }),\n getWorkstreams: build.query<IWorkstream[], number>({\n query: (id) => `Project/${id || 0}/Workstream`,\n providesTags: [\"GetWorkstreams\"],\n }),\n }),\n\n overrideExisting: true,\n})\n\nexport { ProjectApi };","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { IProject } from \"../types/Project/IProject\";\nimport { ITeam } from \"../types/ITeam\";\nimport { IAutoCloseSetting, IAutoOpenSetting, ICallAssignment, ITicket, ITicketOptions } from \"../types/Ticket/ITicket\";\nimport { Api } from \"../redux/api/BaseApi\";\nimport { IPriority } from \"../types/IPriority\";\nimport IForm, { IField } from \"../types/Form/IForm\";\nimport { IStatus } from \"../types/Ticket/Status/IStatus\";\nimport { ISLA } from \"../types/ISLA\";\nimport { IStaff } from \"../types/IStaff\";\nimport { Features } from \"../types/User/IUserProfile\";\nimport { HierarchyProps } from \"../types/Props/HierarchyProps\";\nimport { IUser } from \"../types/User/IUser\";\nimport { ILogOptions } from \"../types/User/ILogOptions\";\nimport { ITicketAsset } from \"../types/Ticket/ITicketAsset\";\nimport { UserApi } from \"../redux/api/UserApi\";\nimport { ITemplateListItem } from \"../types/Ticket/ITemplate\";\nimport { ProjectApi } from \"../redux/api/ProjectApi\";\nimport { SplitActionOptions } from \"../types/Ticket/IAction\";\nimport { IWorkstream } from \"../types/Gameplan/IWorkstream\";\nimport { IWorkstreamAssignment } from \"../types/Ticket/IWorkstreamAssignment\";\n\nexport type TaggedUserType = {\n label: string;\n value: string;\n}\n\nconst initialTicketState = {\n ID: 0,\n Call_Desc: \"\",\n Company_Id: 0,//9000,\n Project_Id: 0, //5009, \n SLA_Id: 0,\n Priority_Id: 0,\n Company_Contact: 0,//3,\n Company_Address_Id: 1,\n Assigned_Team_Id: 0,\n CustomFormId: -1,\n Contact_Name: \"\",\n Bulk_Contact_Ids: [],\n Start_Date: null,\n End_Date: null,\n MergeActionsFromCallId: 0,\n MergeActionsIds: []\n} as ITicket;\n\nconst TicketSlice = createSlice({\n name: \"ticketDetails\",\n initialState: {\n //initialAction: null as IAction,\n ticket: initialTicketState,\n features: null as Features,\n selectedProject: null as IProject,\n selectedPriority: null as IPriority,\n defaultTeamId: 0,\n bulkLog: false,\n logOptions: null as ILogOptions,\n // The expanded/collapsed state of the form\n formState: ['details', 'description', 'workstream-section'] as string[],\n TaggedUsers: [] as TaggedUserType[],\n mentionFocused: \"\",\n splitFromTicketOptions: {} as SplitActionOptions,\n lastFlaggedNoteConfirmedId: 0,\n },\n reducers: {\n SetLastFlaggedNoteConfirmedId: (state, action: PayloadAction<number>) => {\n state.lastFlaggedNoteConfirmedId = action.payload;\n },\n SetSplitOptions: (state, action: PayloadAction<SplitActionOptions>) => {\n state.splitFromTicketOptions = action.payload;\n state.ticket.MergeActionsFromCallId = action.payload?.TicketId;\n state.ticket.MergeActionsIds = action.payload?.Ids;\n },\n SetBulkLog: (state, action: PayloadAction<boolean>) => {\n state.bulkLog = action.payload;\n },\n SetTemplate: (state, action: PayloadAction<ITemplateListItem>) => {\n state.ticket.Template_Id = action.payload?.Id;\n },\n SetTemplatePopulated: (state, action: PayloadAction<boolean>) => {\n state.ticket.Template_Populated = action.payload;\n },\n SetFormState: (state, action: PayloadAction<string[]>) => {\n state.formState = action.payload;\n },\n SetTicket: (state, action: PayloadAction<ITicket>) => {\n state.ticket = action.payload;\n },\n SetWorkstreamAssignment: (state, action: PayloadAction<IWorkstreamAssignment[]>) => {\n state.ticket.Workstream_Assignment = action.payload;\n console.log('after SetWorkstreamAssignment', state.ticket.Workstream_Assignment);\n },\n SetLogOptions: (state, action: PayloadAction<ITicketOptions>) => {\n state.ticket.LogOptions = action.payload;\n },\n SetMyOptions: (state, action: PayloadAction<ILogOptions>) => {\n state.logOptions = action.payload;\n },\n SetDueDate: (state, action: PayloadAction<Date>) => {\n state.ticket.Due_Dt = action.payload.toISOString();\n },\n SetForm: (state, action: PayloadAction<IForm>) => {\n //Don't do this when we load the initial ticket details;\n if (state.ticket.CustomFormId !== action.payload?.ID) {\n state.ticket.CustomFormId = action.payload?.ID;\n state.ticket.CustomFormName = action.payload?.Name;\n state.ticket.CustomFormFields = action.payload?.Fields;\n\n //Set the default field values if they haven't been set\n state.ticket.CustomFormFields = state.ticket.CustomFormFields?.map(ff => {\n if (!ff.VALUES || ff.VALUES.length === 0) {\n let newValues = ff.ConfigSettings.Default?.split(',')// || ff.ConfigSettings.DefaultValue;\n\n //Date field\n if (ff.Field_Type_Id === 3 || ff.Field_Type_Id === 5 || ff.Field_Type_Id === 6 || ff.Field_Type_Id === 7 || ff.Field_Type_Id === 8 || ff.Field_Type_Id === 9) {\n\n if (ff.ConfigSettings.DefaultValue?.toString().length > 0) {\n let defVal = ff.ConfigSettings.DefaultValue;\n //Check for null date\n if (ff.Field_Type_Id === 3)\n defVal = defVal.replace('0001-01-01T00:00:00', '')\n\n if (isNaN(defVal))\n newValues = defVal?.toString().split(',').filter(f => f !== '')\n else //Numeric or date\n newValues = [defVal]\n }\n\n }\n return ({\n ...ff, VALUES: newValues//?.filter(v=>v!==undefined)\n });\n }\n return ff;\n })\n }\n },\n SetField: (state, action: PayloadAction<IField>) => {\n //state.ticket.CustomFormFields?.map(f => f.UID === action.payload.UID ? {...f, VALUES:action.payload.VALUES} : f);\n let foundField = state.ticket.CustomFormFields?.filter(f => f.UID === action.payload.UID)\n if (foundField.length > 0) {\n foundField[0].VALUES = action.payload.VALUES;\n foundField[0].ConfigSettings = action.payload.ConfigSettings;\n }\n state.ticket.Last_Update_Dt = new Date().toISOString();\n },\n SetClient: (state, action: PayloadAction<number>) => {\n state.ticket.Company_Id = action.payload;\n },\n SetType: (state, action) => {\n state.ticket.Type_Id = action.payload;\n },\n SetStatus: (state, action: PayloadAction<IStatus>) => {\n state.ticket.Call_Status = action.payload?.Call_Status\n state.ticket.Call_Status_Id = action.payload?.ID;\n state.ticket.Open_Status = action.payload?.Open_status;\n },\n SetAssigned: (state, action: PayloadAction<IStaff[]>) => {\n state.ticket.Call_Assignment = action.payload?.map<ICallAssignment>(m => {\n return {\n Contact_Name: m.F_Name ? m.F_Name + ' ' + m.L_Name : m.Full_Name,\n Contact_Id: m.ID\n } as ICallAssignment\n });\n },\n SetAutoCloseSetting: (state, action: PayloadAction<IAutoCloseSetting>) => {\n state.ticket.AutoCloseSettings = action.payload;\n },\n SetAutoOpenSetting: (state, action: PayloadAction<IAutoOpenSetting>) => {\n state.ticket.AutoOpenSettings = action.payload;\n },\n SetBulkContacts: (state, action: PayloadAction<IStaff[]>) => {\n state.ticket.Bulk_Contact_Ids = action.payload?.map(m => m.ID);\n },\n SetAssociatedContacts: (state, action: PayloadAction<IStaff[]>) => {\n state.ticket.Associated_Contact_Ids = action.payload?.map(m => m.ID);\n },\n SetProject: (state, action: PayloadAction<IProject>) => {\n state.selectedProject = action.payload;\n state.ticket.Project_Id = action.payload?.ID | 0;\n //only when SLAs are on\n if (state.features.SLAs)\n state.ticket.SLA_Id = action.payload?.Default_SLA_Id || 0;\n\n state.ticket.Priority_Set_Id = action.payload?.Priority_Set_Id;\n state.ticket.Priority_Id = action.payload?.Default_Priority_Id || 0;\n state.ticket.Is_Workstream = action.payload?.Workstream_Enabled ? true : false;\n },\n SetWorkstream: (state, action: PayloadAction<IWorkstream>) => {\n //console.log('SetWorkstream', action.payload)\n state.ticket.WorkstreamId = action.payload?.Workstream_Id;\n state.ticket.WorkstreamName = action.payload?.Workstream_Name;\n //Default start and end date\n //state.ticket.Start_Date = action.payload?.StartDt;\n //state.ticket.End_Date = action.payload?.EndDt;\n },\n SetEffort: (state, action: PayloadAction<number>) => {\n state.ticket.Effort_Mins = action.payload;\n },\n SetStartDate: (state, action: PayloadAction<Date>) => {\n state.ticket.Start_Date = action.payload;\n },\n SetEndDate: (state, action: PayloadAction<Date>) => {\n state.ticket.End_Date = action.payload;\n },\n SetSLA: (state, action: PayloadAction<ISLA>) => {\n //only when SLAs are on\n if (state.features.SLAs)\n state.ticket.SLA_Id = action.payload.SLA_ID === undefined ? 0 : action.payload.SLA_ID;\n },\n SetPriority: (state, action: PayloadAction<IPriority>) => {\n state.selectedPriority = action.payload;\n state.ticket.Priority_Id = action.payload?.ID;\n },\n SetTeam: (state, action: PayloadAction<ITeam>) => {\n state.ticket.Assigned_Team_Id = action.payload.ID;\n },\n SetAssets: (state, action: PayloadAction<ITicketAsset[]>) => {\n state.ticket.Assets = action.payload;\n },\n SetLinkedKbs: (state, action: PayloadAction<number[]>) => {\n state.ticket.Linked_Kb_Ids = action.payload;\n },\n SetEndUserName: (state, action: PayloadAction<string>) => {\n state.ticket.Contact_Name = action.payload;\n },\n SetEndUser: (state, action: PayloadAction<IUser>) => {\n console.log('SetEndUser', action.payload)\n //state.ticket.Contact_Name = action.payload?.FullName\n state.ticket.Company_Id = action.payload?.Company_Id | 0;\n state.ticket.Company_Name = action.payload?.Company_Name;\n state.ticket.Company_Type_Id = action.payload?.Company_Type_Id;\n state.ticket.Company_Address_Id = action.payload?.Company_Address_Id | 0;\n state.ticket.Address_Name = action.payload?.Address_Name;\n state.ticket.Company_Contact = action.payload?.ID;\n //state.ticket.Company_Contact_Uid = action.payload?.UId;\n },\n SetEndUserUid: (state, action: PayloadAction<string>) => {\n console.log('Ticket slice - SetEndUserUid')\n state.ticket.Company_Contact_Uid = action.payload || null;\n },\n SetDescription: (state, action) => {\n state.ticket.Call_Desc = action.payload;\n },\n SetTaggedDescription: (state, action) => {\n state.ticket.TaggedDescription = action.payload;\n },\n SetMentionFocused: (state, action) => {\n state.mentionFocused = action.payload\n },\n SetTaggedUsers: (state, action) => {\n state.TaggedUsers = action.payload;\n },\n ResetTicket: (state, action) => {\n state.ticket = { ...initialTicketState, Assigned_Team_Id: state.defaultTeamId, LogOptions: state.ticket?.LogOptions };\n state.selectedProject = null;\n state.splitFromTicketOptions = {} as SplitActionOptions;\n //console.log('Ticket reset!')\n },\n SetHierarchy: (state, action: PayloadAction<HierarchyProps>) => {\n if (action.payload.IsParent) {\n state.ticket.Is_Parent = true;\n state.ticket.Parent_Call_Id = null;\n }\n else if (!isNaN(action.payload.Parent_Ticket_Id)) {\n state.ticket.Is_Parent = false;\n state.ticket.Parent_Call_Id = action.payload.Parent_Ticket_Id;\n }\n else {\n state.ticket.Is_Parent = false;\n state.ticket.Parent_Call_Id = null;\n }\n },\n },\n extraReducers: (builder) => {\n builder.addMatcher(\n //The new ticket should initially be assigned to the current user\n Api.endpoints.getUserProfile.matchFulfilled, (state, { payload }) => {\n //Default log a ticket team.\n if (payload.Features.Your_Team_Log_A_Ticket) {\n state.ticket.Assigned_Team_Id = payload.Team_Id;\n state.defaultTeamId = payload.Team_Id;\n }\n state.features = payload.Features;\n\n //Set the current user as assigned to the ticket\n if (!state.ticket.Call_Assignment)\n state.ticket.Call_Assignment = [\n {\n Contact_Name: payload.F_Name + ' ' + payload.L_Name,\n Contact_Id: payload.Id\n } as ICallAssignment];\n\n //state.initialAction = { ...state.initialAction, Staff_Id: payload.Id, Billable_Time: payload.Default_Time, Action_Type_Id: (payload.Features.Private_Actions && payload.Features.Private_Notes_Always_On) ? 7 : undefined }\n }\n );\n builder.addMatcher(\n //Sets the default project when a Company is selcted\n ProjectApi.endpoints.getProjectList.matchFulfilled,\n (state, { payload }) => {\n const prim = payload.filter(proj => { return proj.Primary_Project });\n if (prim?.length > 0 && state.ticket.ID === 0) {\n state.selectedProject = prim[0];\n state.ticket.Project_Id = prim[0].ID;\n if (state.features.SLAs)\n state.ticket.SLA_Id = prim[0].Default_SLA_Id || 0;\n state.ticket.Priority_Set_Id = prim[0].Priority_Set_Id;\n state.ticket.Priority_Id = prim[0].Default_Priority_Id || 0;\n state.ticket.Is_Workstream = prim[0].Workstream_Enabled ? true : false;\n }\n });\n builder.addMatcher(\n //The user's default state for timeline and initial action\n UserApi.endpoints.getLogOptions.matchFulfilled, (state, { payload }) => {\n payload.Timeline_Open && state.formState.push('timeline');\n payload.Action_Open && state.formState.push('action');\n });\n builder.addMatcher(\n //The system's default state for form collapsed\n Api.endpoints.getFormConfig.matchFulfilled, (state, { payload }) => {\n !payload.Log_Ticket_Collapsed && state.formState.push('form');\n });\n }\n})\n\nexport const { SetClient, SetProject, SetSLA, SetPriority, SetTeam, SetEndUser, SetDescription, SetTaggedUsers, SetTaggedDescription, SetMentionFocused, ResetTicket, SetTicket, SetForm, SetField, SetType,\n SetStatus, SetAssigned, SetAssociatedContacts, SetHierarchy, SetEndUserUid, SetEndUserName, SetDueDate, SetMyOptions, SetLogOptions, SetAssets, SetStartDate, SetEndDate,\n SetFormState, SetTemplate, SetTemplatePopulated, SetBulkLog, SetBulkContacts, SetLinkedKbs, SetAutoCloseSetting, SetAutoOpenSetting, SetSplitOptions, SetWorkstream, SetEffort, SetWorkstreamAssignment,\n SetLastFlaggedNoteConfirmedId\n} = TicketSlice.actions\nexport default TicketSlice.reducer\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { Api } from \"../redux/api/BaseApi\";\nimport { IAction, IActionUI } from \"../types/Ticket/IAction\";\n\nconst initialActionState = {\n ID: 0,\n} as IAction;\n\nconst initialUiSettings = {\n Bill_Time_Enabled: true,\n NonBill_Time_Enabled: true,\n} as IActionUI;\n\nexport const PRIVATE_ACTION_ID = 7;\n\nconst ActionSlice = createSlice({\n name: \"actionDetails\",\n initialState: {\n action: initialActionState,\n settings: initialUiSettings,\n },\n reducers: {\n ResetAction: (state, action) => {\n state.action = initialActionState;\n state.settings = initialUiSettings;\n },\n SetAction: (state, action: PayloadAction<IAction>) => {\n state.action = action.payload;\n },\n SetBill: (state, action: PayloadAction<number>) => {\n state.action.Billable_Time = action.payload;\n },\n SetNonBill: (state, action: PayloadAction<number>) => {\n state.action.Non_Billable_Time = action.payload;\n },\n SetUISettings: (state, action: PayloadAction<IActionUI>) => {\n state.settings = action.payload;\n },\n SetTaggedDescription: (state, action: PayloadAction<string>) => {\n state.action.TaggedDescription = action.payload;\n },\n SetHTML_Notes: (state, action: PayloadAction<string>) => {\n state.action.HTML_Notes = action.payload;\n },\n },\n extraReducers: (builder) => {\n builder.addMatcher(\n //The new ticket should initially be assigned to the current user\n Api.endpoints.getUserProfile.matchFulfilled,\n (state, { payload }) => {\n console.log(\"Api.endpoints.getUserProfile.matchFulfilled\", payload.Id);\n let actionTypeId =\n payload.Features.Private_Actions &&\n payload.Features.Private_Notes_Always_On\n ? PRIVATE_ACTION_ID\n : undefined;\n state.action = {\n ...state.action,\n Staff_Id: payload.Id,\n Billable_Time: payload.Default_Time,\n Action_Type_Id: actionTypeId,\n };\n state.settings = {\n ...state.settings,\n Bill_Time_Enabled: actionTypeId !== PRIVATE_ACTION_ID,\n NonBill_Time_Enabled: actionTypeId !== PRIVATE_ACTION_ID,\n };\n }\n );\n },\n});\n\nexport const {\n SetAction,\n SetBill,\n SetNonBill,\n SetUISettings,\n ResetAction,\n SetTaggedDescription,\n SetHTML_Notes,\n} = ActionSlice.actions;\nexport default ActionSlice.reducer;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { IFileUpload } from \"../../types/File/FileUpload\";\n\nconst FileSlice = createSlice({\n name: \"fileDetails\",\n initialState: {\n files: [],\n },\n reducers: {\n ResetFiles: (state, action) => {\n state.files = [];\n },\n SetFiles: (state, action: PayloadAction<IFileUpload[]>) => {\n state.files = action.payload;\n }\n }\n})\n\nexport const { ResetFiles, SetFiles } = FileSlice.actions\nexport default FileSlice.reducer\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { IFeedResult } from \"../types/Feed/IFeedResult\";\n\nconst FeedSlice = createSlice({\n name: \"count\",\n initialState: {\n feedItems: { LastId: 0 } as IFeedResult,\n },\n reducers: {\n SetFeedItems: (state, action: PayloadAction<IFeedResult>) => {\n state.feedItems = action.payload\n }\n },\n});\n\nexport const { SetFeedItems } = FeedSlice.actions\nexport default FeedSlice.reducer\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { IFavorite } from \"../types/Favorites/IFavorite\";\n\nconst FavoriteSlice = createSlice({\n name: \"revelation\",\n initialState: {\n favorites: [] as IFavorite[],\n },\n reducers: {\n saveFavorites: (state, action) => {\n //console.log('saveFavorites', action.payload)\n state.favorites = action.payload;\n },\n },\n});\n\nexport const { saveFavorites } = FavoriteSlice.actions;\nexport default FavoriteSlice.reducer;\n","const RightBarInitialState = {\n toggleState: 0,\n};\nexport default RightBarInitialState;\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport RightBarInitialState from \"../Variables/RightBarState\";\n\nconst RightBarSlice = createSlice({\n name: \"rightBar\",\n initialState: RightBarInitialState,\n reducers: {\n updateToggleState: (state, action) => {\n state.toggleState = action.payload;\n },\n },\n});\n\nexport const { updateToggleState } = RightBarSlice.actions;\nexport default RightBarSlice.reducer;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { IKBSearchResult } from \"../types/KB/IKBSearchResult\";\n\n\nconst KBSlice = createSlice({\n name: \"kbDetails\",\n initialState: {\n results: [] as IKBSearchResult[],\n selectKbs: [],\n previewKbId: null\n },\n reducers: {\n SetResults: (state, action: PayloadAction<IKBSearchResult[]>) => {\n state.results = action.payload;\n },\n SetPreview: (state, action: PayloadAction<number>) => {\n state.previewKbId = action.payload;\n }\n }\n\n})\n\nexport const { SetResults } = KBSlice.actions\nexport default KBSlice.reducer\n","import { createSlice } from \"@reduxjs/toolkit\";\nimport { nanoid } from \"nanoid\";\n\nconst RevelationIframeSlice = createSlice({\n name: \"revelation\",\n initialState: {\n isFirstIframeRequest: true,\n currentIframeSrc: \"\",\n iFrameLoading: true,\n mimicUid: undefined as string,\n uniqueId: null as string,\n } as RevelationIframeType,\n reducers: {\n setIframeLoaded: (state, action) => {\n state.iFrameLoading = false\n },\n updateIframeSrc: (state, action) => {\n //console.log('state.currentIframeSrc=', state.currentIframeSrc, action.payload, state.currentIframeSrc === action.payload)\n console.log('updateIframeSrc - action.payload:', action.payload, state.currentIframeSrc === action.payload)\n state.iFrameLoading = true;//(state.currentIframeSrc !== action.payload)\n state.currentIframeSrc === action.payload\n ? state.currentIframeSrc = action.payload + (action.payload.indexOf(\"?\") > -1 ? \"&d=\" : \"?d=\") + nanoid()\n : state.currentIframeSrc = action.payload;\n state.uniqueId = nanoid();\n //}\n },\n mimicUser: (state, action) => {\n state.mimicUid = action.payload;\n state.currentIframeSrc = null;\n state.iFrameLoading = true;\n },\n cancelMimic: (state) => {\n state.mimicUid = null;\n state.currentIframeSrc = null;\n state.iFrameLoading = true;\n },\n setFirstIframeRequest: (state, action) => {\n state.isFirstIframeRequest = action.payload;\n },\n },\n});\n\nexport type RevelationIframeType = {\n iFrameLoading: boolean;\n currentIframeSrc: string;\n mimicUid: string;\n uniqueId: string;\n isFirstIframeRequest: boolean;\n};\n\nexport const {\n updateIframeSrc,\n setIframeLoaded,\n mimicUser,\n cancelMimic,\n setFirstIframeRequest\n} = RevelationIframeSlice.actions;\nexport default RevelationIframeSlice.reducer;\n","import { isRejectedWithValue } from '@reduxjs/toolkit'\nimport type { MiddlewareAPI, Middleware } from '@reduxjs/toolkit'\n\n/**\n * Log a warning and show a toast!\n */\nexport const rtkQueryErrorLogger: Middleware =\n (api: MiddlewareAPI) => (next) => (action) => {\n //console.log('rtkQueryErrorLogger')\n // RTK Query uses `createAsyncThunk` from redux-toolkit under the hood, so we're able to utilize these matchers!\n if (isRejectedWithValue(action)) {\n console.warn('We got a rejected action!', action)\n if (action.payload?.status === 401) {\n\n }\n //Not ready yet\n // toast.error('An unexpected error occurred when calling the Revelation API', {\n // position: \"top-center\",\n // autoClose: 0,\n // hideProgressBar: true,\n // closeOnClick: true,\n // pauseOnHover: false,\n // draggable: true,\n // progress: undefined,\n // theme: \"colored\",\n // bodyStyle: {\n // width: '100%'\n // }\n //});\n }\n\n return next(action)\n }","import { configureStore, ThunkAction, Action, createReducer, combineReducers, Reducer } from \"@reduxjs/toolkit\";\nimport { setupListeners } from \"@reduxjs/toolkit/dist/query\";\nimport CountReducer from \"../components/CountSlice\";\nimport NavReducer from \"../components/Nav/NavSlice\";\n//const mimicUid = useReduxSelector(s=>s.revI.mimicUid)import AuthReducer from \"../slices/AuthSlice\";\nimport TicketReducer from \"../slices/TicketSlice\";\nimport ActionReducer from \"../slices/ActionSlice\";\nimport FileReducer from \"../components/Attachment/FileSlice\";\nimport FeedReducer from \"../slices/FeedSlice\";\nimport FavoriteReducer from \"../slices/FavoriteSlice\";\nimport RightBarReducer from \"../slices/RightBarSlice\";\nimport KBReducer from \"../slices/KBSlice\";\nimport RevelationIframeReducer from \"../slices/RevelationSlice\";\nimport { Api } from \"./api/BaseApi\";\nimport { reducer as oidcReducer } from 'redux-oidc';\nimport { rtkQueryErrorLogger } from \"./api/errorHandling/ApiErrorHandler\";\nimport { createDynamicMiddlewares } from 'redux-dynamic-middlewares'\n\nconst dynamicMiddlewaresInstance = createDynamicMiddlewares()\n\nconst staticReducers = {\n kb: KBReducer,\n files: FileReducer,\n ticketDetails: TicketReducer,\n actionDetails: ActionReducer,\n auth: oidcReducer,\n //mimic: AuthReducer,\n rightBar: RightBarReducer,\n nav: NavReducer,\n count: CountReducer,\n feed: FeedReducer,\n favs: FavoriteReducer,\n revI: RevelationIframeReducer,\n [Api.reducerPath]: Api.reducer\n};\n\n\nlet chatApiMiddleware = null;\n\n// Configure the store\n//const store = function createStore(initialState) {\nexport const store = configureStore({\n reducer: staticReducers,\n devTools: true,\n middleware: (getDefaultMiddleware) => {\n return getDefaultMiddleware({\n serializableCheck: false //Stop OIDC serializable warnings\n }).concat(Api.middleware)\n .concat(rtkQueryErrorLogger).concat(dynamicMiddlewaresInstance.enhancer)\n\n\n },\n});\n\n// Add a dictionary to keep track of the registered async reducers\n//const asyncReducers = {}\n// Create an inject reducer function\n// This function adds the async reducer, and creates a new combined reducer\n// const injectReducer = (key, asyncReducer) => {\n// asyncReducers[key] = asyncReducer\n// store.replaceReducer(createReducer(asyncReducers))\n// }\n// function registerReducers(newReducer: Reducer) {\n// store.replaceReducer(\n// combineReducers({ ...staticReducers, ...{ chatApi: newReducer } })\n// );\n// }\n\n//import chat API reducer\n// import(\"chat/ChatApi\").then(({ ChatApi }) => {\n// console.log('store.replaceReducer', ChatApi, ChatApi.reducer);\n// registerReducers(ChatApi.reducer)\n// dynamicMiddlewaresInstance.addMiddleware(ChatApi.middleware)\n// }\n// );\n\n//import chat reducers, api, and middleware for Signal R\n//@ts-expect-error\nimport(\"chat/ChatReducers\").then(({ ChatApi, ChatSlice, SignalRMiddleware }) => {\n //console.log('store.replaceReducer ChatApi ChatSlice', ChatApi, SignalRMiddleware);\n\n store.replaceReducer(\n combineReducers({ ...staticReducers, ...{ [ChatApi.reducerPath]: ChatApi.reducer, [ChatSlice.name]: ChatSlice.reducer, } })\n );\n dynamicMiddlewaresInstance.addMiddleware(ChatApi.middleware)\n dynamicMiddlewaresInstance.addMiddleware(SignalRMiddleware)\n\n}\n);\n\n\n\n\n// optional, but required for refetchOnFocus/refetchOnReconnect behaviors\nsetupListeners(store.dispatch);\n\n\nexport type AppDispatch = typeof store.dispatch;\nexport type RootState = ReturnType<typeof store.getState>;\nexport type AppThunk<ReturnType = void> = ThunkAction<\n ReturnType,\n RootState,\n unknown,\n Action<string>\n>;\n","import { UserManagerSettings } from \"oidc-client\";\nimport { Constants } from \"../../Variables/StaticVariables\";\nimport { WebStorageStateStore } from \"oidc-client-ts\";\n\nexport const oAuthSettings = {\n authority: Constants.stsAuthority,\n client_id: Constants.clientId,\n redirect_uri: `${window.location.protocol}//${window.location.hostname}${window.location.port ? `:${window.location.port}` : ''}${process.env.PUBLIC_URL}/signin-callback`,//`${Constants.clientRoot}/signin-callback.html`,\n silent_redirect_uri: `${Constants.clientRoot}/silent-renew`,\n automaticSilentRenew: true,\n post_logout_redirect_uri: `${Constants.clientRoot}`,\n response_type: \"code\",\n scope: Constants.clientScope,\n validateSubOnSilentRenew: false,\n includeIdTokenInSilentRenew: true,\n silentRequestTimeoutInSeconds: 30,\n //Store access token in local storage so a new token doen't need to be fetch when opening a ticket in a new tab.\n // stateStore: new WebStorageStateStore({\n // store: localStorage\n // }),\n} as UserManagerSettings;","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\nimport type { RootState, AppDispatch } from './store';\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useReduxDispatch = () => useDispatch<AppDispatch>();\nexport const useReduxSelector: TypedUseSelectorHook<RootState> = useSelector;\n","const Spinny = (props: { text?: string }) => {\n return (\n <>\n <div className=\"fixed inset-0 bg-dark-gray bg-opacity-50 transition-opacity\"></div>\n <div className=\"fixed flex items-center justify-center h-screen w-screen z-5 transition-opacity\">\n <img\n alt=\"spinny\"\n src={\"./images/rev_loading_small.gif\"}\n ></img><div className=\"ml-4\">{props.text}</div>\n </div>\n </>\n );\n};\n\nconst PartialSpinny = (props) => {\n return (\n <>\n <div className=\"absolute inset-0 bg-dark-gray bg-opacity-50 transition-opacity h-full w-full\" style={{ zIndex: props.z || 10500 }}>\n <div className=\"flex items-center justify-center h-full w-full z-5 transition-opacity\">\n <img\n alt=\"spinny\"\n src={\"./images/rev_loading_small.gif\"}\n ></img>\n </div>\n </div>\n </>\n );\n};\n\nconst SimpleSpinny = () => {\n return (\n <>\n <div className=\"flex items-center justify-center h-full w-full z-5 transition-opacity\">\n <img\n alt=\"spinny\"\n src={\"./images/rev_loading_small.gif\"}\n ></img>\n </div>\n </>\n );\n};\n\nexport { Spinny, PartialSpinny, SimpleSpinny };\n\n","import { createContext } from 'react';\n\nexport const RevUserContext = createContext(null);","\nimport { Card, CardActions, CardBody, CardTitle } from '@progress/kendo-react-layout'\nimport { Button } from '@progress/kendo-react-buttons'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport Scrollbars from 'react-custom-scrollbars-2'\n\nexport default function ErrorCard(props: ErrorProps) {\n return (\n <Card style={{ margin: '10rem' }}\n type=\"error\"\n >\n <CardBody>\n <CardTitle><b>An unexpected error occurred!</b></CardTitle>\n <CardTitle>{props.message}</CardTitle>\n\n <Scrollbars autoHeight={true} autoHeightMin={'400px'}>\n {props.details}\n </Scrollbars>\n\n </CardBody>\n <CardActions style={{ color: '#000' }}>\n <span className=\"k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary\">\n <Button themeColor='primary' size='large' icon='refresh' onClick={() => window.location.reload()}>Retry</Button>\n </span>\n <span className=\"k-button k-button-md k-rounded-md k-button-flat k-button-flat-primary\">\n <Link to='/signout'> <Button themeColor='secondary' size='large' icon='logout'>Sign out</Button></Link>\n </span>\n </CardActions>\n </Card>\n )\n}\n\nexport type ErrorProps = {\n message: string\n details: string\n}","import React from 'react'\nimport { Spinny } from '../components/Nav/Spinny';\nimport { useReduxSelector } from '../redux/hooks';\nimport { RevUserContext } from './UserContext';\nimport { Api } from '../redux/api/BaseApi';\nimport { createUserManager } from 'redux-oidc';\nimport { oAuthSettings } from \"../components/Auth/AuthSettings\";\nimport ErrorCard from '../components/Common/ErrorCard';\nimport Cookies from 'js-cookie';\n\nexport const RevelationContext = (props) => {\n const stateUser = useReduxSelector((state) => state.auth.user);\n const mimicUid = useReduxSelector((state) => state.revI.mimicUid);\n //Wait for the user token to be loaded into state before calling the API\n const { data: profile, error } = Api.useGetUserProfileQuery(mimicUid ? mimicUid : undefined, { skip: !stateUser })\n if (error) {\n console.log('RevelationContext error', error)\n }\n if (error && (error['originalStatus'] === 401 || error['originalStatus'] === 403)) {\n //Reauthenticate\n //return <div>error:{JSON.stringify(error)}</div>\n let newUserManager = createUserManager(oAuthSettings)\n newUserManager.signoutRedirect();\n\n return <Spinny />\n }\n\n if (error)\n return <ErrorCard message='Error returned from Revelation API' details={JSON.stringify(error)} />\n\n\n if (!profile && !error) {\n //console.log('RevelationContext', profile, error, isSuccess, stateUser)\n return <Spinny />\n }\n if (profile && profile?.Tenant_Uid)\n Cookies.set('RevTenantUid', profile?.Tenant_Uid);\n\n return (\n <>\n <RevUserContext.Provider value={profile}>\n <main\n className=\"relative min-h-screen flex flex-col\"\n style={{ position: \"relative\" }} >\n {props.children}\n </main>\n </RevUserContext.Provider>\n </>\n )\n}\n","import React from 'react'\nimport { useNavigate, useSearchParams } from 'react-router-dom';\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport ErrorCard from '../Common/ErrorCard';\n\nexport const NoAuthServer = () => {\n const [params] = useSearchParams()\n const navigate = useNavigate()\n\n return <ErrorCard details=\"\" message={\"Authentication server not found: \" + params.get(\"authority\") + \". Please try log in again.\"} />\n\n return (\n <div className=\"danger\" role=\"alert\">\n Authentication Server Not Found ({params.get(\"authority\")})\n\n <p><Button icon='refresh' onClick={() => navigate('/')}>Retry</Button></p>\n </div>\n\n )\n} \n","import { Api } from './BaseApi'\nimport { IAsset } from '../../types/Asset/IAsset';\n\nconst AssetApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getAssets: build.query<IAsset[], {contactId?:number,locationId?:number,companyId?:number}>({\n query: ({contactId,locationId,companyId}) => `Asset/?contactId=${contactId}&locationId=${locationId || 0}&companyId=${companyId || 0}`,\n providesTags: [\"GetAssets\"],\n }),\n }),\n overrideExisting: false,\n})\n\nexport { AssetApi };","import { Api } from './BaseApi'\nimport { ITicket } from \"../../types/Ticket/ITicket\";\nimport { IType } from '../../types/IType';\nimport { ISLAConfig } from '../../types/ISLAConfig';\nimport { IStatus } from '../../types/Ticket/Status/IStatus';\nimport { IQuickNoteCategory } from '../../types/Ticket/IQuickNotes';\nimport { ITemplate, ITemplateAction, ITemplateAssignment, ITemplateListItem } from '../../types/Ticket/ITemplate';\nimport { IAction, IActionIds } from '../../types/Ticket/IAction';\nimport { IStopwatch, StopwatchProps } from '../../types/Ticket/IStopwatch';\nimport { IStatusType } from '../../types/Ticket/Status/IStatusListItem';\n\nconst TicketApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getTypeList: build.query<IType[], number | null>({\n query: (parentId) => \"Ticket/Type?parentTypeId=\" + parentId,\n providesTags: [\"TypeList\"],\n }),\n getSLAConfig: build.query<ISLAConfig, void>({\n query: () => \"Ticket/SLAConfig\",\n providesTags: [\"SLAConfig\"],\n }),\n getTicket: build.query<ITicket, { ticketId: number, populateFormData?: boolean }>({\n query: ({ ticketId, populateFormData }) => `Ticket/${ticketId}/?populateFormData=${populateFormData || 'false'}`,\n providesTags: [\"GetTicket\"],\n }),\n getOpenTickets: build.query<ITicket[], { companyId?: number }>({\n query: ({ companyId }) => `/Ticket/?companyId=${companyId || 0}`,\n providesTags: [\"GetOpenTickets\"],\n }),\n getStatuses: build.query<IStatus[], void>({\n query: () => \"Ticket/Status?statusTypeId=-1\",\n providesTags: [\"GetStatuses\"],\n }),\n getMyStatuses: build.query<IStatusType[], void>({\n query: () => \"Ticket/Status/My\",\n providesTags: [\"GetMyStatuses\"],\n }),\n getStatus: build.query<IStatus, number>({\n query: (Id) => `Ticket/Status/${Id}`,\n providesTags: [\"GetStatus\"],\n }),\n getOpenEndUserTickets: build.query<ITicket[], string>({\n query: (Uid) => `Ticket/ByEndUser/${Uid}`,\n providesTags: [\"GetOpenTickets\"],\n }),\n getOpenParentTickets: build.query<ITicket[], void>({\n query: () => \"Ticket/Parent/\",\n providesTags: [\"GetOpenParentTickets\"],\n }),\n getQuickNotes: build.query<IQuickNoteCategory[], void>({\n query: () => \"QuickNote/My/\",\n providesTags: [\"GetQuickNotes\"],\n }),\n getQuickNoteAsAction: build.query<IAction, { id: number, ticketId: number }>({\n query: ({ id, ticketId }) => `QuickNote/${id}/AsAction/${ticketId}`,\n providesTags: [\"GetQuickNoteAsAction\"],\n }),\n getMyTemplates: build.query<ITemplateListItem[], void>({\n query: () => \"Ticket/Template/My\",\n providesTags: [\"GetMyTemplates\"],\n }),\n getTemplateActions: build.query<ITemplateAction[], number>({\n query: (id) => `Ticket/Template/${id}/Actions`,\n providesTags: [\"GetTemplateActions\"],\n }),\n getTemplateAssignment: build.query<ITemplateAssignment[], number>({\n query: (id) => `Ticket/Template/${id}/Assignment`,\n providesTags: [\"GetTemplateAssignment\"],\n }),\n getTemplate: build.query<ITemplate, number>({\n query: (id) => `Ticket/Template/${id}`,\n providesTags: [\"GetTemplate\"],\n }),\n getStopwatches: build.query<IStopwatch[], number>({\n query: (id) => `Ticket/${id || 0}/Stopwatch`,\n providesTags: [\"GetStopwatches\"],\n }),\n startStopwatch: build.mutation<IStopwatch, StopwatchProps>({\n query: (props) => ({\n url: `Ticket/${props.TicketId || 0}/Stopwatch/Start`,\n method: \"POST\",\n body: props,\n }),\n invalidatesTags: [\"GetStopwatches\"]\n }),\n stopStopwatch: build.mutation<IStopwatch | void, StopwatchProps>({\n query: (props) => ({\n url: `Ticket/${props.TicketId || 0}/Stopwatch/Stop`,\n method: \"POST\",\n body: props,\n }),\n invalidatesTags: [\"GetStopwatches\"]\n }),\n createTicket: build.mutation<unknown, ITicket>({\n query: (info) => ({\n url: \"Ticket\",\n method: \"POST\",\n body: info,\n }),\n invalidatesTags: [\"GetStopwatches\", \"GetTicket\", \"GetFiles\"]\n }),\n bulkLogTicket: build.mutation<unknown, ITicket>({\n query: (info) => ({\n url: \"Ticket/BulkLog\",\n method: \"POST\",\n body: info,\n }),\n invalidatesTags: [\"GetStopwatches\", \"GetTicket\", \"GetFiles\"]\n }),\n actionsById: build.mutation<IAction[], IActionIds>({\n query: (info) => ({\n url: \"Ticket/Action/ByIds\",\n method: \"POST\",\n body: info,\n })\n }),\n refetchQuicknotes: build.mutation<null, void>({\n queryFn: () => ({ data: null }),\n invalidatesTags: ['GetQuickNotes'],\n }),\n }),\n overrideExisting: false,\n})\n\nexport { TicketApi };","import { DropDownList } from '@progress/kendo-react-dropdowns'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { Api } from '../../../redux/api/BaseApi';\nimport { UserApi } from '../../../redux/api/UserApi';\nimport { useReduxDispatch, useReduxSelector } from '../../../redux/hooks';\nimport * as TicketSlice from '../../../slices/TicketSlice';\nimport { ITicketOptions } from '../../../types/Ticket/ITicket';\n// import JsonTreeViewer from '../../Test/JsonTreeViewer';\n\nconst LogOptions = () => {\n const dispatch = useReduxDispatch();\n const { data: myLogOptions } = UserApi.useGetLogOptionsQuery()\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const [saveLogOptions] = UserApi.usePostLogOptionsMutation();\n const { logOptions } = useReduxSelector(state => state.ticketDetails);\n const options = useMemo(() => [\n { id: 0, text: \"View details\" },\n { id: 1, text: \"Pin to dock\" },\n { id: 2, text: \"Close \" + userProfile?.Phrases.CallPhrase },\n { id: 3, text: \"Log another (Blank)\" },\n { id: 4, text: \"Log another (Duplicate)\" },\n ], [userProfile?.Phrases.CallPhrase]);\n\n const [values, setValues] = useState([]);\n const [opened, setOpened] = useState(false);\n useEffect(() => {\n if (!logOptions) {\n const defaultOptions = options.filter(o => myLogOptions?.Options?.split(',').indexOf(o.id.toString()) > -1)\n setValues(defaultOptions)\n dispatch(TicketSlice.SetMyOptions(myLogOptions))\n //Initial Close option on ticket form.\n myLogOptions?.Options?.indexOf('2') > -1 && dispatch(TicketSlice.SetLogOptions({ Close: true } as ITicketOptions));\n } else {\n const defaultOptions = options.filter(o => logOptions?.Options?.split(',').indexOf(o.id.toString()) > -1)\n setValues(defaultOptions)\n }\n console.log('useEffect LogOptions', myLogOptions, logOptions, options);\n }, [dispatch, myLogOptions, logOptions, options])\n\n const handleSingleChange = (event) => {\n let foundItem = values.filter(v => v.id === event.value.id)\n\n let newArray = [...values] //clone\n\n if (foundItem?.length > 0) {\n newArray.splice(values.indexOf(foundItem[0]), 1)\n //remove\n setValues(newArray);\n }\n else {\n newArray = [...values, event.value]\n\n //If log another or log duplicate is selected the UNSELECT 'view details'\n if (event.value.id === 3)\n newArray = newArray.filter(n => n.id !== 0 && n.id !== 4);\n if (event.value.id === 4)\n newArray = newArray.filter(n => n.id !== 0 && n.id !== 3);\n if (event.value.id === 0)\n newArray = newArray.filter(n => n.id !== 3 && n.id !== 4);\n\n setValues(newArray);\n }\n\n\n //Update the ticket state\n let newOptions = newArray.map(n => n.id).join(',');\n\n dispatch(TicketSlice.SetMyOptions({ ...myLogOptions, Options: newOptions }))\n\n //Pin ticket\n let mustPin = newOptions.indexOf('1') > -1;\n let closeTicket = newOptions.indexOf('2') > -1;\n\n dispatch(TicketSlice.SetLogOptions({ Pin: mustPin, Close: closeTicket } as ITicketOptions));\n\n //post to persist settings in API.\n //console.log('post to persist settings in API', newOptions, logOptions);\n saveLogOptions({ ...myLogOptions, Options: newOptions });\n }\n\n const itemRender = (li, itemProps) => {\n let foundItem = values.filter(v => v.id === itemProps.dataItem[\"id\"])\n const itemChildren = (\n <span>\n <input type=\"checkbox\" checked={foundItem?.length > 0}\n onMouseDown={(e) => { e.preventDefault(); }}\n />\n {li.props.children}\n </span>\n );\n return React.cloneElement(li, li.props, itemChildren);\n }\n\n return (\n <div className='flex flex-wrap w-full justify-end content-center '>\n <div className='justify-end ver flex w-full'>\n <DropDownList opened={opened}\n onFocus={() => { console.log('onFocus'); setOpened(true) }}\n onBlur={() => { console.log('blur'); setOpened(false) }}\n title={values.map(v => v.text).join(', ')}\n value={!values?.length ? { text: 'Log options...' } : values?.length === 1 ? { text: values[0].text } : { text: `${values?.length} items selected` }}\n data={options}\n textField=\"text\"\n itemRender={itemRender}\n style={{ width: 190, marginLeft: 5 }}\n onChange={handleSingleChange}\n // footer={footer}\n />\n </div>\n {/* <div className='justify-end ver flex w-full'>\n {JSON.stringify(values)} \n <JsonTreeViewer data={logOptions} title=\"Log Options\" />\n\n </div> */}\n </div>\n )\n}\n\nexport default LogOptions","import { useEffect, useRef } from \"react\";\nimport { ISearchQuick, ISearchQuickResults } from \"../types/ISearch\";\nimport { NavItems } from \"../types/User/IUserProfile\";\n\nconst useFocusInput = () => {\n const ref = useRef<HTMLInputElement>(null);\n useEffect(() => {\n ref.current?.focus();\n });\n return ref;\n};\n\nconst useFocusTextArea = () => {\n const ref = useRef<HTMLTextAreaElement>(null);\n useEffect(() => {\n ref.current?.focus();\n });\n return ref;\n};\n\nfunction any(iterable) {\n for (let index = 0; index < iterable.length; index++) {\n if (iterable[index]) return true;\n }\n return false;\n}\n\nexport function trimChar(str, ch) {\n if (!str?.length) return str;\n var start = 0,\n end = str?.length;\n\n while (start < end && str[start] === ch) ++start;\n\n while (end > start && str[end - 1] === ch) --end;\n\n return start > 0 || end < str.length ? str.substring(start, end) : str;\n}\n\nconst isDate = function (date) {\n return date instanceof Date && !isNaN(date.valueOf());\n};\n\nconst mouseClickEvents = [\"mousedown\", \"click\", \"mouseup\"];\nfunction simulateMouseClick(element) {\n mouseClickEvents.forEach((mouseEventType) =>\n element.dispatchEvent(\n new MouseEvent(mouseEventType, {\n view: window,\n bubbles: true,\n cancelable: true,\n buttons: 1,\n })\n )\n );\n}\nfunction removeTrailingSlash(str) {\n return str.endsWith(\"/\") ? str.slice(0, -1) : str;\n}\n/** Return Object if it matches number in ID attribute. The array objects must have an attribute of ID. */\nfunction ObjectExistsInArray(arr: any[], ID: number) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i].ID === ID) {\n return { found: arr[i], index: i };\n }\n return null;\n }\n}\nexport function FlattenAndAddCategoryObjectsToQuickSearchResults(\n quickSearchObj: ISearchQuick\n) {\n const resultsArr: ISearchQuickResults[] = [];\n const maxResults = 50;\n let i = 0;\n quickSearchObj.Categories.forEach((category) => {\n const resultsCount =\n category.ResultCount > maxResults ? maxResults : category.ResultCount;\n resultsArr.push({\n Id: i,\n Display: category.Display,\n ResultCount: resultsCount,\n Url_Format: \"#\",\n isCategory: true,\n });\n i++;\n category.Results.slice(0, maxResults).forEach((result) => {\n resultsArr.push({\n ...result,\n Url_Format: category.Url_Format,\n isCategory: false,\n });\n });\n });\n return resultsArr;\n}\nexport function AddTextAndItemsAttrToNavItems(Nav_Items: NavItems[]) {\n return Nav_Items?.map((item1) => {\n return {\n ...item1,\n text: item1.Text,\n items: [...item1.Nav_Items]?.map((item2) => {\n return {\n ...item2,\n text: item2.Text,\n items: [...item2.Nav_Items]?.map((item3) => {\n return {\n ...item3,\n text: item3.Text,\n items: [...item3.Nav_Items].map((item4) => {\n return { ...item4, text: item4.Text }\n }),\n }\n }),\n };\n }),\n };\n });\n}\nexport function AddTextAndItemsAttrToHamburgerItems(Nav_Items: NavItems[]) {\n return Nav_Items.map((item1) => {\n return {\n ...item1,\n text: item1.Text,\n items: [...item1.Nav_Items]?.map((item2) => {\n return {\n ...item2,\n text: item2.Text,\n items: [...item2.Nav_Items]?.map((item3) => {\n return {\n ...item3,\n text: item3.Text,\n items: [...item3.Nav_Items]?.map((item4) => {\n return {\n ...item4,\n text: item4.Text,\n items: item4.Nav_Items.map(n4 => {\n return { text: n4.Text }\n })\n };\n }),\n };\n }),\n };\n }),\n };\n });\n}\n\nfunction getTicketStateClassName(state: string) {\n switch (state?.toLowerCase()) {\n case \"new\":\n return \"ticket-state-new\";\n case \"current\":\n return \"ticket-state-current\";\n case \"response late\":\n case \"resolve late\":\n return \"ticket-state-late\";\n case \"response at risk\":\n case \"resolve at risk\":\n return \"ticket-state-at-risk\";\n }\n\n return \"ticket-state-current\";\n}\n\nfunction toDigital(minutes, negativeBrackets?) {\n if (minutes === 0) return \"0:00\";\n if (!minutes) return \"\";\n let convert = minutes < 0 && negativeBrackets ? minutes * -1 : minutes;\n let digital =\n Math.floor(convert / 60) + \":\" + (convert % 60).toFixed().padStart(2, \"0\");\n\n return minutes < 0 && negativeBrackets ? `(${digital})` : digital;\n}\n\n///Converts Hours and Minutes to Minutes ie. 1:20 = 80min\nfunction toMinutes(time) {\n var strMin;\n var strHour;\n if (time.indexOf(\":\") > -1) {\n strHour = parseInt(time.substr(0, time.indexOf(\":\")));\n strMin = parseInt(time.substr(time.indexOf(\":\") + 1).padEnd(2, \"0\"));\n } else {\n strHour = parseInt(time);\n strMin = parseInt(\"0\");\n }\n var minutes = 0;\n var hours = 0;\n\n if (!isNaN(strMin)) {\n minutes = strMin;\n }\n if (!isNaN(strHour)) {\n hours = strHour;\n }\n\n return hours * 60 + minutes;\n}\n\nexport {\n toDigital,\n toMinutes,\n useFocusInput,\n useFocusTextArea,\n any,\n simulateMouseClick,\n ObjectExistsInArray,\n removeTrailingSlash,\n getTicketStateClassName,\n isDate,\n};\n","import React, { useEffect } from 'react'\nimport { formatDate } from '@progress/kendo-intl';\nimport {\n getSelectedState,\n Grid,\n GridColumn,\n GridSelectionChangeEvent,\n GridSortChangeEvent\n} from \"@progress/kendo-react-grid\";\nimport { getter } from \"@progress/kendo-react-common\";\nimport { GridCellProps } from '@progress/kendo-react-grid';\nimport { Link } from 'react-router-dom';\nimport { TextBox, Checkbox } from '@progress/kendo-react-inputs';\nimport { TicketSelectedProps } from '../../../types/Props/TicketSelectedProps';\nimport {\n filterBy, orderBy, SortDescriptor\n} from \"@progress/kendo-data-query\";\nimport { Api, useGetTenantQuery } from '../../../redux/api/BaseApi';\nimport { getTicketStateClassName } from '../../../utils/utils';\nconst TicketGrid = (props: TicketSelectedProps) => {\n const DATA_ITEM_KEY = \"ID\";\n const idGetter = getter(DATA_ITEM_KEY);\n const SELECTED_FIELD = \"selected\";\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const [filter, setFilter] = React.useState(null);\n const { data: tenant } = useGetTenantQuery()\n\n let primaryCol = props.primaryCol ? props.primaryCol : \"Company_Name\";\n //Sorting\n const initialSort: Array<SortDescriptor> = [\n { field: \"Call_Id\", dir: \"desc\" },\n ];\n const [sort, setSort] = React.useState(initialSort);\n\n ///Fires when a ticket is selected in the Grid\n const ticketSelected = (e) => {\n //console.log('TicketGrid',e);\n if (e.checked)\n props.onTicketSelected(e.value)\n else\n props.onTicketSelected(0)\n\n setSelectedState({ [e.value]: e.checked });\n }\n const [selectedState, setSelectedState] = React.useState<{\n [id: string]: boolean | number[];\n }>({ [props.selectedTicketId]: true });\n const ticketRowSelected = (event: GridSelectionChangeEvent) => {\n const newSelectedState = getSelectedState({\n event,\n selectedState: selectedState,\n dataItemKey: \"ID\",\n });\n\n setSelectedState(newSelectedState);\n\n props.onTicketSelected(event.dataItems[event.startRowIndex].ID);\n }\n const filterChanged = (e) => {\n console.log('filterchanged', e.value)\n let newFilter = {\n logic: \"or\",\n filters: [\n { field: \"Company_Name\", operator: \"contains\", value: e.value },\n { field: \"Project_Name\", operator: \"contains\", value: e.value },\n { field: \"Call_Desc\", operator: \"contains\", value: e.value },\n { field: \"ID\", operator: \"contains\", value: e.value },\n ],\n }\n setFilter(newFilter);\n }\n\n useEffect(() => {\n if (!props.selectedTicketId)\n setSelectedState({});\n }, [props.selectedTicketId])\n return (\n <>\n <div className=\"flex w-full mb-3\">\n <TextBox style={{ width: '70%' }} type={\"text\"} onChange={filterChanged} placeholder='Filter' />\n </div>\n <Grid onSelectionChange={ticketRowSelected}\n sortable={true}\n sort={sort}\n onSortChange={(e: GridSortChangeEvent) => {\n setSort(e.sort);\n }}\n selectable={{\n enabled: props.selectable\n }}\n selectedField={SELECTED_FIELD}\n data={orderBy(\n filterBy(props.data?.map((item) => ({\n ...item,\n [SELECTED_FIELD]: selectedState[idGetter(item)],\n })), filter),\n sort)}\n >\n {props.selectable &&\n <GridColumn width=\"40px\" sortable={false}\n cell={(props: GridCellProps) => {\n let fieldValue = props.dataItem[\"ID\"] || \"\";\n return (\n <>\n <td>\n <Checkbox radioGroup=\"ticket\" value={fieldValue} checked={props.dataItem[SELECTED_FIELD]} onChange={(e) => { e.syntheticEvent.preventDefault(); ticketSelected({ value: fieldValue, checked: e.value }) }} />\n </td>\n </>\n );\n }}\n />}\n\n <GridColumn field=\"ID\" title={`${userProfile.Phrases.CallPhrase} #`} width=\"80px\"\n cell={(props: GridCellProps) => {\n let fieldValue = props.dataItem[props.field] || \"\";\n return (\n <td className={getTicketStateClassName(props.dataItem[\"Call_State\"])}>\n <Link className='ticket-link'\n target={\"_blank\"}\n to={`${tenant?.Tenant_Url}/calls/callhistory.aspx?call_id=${fieldValue}`}\n >{fieldValue}</Link>\n </td>\n );\n }}\n />\n <GridColumn title=\"Opened\" width=\"100px\" cell={(props: GridCellProps) => {\n return (\n <td onClick={() => ticketSelected({ value: props.dataItem[\"ID\"], checked: true })}>\n {formatDate(new Date(props.dataItem[\"Open_Dt\"] + 'Z'), \"g\")}\n </td>\n );\n }} />\n <GridColumn field={primaryCol} title={`${userProfile.Phrases.Client} / ${userProfile.Phrases.Project}`}\n cell={(props: GridCellProps) => {\n return (\n <td onClick={() => ticketSelected({ value: props.dataItem[\"ID\"], checked: true })}>\n <b>{props.dataItem[primaryCol]}</b>\n <div>{props.dataItem[\"Project_Name\"]}</div>\n </td>\n );\n }}\n />\n <GridColumn field=\"Call_Desc\" title=\"Description\" />\n </Grid>\n </>\n )\n}\n\nexport default TicketGrid","import { Checkbox } from \"@progress/kendo-react-inputs\";\nimport { PanelBar, PanelBarItem } from \"@progress/kendo-react-layout\";\n// import { PanelBar, PanelBarItem } from \"@progress/kendo-react-layout\";\nimport { FunctionComponent } from \"react\"\nimport { Api } from \"../../../redux/api/BaseApi\";\nimport { TicketApi } from \"../../../redux/api/TicketApi\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../redux/hooks\";\nimport { SimpleSpinny } from \"../../Nav/Spinny\";\nimport TicketGrid from \"../GridControls/TicketGrid\";\nimport { SetHierarchy } from \"../../../slices/TicketSlice\";\n\nconst TicketHierarchy: FunctionComponent<HierarchyProps> = props => {\n const dispatch = useReduxDispatch();\n const { ticket } = useReduxSelector(state => state.ticketDetails);\n const isChild = ticket.Parent_Call_Id || ticket.Parent_Call_Id === 0\n const { data: parentTickets, isLoading } = TicketApi.useGetOpenParentTicketsQuery(undefined, { skip: !isChild });\n const isParent = ticket.Is_Parent;\n\n\n const handleParentChange = (event) => {\n //props.onParentChanged(event.value);\n dispatch(SetHierarchy({ IsParent: event.value, Parent_Ticket_Id: null }));\n };\n\n const handleChildChange = (event) => {\n console.log('handleChildChange', event)\n if (!event.value)\n dispatch(SetHierarchy({ Parent_Ticket_Id: null, IsParent: false }));\n else\n dispatch(SetHierarchy({ Parent_Ticket_Id: 0, IsParent: false }));\n };\n const onTicketSelected = (Id?: number) => {\n console.log('onTicketSelected', Id)\n dispatch(SetHierarchy({ Parent_Ticket_Id: Id, IsParent: false }));\n };\n const childTicketLabel = ticket.Parent_Call_Id > 0 ? `Child to ${ticket.Parent_Call_Id}` : \"Child to ...\"\n const { data: userProfile } = Api.useGetUserProfileQuery();\n\n\n return (\n <PanelBar expandMode='single'>\n <PanelBarItem selected={true} expanded={true} title={`${userProfile.Phrases.CallPhrase} hierarchy`} >\n {/* Parent_Call_Id:{ticket.Parent_Call_Id} - isChild{isChild} */}\n <div className={\"k-form-field p-3 w-1/2 block text-xl\"}>\n <Checkbox\n size={\"large\"}\n checked={isParent}\n onChange={handleParentChange}\n label={\"Parent\"}\n />\n </div>\n <div className={\"k-form-field p-3 w-1/2 block text-xl\"}>\n <Checkbox\n size={\"large\"}\n checked={isChild}\n onChange={handleChildChange}\n label={childTicketLabel}\n />\n </div>\n {isChild &&\n <fieldset className={\"k-form-fieldset\"}>\n <div className=\"m-3 hierarchy-grid\">\n {isLoading ? <SimpleSpinny /> :\n <TicketGrid selectable={true} data={parentTickets} onTicketSelected={onTicketSelected} selectedTicketId={ticket.Parent_Call_Id} />\n }\n </div>\n </fieldset>\n }\n </PanelBarItem>\n </PanelBar>\n )\n}\n\ntype HierarchyProps = {\n onParentChanged?: (e: any) => void;\n onChildChanged?: (e: any) => void;\n}\n\nexport default TicketHierarchy;\n","import { PanelBar, PanelBarItem } from '@progress/kendo-react-layout';\nimport React from 'react'\nimport { TicketApi } from '../../../redux/api/TicketApi';\nimport { useReduxSelector } from '../../../redux/hooks';\nimport TicketGrid from './TicketGrid';\n\n\nconst ExistingTickets = (props) => {\n const { ticket } = useReduxSelector(state => state.ticketDetails);\n const { data: userProfile } = TicketApi.useGetUserProfileQuery();\n const { data } = TicketApi.useGetOpenEndUserTicketsQuery(ticket.Company_Contact_Uid, { skip: !ticket.Company_Contact_Uid })\n const { data: clientTickets } = TicketApi.useGetOpenTicketsQuery({ companyId: ticket.Company_Id }, { skip: !ticket.Company_Id })\n return (\n <>\n <PanelBar expandMode='single'>\n <PanelBarItem selected={true} expanded={true} title={`(${data?.length}) ${ticket.Contact_Name} ${userProfile.Phrases.CallPhrase}s`} >\n <TicketGrid data={data} />\n </PanelBarItem>\n <PanelBarItem selected={true} expanded={false} title={`(${clientTickets?.length}) ${ticket.Company_Name} ${userProfile.Phrases.CallPhrase}s`} >\n <TicketGrid data={clientTickets} primaryCol=\"Contact_Name\" />\n </PanelBarItem>\n </PanelBar>\n\n </>\n )\n}\n\nexport default ExistingTickets","import * as React from 'react';\nimport { GridColumnMenuSort, GridColumnMenuFilter, GridColumnMenuItemGroup, GridColumnMenuItem, GridColumnMenuItemContent } from '@progress/kendo-react-grid';\nexport const GridColumnOptions = props => {\n const [columns, setColumns] = React.useState(props.columns);\n const [columnsExpanded, setColumnsExpanded] = React.useState(false);\n const [filterExpanded, setFilterExpanded] = React.useState(false);\n const onToggleColumn = id => {\n const newColumns = columns.map((column, idx) => {\n return idx === id ? {\n ...column,\n show: !column.show\n } : column;\n });\n setColumns(newColumns);\n };\n const onReset = event => {\n event.preventDefault();\n const newColumns = props.columns.map(col => {\n return {\n ...col,\n show: true\n };\n });\n setColumns(newColumns);\n props.onColumnsSubmit(newColumns);\n if (props.onCloseMenu) {\n props.onCloseMenu();\n }\n };\n const onSubmit = event => {\n if (event) {\n event.preventDefault();\n }\n props.onColumnsSubmit(columns);\n if (props.onCloseMenu) {\n props.onCloseMenu();\n }\n };\n const onMenuItemClick = () => {\n const value = !columnsExpanded;\n setColumnsExpanded(value);\n setFilterExpanded(value ? false : filterExpanded);\n };\n const onFilterExpandChange = value => {\n setFilterExpanded(value);\n setColumnsExpanded(value ? false : columnsExpanded);\n };\n const oneVisibleColumn = columns.filter(c => c.show).length === 1;\n return <div>\n <GridColumnMenuSort {...props} />\n <GridColumnMenuFilter {...props} onExpandChange={onFilterExpandChange} expanded={filterExpanded} />\n <GridColumnMenuItemGroup>\n <GridColumnMenuItem title={'Columns'} iconClass={'k-i-columns'} onClick={onMenuItemClick} />\n <GridColumnMenuItemContent show={columnsExpanded}>\n <div className={'k-column-list-wrapper'}>\n <form onSubmit={onSubmit} onReset={onReset}>\n <div className={'k-column-list'}>\n {columns.map((column, idx) => <div key={idx} className={'k-column-list-item'}>\n <span>\n <input id={`column-visiblity-show-${idx}`} className=\"k-checkbox k-checkbox-md k-rounded-md\" type=\"checkbox\" readOnly={true} disabled={column.show && oneVisibleColumn} checked={column.show} onClick={() => {\n onToggleColumn(idx);\n }} />\n <label htmlFor={`column-visiblity-show-${idx}`} className=\"k-checkbox-label\" style={{\n userSelect: 'none'\n }}>\n {column.title}\n </label>\n </span>\n </div>)}\n </div>\n <div className={'k-actions k-hstack k-justify-content-stretch'}>\n <button type={'reset'} className={'k-button k-button-md k-rounded-md k-button-solid k-button-solid-base'}>Reset</button>\n <button className={'k-button k-button-md k-rounded-md k-button-solid k-button-solid-primary'}>Save</button>\n </div>\n </form>\n </div>\n </GridColumnMenuItemContent>\n </GridColumnMenuItemGroup>\n </div>;\n};","import { Grid, GridColumn as Column, GridColumnMenuGroup, GridColumnReorderEvent, GridDataStateChangeEvent, GridSortChangeEvent } from '@progress/kendo-react-grid'\nimport React, { useEffect, useMemo } from 'react'\nimport { Api } from \"../../redux/api/BaseApi\";\nimport { AssetApi } from \"../../redux/api/AssetApi\";\nimport { UserApi } from \"../../redux/api/UserApi\";\nimport { GridColumnOptions } from './GridColumnOptions';\nimport { nanoid } from 'nanoid';\nimport { Checkbox, TextBox, TextBoxChangeEvent } from '@progress/kendo-react-inputs';\nimport { CompositeFilterDescriptor, process, SortDescriptor, State } from '@progress/kendo-data-query';\nimport { IAsset } from '../../types/Asset/IAsset';\nimport { ISetting } from '../../types/User/ISetting';\n\nexport const AssetGrid = (props: AssetGridProps) => {\n const { data: userGridState } = UserApi.useGetSettingQuery(props.persistedSettingId, { skip: !props.persistedSettingId })\n const [saveSetting] = UserApi.useSaveSettingMutation()\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const currentIds = props.selectedAssets\n const { data } = AssetApi.useGetAssetsQuery({ companyId: props.companyId, locationId: props.locationId, contactId: props.locationId ? 0 : props.contactId }, { skip: !props.companyId })\n const bindData = props.locationId ? data?.filter(d => d.Contact_Id !== props.contactId) : data\n const columns = [\n {\n title: userProfile?.Phrases.Device,\n field: \"Device_Name\",\n show: true,\n filter: \"text\",\n orderIndex: 0\n },\n {\n title: userProfile?.Phrases.Manufacturer,\n field: \"Manuf_Name\",\n show: true,\n filter: \"text\",\n orderIndex: 1\n },\n {\n title: userProfile?.Phrases.Model,\n field: \"Model_Name\",\n show: true,\n filter: \"text\",\n orderIndex: 2\n },\n {\n title: userProfile?.Phrases.SerialNumber,\n field: \"Serial_Number\",\n show: true,\n filter: \"text\",\n orderIndex: 3\n },\n {\n title: userProfile?.Phrases.Memory,\n field: \"Memory\",\n show: true,\n filter: \"text\",\n orderIndex: 4\n },\n {\n title: userProfile?.Phrases.Processor,\n field: \"Processor\",\n show: false,\n filter: \"text\",\n orderIndex: 5\n },\n {\n title: userProfile?.Phrases.AssetCustom1,\n field: \"Custom1\",\n show: false,\n filter: \"text\",\n orderIndex: 6\n },\n {\n title: userProfile?.Phrases.AssetCustom2,\n field: \"Custom2\",\n show: false,\n filter: \"text\",\n orderIndex: 7\n },\n {\n title: userProfile?.Phrases.AssetCustom3,\n field: \"Custom3\",\n show: false,\n filter: \"text\",\n orderIndex: 8\n },\n {\n title: userProfile?.Phrases.AssetCustom4,\n field: \"Custom4\",\n show: false,\n filter: \"text\",\n orderIndex: 9\n },\n {\n title: userProfile?.Phrases.AssetCustom5,\n field: \"Custom5\",\n show: false,\n filter: \"text\",\n orderIndex: 10\n },\n ];\n\n //The user's saved grid state and columns\n const userStateFromSettings = userGridState?.Big_String_Value ? JSON.parse(userGridState?.Big_String_Value) : undefined;\n const userState = (userStateFromSettings ? userStateFromSettings : { state: { take: 20, skip: 0 }, columns: null }) as { state: State, columns: [{ field: string, orderIndex: number }] }\n\n //The user's chosen columns\n const userColumns = columns.map((c) => {\n let userColIndex = userState?.columns?.map(uc => uc.field).indexOf(c.field)\n\n return (userState?.columns?.length ?\n userColIndex > -1 ? { ...c, show: true, orderIndex: userState?.columns[userColIndex].orderIndex } : { ...c, show: false }\n : c)\n })\n const [dataState, setDataState] = React.useState<State>(userState?.state || {});\n const [stateColumns, setStateColumns] = React.useState(userColumns);\n\n //Update the grid state when the user's settings are loaded.\n useEffect(() => {\n //never override the page number or filters\n setDataState({ ...userState?.state, skip: dataState?.skip, filter: dataState?.filter })\n setStateColumns(userColumns)\n }, [userGridState])\n\n\n const onColumnsSubmit = (columnsState) => {\n setStateColumns(columnsState);\n\n persistUserState(dataState, columnsState);\n };\n\n const assetSelected = (e: IAsset) => {\n let newArray = data.filter(ass => props.selectedAssets?.indexOf(ass.ID) > -1);\n let found = newArray?.filter(a => a.ID === e.ID)\n if (found?.length)\n newArray.splice(newArray?.indexOf(found[0]), 1)\n else\n newArray.push(e);\n\n props.onChange({ value: newArray });\n };\n\n const dataStateChange = (event: GridDataStateChangeEvent) => {\n setDataState(event.dataState);\n\n persistUserState(event.dataState, null);\n };\n\n const persistUserState = (dataState: State, columnsState: any[]) => {\n //Save to user templateSettings\n if (props.persistedSettingId) {\n //, filter: undefined\n saveSetting({ ID: 0, Contact_Id: userProfile.Id, Setting_Id: props.persistedSettingId, Big_String_Value: JSON.stringify({ state: { ...dataState, filter: undefined, skip: 0 }, columns: (columnsState || stateColumns).filter(c => c.show).map(m => { return { field: m.field, orderIndex: m.orderIndex } }) }) } as ISetting)\n }\n }\n\n const columnReorder = (e: GridColumnReorderEvent) => {\n let newColumns = e.columns.filter(f => f.field).map(c => { return { title: c.title, field: c.field, filter: c.filter, orderIndex: c.orderIndex, show: true } })\n setStateColumns(newColumns);\n persistUserState(dataState, newColumns);\n }\n\n const filterChanged = (e: TextBoxChangeEvent) => {\n let newFilter = {\n logic: \"or\",\n operator: \"eq\",\n filters: e.value ? columns.map(c => { return { field: c.field, operator: \"contains\", value: e.value } }) : []\n } as CompositeFilterDescriptor\n let newState = { ...dataState, filter: newFilter, skip: 0 }\n setDataState(newState)\n\n persistUserState(newState, null);\n }\n\n const columnsToRender = stateColumns?.map(\n (column, idx) =>\n column.show && (\n <Column\n key={idx}\n orderIndex={column.orderIndex}\n field={column.field}\n title={column.title}\n //filter={column.filter}\n columnMenu={(props) => (\n <>\n <GridColumnMenuGroup {...props} />\n <GridColumnOptions\n {...props}\n columns={userColumns}\n onColumnsSubmit={onColumnsSubmit}\n />\n </>\n )}\n />\n )\n )\n\n return (\n <>\n <div className=\"flex w-full mb-3\">\n <TextBox style={{ width: '70%' }} type={\"text\"} onChange={filterChanged} placeholder='Filter' />\n </div>\n <Grid\n data={process(bindData || [], dataState)}\n {...dataState}\n onDataStateChange={dataStateChange}\n onColumnReorder={columnReorder}\n sortable={true}\n groupable={true}\n pageable={true}\n reorderable={true}\n pageSize={50}\n >\n {/* <Column width={100} locked={true} reorderable={false}\n key={nanoid()}\n field=\"Contact_Id\" /> */}\n <Column width={50} locked={true} reorderable={false}\n key={nanoid()}\n field=\"\"\n cell={(e) => {\n if (e.rowType === 'groupHeader') return <></>;\n return (\n <td style={{ textAlign: 'center' }}>\n <Checkbox checked={currentIds?.indexOf(e.dataItem[\"ID\"]) > -1} onChange={() => assetSelected(e.dataItem)} />\n </td>)\n }}\n />\n {columnsToRender}\n </Grid>\n {/* columnsToRender: {columnsToRender?.length} */}\n {/* <div>userColumns:{JSON.stringify(userColumns?.filter(u => u.show).map(c => c.field))} - {userColumns?.length}</div> */}\n {/* <div>stateColumns:{JSON.stringify(stateColumns.filter(u => u.show).map(c => c.field))}</div>\n <div>dataState:{JSON.stringify(dataState)}</div>\n <div>userState:{JSON.stringify(userState)}</div> */}\n {/* <div>userGridState?.Big_String_Value:{userGridState?.Big_String_Value}</div> */}\n\n </>\n )\n}\n\n\n\nexport interface AssetGridProps {\n persistedSettingId?: number\n contactId?: number\n locationId?: number\n companyId?: number\n onChange?: (e: { value: IAsset[] }) => void\n selectedAssets: number[]\n}","import { AssetGrid } from \"../../Asset/AssetGrid\"\nimport { PanelBar, PanelBarItem } from '@progress/kendo-react-layout';\nimport { Api } from \"../../../redux/api/BaseApi\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../redux/hooks\";\nimport { SetAssets } from \"../../../slices/TicketSlice\";\nimport { IAsset } from \"../../../types/Asset/IAsset\";\nimport { AssetApi } from \"../../../redux/api/AssetApi\";\n\nconst TicketAssets = (props) => {\n const dispatch = useReduxDispatch();\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { ticket } = useReduxSelector(state => state.ticketDetails);\n const { data: assets } = AssetApi.useGetAssetsQuery({ contactId: 0, locationId: ticket.Company_Address_Id }, { skip: !ticket.Company_Address_Id })\n const contactAssets = assets?.filter((a) => a.Contact_Id === ticket.Company_Contact)\n const locationAssets = assets?.filter((a) => a.Contact_Id !== ticket.Company_Contact)\n const selectedAssetIds = ticket?.Assets?.map(a => a.Asset_Id);\n const selectedLocationAssetCount = ticket?.Assets?.filter(a => a.Contact_Id !== ticket.Company_Contact).length;\n const selectedContactAssetCount = ticket?.Assets?.filter(a => a.Contact_Id === ticket.Company_Contact).length;\n const assetSelected = (e: { value: IAsset[] }) => {\n dispatch(SetAssets(e.value.map((a) => {\n return { Call_Id: ticket.ID, Asset_Id: a.ID, ID: 0, Contact_Id: a.Contact_Id }\n })));\n }\n return (\n <>\n {/* Assets:{JSON.stringify(ticket?.Assets?.map(a => a.Asset_Id))} */}\n <PanelBar expandMode='single'>\n <PanelBarItem selected={true} expanded={true} title={`${ticket.Contact_Name} ${userProfile.Phrases.Asset}s (${selectedContactAssetCount} of ${contactAssets?.length || 0} selected)`} >\n <AssetGrid contactId={ticket.Company_Contact} companyId={ticket.Company_Id} onChange={assetSelected} selectedAssets={selectedAssetIds} persistedSettingId={130} />\n </PanelBarItem>\n <PanelBarItem selected={true} expanded={false} title={`${ticket.Address_Name || ''} ${userProfile.Phrases.Asset}s (${selectedLocationAssetCount} of ${locationAssets?.length || 0} selected)`} >\n <AssetGrid contactId={ticket.Company_Contact} locationId={ticket.Company_Address_Id} companyId={ticket.Company_Id} onChange={assetSelected} selectedAssets={selectedAssetIds} persistedSettingId={130} />\n </PanelBarItem>\n </PanelBar>\n </>\n )\n}\n\nexport default TicketAssets;","import { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport React from 'react'\nimport { Api } from '../../redux/api/BaseApi';\nimport { useReduxSelector } from '../../redux/hooks';\nimport {\n Label\n} from \"@progress/kendo-react-labels\";\n\nexport default function Timeline (props:FieldRenderProps) {\n const {ticket} = useReduxSelector(state=>state.ticketDetails);\n const {data: imageData} = Api.useGetTimelineImageQuery({projectId:ticket.Project_Id, priorityId: ticket.Priority_Id, slaId:ticket.SLA_Id});\n return (\n <FieldWrapper>\n <Label\n editorId={props.id}\n editorValid={props.valid}\n editorDisabled={props.disabled}\n optional={props.optional}\n >\n {props.label}\n </Label>\n <img alt='timeline' src={imageData}></img>\n </FieldWrapper>\n )\n}\n ","import React, { FunctionComponent, useRef } from 'react'\nimport { Field } from '../../../types/Form/IForm'\nimport { DatePicker, DateTimePicker } from \"@progress/kendo-react-dateinputs\";\nimport { FieldRenderProps } from '@progress/kendo-react-form';\n\nexport const DateField: FunctionComponent<FieldRenderProps> = props => {\n const { field, value, ...others } = props;\n const defVal = field?.VALUES?.length > 0 ? new Date(field?.VALUES[0]) : undefined //props.ConfigSettings?.Default === \"2\" ? new Date(Date.parse(props.ConfigSettings?.DefaultValue)) : (props.ConfigSettings?.Default === \"1\" ? new Date() : null);\n const wrapper = useRef();\n const onBlur = (e) => {\n let fieldChange = { ...field, VALUES: [e.target.value] }\n props.onChange({ value: fieldChange });\n }\n // defaultValue={defVal}\n if (field.ConfigSettings?.Display === \"1\")\n return <DateTimePicker {...others} onBlur={onBlur} />\n else\n return (\n <div ref={wrapper}>\n {/* {JSON.stringify(defVal)} */}\n <DatePicker {...others} popupSettings={{ appendTo: wrapper.current, popupClass: 'z500' }} onBlur={onBlur} />\n </div>\n\n )\n\n}\n","import { DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns'\nimport { Field, FieldRenderProps, } from '@progress/kendo-react-form';\nimport React, { FunctionComponent, useEffect, useRef, useState } from 'react'\nimport { IOption } from '../../../types/Form/IForm';\n\ntype DropdownState = {\n isOpen: boolean;\n data: IOption[];\n value: IOption;\n select?: IOption;\n}\nconst DropdownField: FunctionComponent<FieldRenderProps> = formRenderProps => {\n const { field,\n value,\n touched,\n ...others\n } = formRenderProps;\n const activeItems: IOption[] = field.Options.filter(o => o.Enabled)\n const currentValues = field?.VALUES?.length > 0 ? activeItems.filter(i => field?.VALUES.indexOf(i.UID) > -1) : undefined;\n const maxDepth = field?.ConfigSettings?.MaxDepth;\n\n //Cascading field\n const parentItems = activeItems.filter(i => i.Parent_UID == '00000000-0000-0000-0000-000000000000')\n const [topLevelOptions, setTopLevelOptions] = useState<DropdownState>({ isOpen: false, data: parentItems, value: null, select: null });\n const [secondLevelOptions, setSecondLevelOptions] = useState<DropdownState>({ isOpen: false, data: [], value: null, select: null });\n const [thirdLevelOptions, setThirdLevelOptions] = useState<DropdownState>({ isOpen: false, data: [], value: null, select: null });\n const [fourthLevelOptions, setFourthLevelOptions] = useState<DropdownState>({ isOpen: false, data: [], value: null, select: null });\n const [fifthLevelOptions, setFifthLevelOptions] = useState<DropdownState>({ isOpen: false, data: [], value: null, select: null });\n\n //const defaultOption = activeItems.filter(o=> o.UID === field.ConfigSettings?.Default);\n const fieldChanged = (e) => {\n //console.log('fieldChanged',e);\n let fieldChange = { ...field, VALUES: [e.value.UID] }\n formRenderProps.onChange({ value: fieldChange });\n }\n const multiFieldChanged = (e) => {\n let fieldChange = { ...field, VALUES: e.value.map(v => v.UID) }\n formRenderProps.onChange({ value: fieldChange });\n }\n const parentChanged = (event) => {\n let fieldChange = { ...field, VALUES: [event.value.UID].filter(v => v !== undefined && v !== null) }\n formRenderProps.onChange({ value: fieldChange });\n\n }\n const secondLevelChanged = (event) => {\n let fieldChange = { ...field, VALUES: [topLevelOptions.value.UID, event.value.UID].filter(v => v !== undefined && v !== null) }\n formRenderProps.onChange({ value: fieldChange });\n }\n const thirdLevelChanged = (e) => {\n let fieldChange = { ...field, VALUES: [topLevelOptions.value?.UID, secondLevelOptions.value?.UID, e.value.UID].filter(v => v !== undefined && v !== null) }\n formRenderProps.onChange({ value: fieldChange });\n }\n const fourthLevelChanged = (e) => {\n let fieldChange = { ...field, VALUES: [topLevelOptions.value?.UID, secondLevelOptions.value?.UID, thirdLevelOptions.value?.UID, e.value.UID].filter(v => v !== undefined && v !== null) }\n formRenderProps.onChange({ value: fieldChange });\n }\n\n const fifthLevelChanged = (e) => {\n let fieldChange = { ...field, VALUES: [topLevelOptions.value?.UID, secondLevelOptions.value?.UID, thirdLevelOptions.value?.UID, fourthLevelOptions.value?.UID, e.value.UID].filter(v => v !== undefined && v !== null) }\n formRenderProps.onChange({ value: fieldChange });\n //setFifthLevelOptions((o) => o = {...o, value:e.value});\n }\n\n const blur = (level) => {\n if (level === 2) { setSecondLevelOptions((e) => e = { ...e, isOpen: false }); }\n if (level === 3) { setThirdLevelOptions((e) => e = { ...e, isOpen: false }); }\n if (level === 4) { setFourthLevelOptions((e) => e = { ...e, isOpen: false }); }\n if (level === 5) { setFifthLevelOptions((e) => e = { ...e, isOpen: false }); }\n }\n const open = (level) => {\n if (level === 2) { setSecondLevelOptions((e) => e = { ...e, isOpen: true }); }\n if (level === 3) { setThirdLevelOptions((e) => e = { ...e, isOpen: true }); }\n if (level === 4) { setFourthLevelOptions((e) => e = { ...e, isOpen: true }); }\n if (level === 5) { setFifthLevelOptions((e) => e = { ...e, isOpen: true }); }\n }\n const wrapper = useRef();\n //Reverse fill the dropdowns based on the selected value.\n useEffect(() => {\n const option1 = activeItems.filter(i => i.UID === field.VALUES[0])\n const option2 = activeItems.filter(i => i.UID === field.VALUES[1])\n const option3 = activeItems.filter(i => i.UID === field.VALUES[2])\n const option4 = activeItems.filter(i => i.UID === field.VALUES[3])\n const option5 = activeItems.filter(i => i.UID === field.VALUES[4])\n\n //const level1Items = activeItems?.filter(s=>(option1?.length > 0 ? s.Parent_UID == option1[0].UID : null));\n const level2Items = activeItems?.filter(s => (option1?.length > 0 ? s.Parent_UID === option1[0].UID : null));\n const level3Items = activeItems?.filter(s => (option2?.length > 0 ? s.Parent_UID === option2[0].UID : null));\n const level4Items = activeItems?.filter(s => (option3?.length > 0 ? s.Parent_UID === option3[0].UID : null));\n const level5Items = activeItems?.filter(s => (option4?.length > 0 ? s.Parent_UID === option4[0].UID : null));\n\n const select2 = { Value: (level2Items?.length > 0 ? 'Select' : option1?.length > 0 ? '(None)' : null) } as IOption\n const select3 = { Value: (level3Items?.length > 0 ? 'Select' : option2?.length > 0 ? '(None)' : null) } as IOption\n const select4 = { Value: (level4Items?.length > 0 ? 'Select' : option3?.length > 0 ? '(None)' : null) } as IOption\n const select5 = { Value: (level5Items?.length > 0 ? 'Select' : option4?.length > 0 ? '(None)' : null) } as IOption\n\n setTopLevelOptions((e) => e = { ...e, value: (option1?.length > 0 ? option1[0] : null) });\n setSecondLevelOptions((e) => e = { ...e, data: level2Items, value: (option2?.length > 0 ? option2[0] : null), select: select2 });\n setThirdLevelOptions((e) => e = { ...e, data: level3Items, value: (option3?.length > 0 ? option3[0] : null), select: select3 });\n setFourthLevelOptions((e) => e = { ...e, data: level4Items, value: (option4?.length > 0 ? option4[0] : null), select: select4 });\n setFifthLevelOptions((e) => e = { ...e, data: level5Items, value: (option5?.length > 0 ? option5[0] : null), select: select5 });\n }, [field.VALUES]);\n\n if (field.ConfigSettings?.Display === \"0\") {\n //Dropdown\n return (\n <div ref={wrapper}>\n <DropDownList {...others} popupSettings={{ className: \"z500\" }} value={currentValues?.length ? currentValues[0] : undefined} onChange={fieldChanged} defaultItem={{ Value: \"Select\" }} data={activeItems} textField=\"Value\" dataItemKey='UID' />\n </div>)\n }\n else if (field.ConfigSettings?.Display === \"1\") {\n //Multi select\n return (\n <div ref={wrapper}>\n <MultiSelect {...others} popupSettings={{ className: \"z500\" }} value={currentValues} onChange={multiFieldChanged} data={field.Options} textField=\"Value\" dataItemKey='UID' />\n </div>\n )\n }\n else if (field.ConfigSettings?.Display === \"2\") {\n //Cascading dropdowns\n return (\n <div ref={wrapper}>\n {/* {JSON.stringify(others)} */}\n <DropDownList popupSettings={{ className: \"z500\" }} value={topLevelOptions.value} onChange={parentChanged} onOpen={() => open(1)} defaultItem={{ Value: \"Select\" }} data={topLevelOptions.data} textField=\"Value\" dataItemKey='UID' />\n {maxDepth > 1 && <DropDownList popupSettings={{ className: \"z500\" }} defaultItem={secondLevelOptions.select} value={secondLevelOptions.value} onChange={secondLevelChanged} opened={secondLevelOptions?.isOpen} onOpen={() => open(2)} onClose={() => blur(2)} onBlur={() => blur(2)} data={secondLevelOptions?.data} textField=\"Value\" dataItemKey='UID' />}\n {maxDepth > 2 && <DropDownList popupSettings={{ className: \"z500\" }} defaultItem={thirdLevelOptions.select} value={thirdLevelOptions.value} onChange={thirdLevelChanged} opened={thirdLevelOptions?.isOpen} onOpen={() => open(3)} onClose={() => blur(3)} onBlur={() => blur(3)} data={thirdLevelOptions?.data} textField=\"Value\" dataItemKey='UID' />}\n {maxDepth > 3 && <DropDownList popupSettings={{ className: \"z500\" }} defaultItem={fourthLevelOptions.select} value={fourthLevelOptions.value} onChange={fourthLevelChanged} opened={fourthLevelOptions?.isOpen} onOpen={() => open(4)} onClose={() => blur(4)} onBlur={() => blur(4)} data={fourthLevelOptions?.data} textField=\"Value\" dataItemKey='UID' />}\n {maxDepth > 4 && <DropDownList popupSettings={{ className: \"z500\" }} defaultItem={fifthLevelOptions.select} value={fifthLevelOptions.value} onChange={fifthLevelChanged} opened={fifthLevelOptions?.isOpen} onOpen={() => open(5)} onClose={() => blur(5)} onBlur={() => blur(5)} data={fifthLevelOptions?.data} textField=\"Value\" dataItemKey='UID' />}\n </div>\n )\n }\n return <></>\n}\n\nexport default DropdownField;","import React, { FunctionComponent } from 'react'\nimport { NumericTextBox } from \"@progress/kendo-react-inputs\";\nimport { Hint } from \"@progress/kendo-react-labels\";\nimport { FieldRenderProps } from '@progress/kendo-react-form';\n\nconst NumericField: FunctionComponent<FieldRenderProps> = formRenderProps => {\n const {field} = formRenderProps;\n\n let format = \"n\" + field.ConfigSettings?.Decimal;\n if(field.Field_Type_Id === 9){format = \"c2\"} //Currency\n //if(field.Field_Type_Id === 5)\n const minVal = field.ConfigSettings?.MinValue || undefined;\n const maxVal = field.ConfigSettings?.MaxValue || 2147483647;\n const currentValue = field?.VALUES?.length > 0 ? field.VALUES[0] : undefined;\n\n const onBlur = (e) =>{\n console.log(e.target.value);\n let fieldChange = {...field, VALUES:[e.target.value]}\n formRenderProps.onChange({value:fieldChange});\n }\n return (\n <>\n {/* default:{minVal} - {maxVal} - {format} */}\n <NumericTextBox defaultValue={currentValue} onBlur={onBlur} spinners={false} format={format} min={minVal} max={maxVal} />\n { minVal && maxVal &&\n <Hint direction={\"end\"}>\n range {minVal} - {maxVal}\n </Hint>\n }\n </>\n )\n}\n\nexport default NumericField;","import { Input, TextArea } from '@progress/kendo-react-inputs'\nimport { Hint } from \"@progress/kendo-react-labels\";\nimport { Field as CustomField, IField } from '../../../types/Form/IForm'\nimport { Field, FieldRenderProps, } from '@progress/kendo-react-form';\nimport React, { FunctionComponent } from 'react'\n\nconst TextField: FunctionComponent<FieldRenderProps> = formRenderProps => {\n const { field, companyId, ...others } = formRenderProps;\n const currentValue = field?.VALUES?.length > 0 ? field.VALUES[0] : null;\n const [value, setValue] = React.useState(currentValue)// ? currentValue : field.ConfigSettings?.Default);\n const [currentField, setCurrentField] = React.useState<IField>(field);\n const max = field.ConfigSettings.Max;\n const handleChange = (e) => {\n\n setValue(e.value);\n\n console.log('chnage', e.value, value)\n\n };\n const blurry = (e) => {\n //Bubble the event up to the ticket component so the data can be saved\n const changeField = { ...currentField };\n changeField.VALUES = [value];\n\n formRenderProps.onChange({ value: changeField });\n }\n if (field.ConfigSettings?.Display == \"1\")\n return (\n <>\n <TextArea\n {...others}\n onChange={handleChange}\n onBlur={blurry}\n valid={true}\n id='txtField'\n disabled={false}\n maxLength={max}\n rows={4}\n value={value}\n\n />\n {max &&\n <Hint direction={\"end\"}>\n {value ? value.length : 0} / {max}\n </Hint>\n }\n </>)\n else\n return (\n <>\n <Input {...others} maxLength={max} onChange={handleChange} value={value} onBlur={blurry} />\n {max &&\n <Hint direction={\"end\"}>\n {value ? value.length : 0} / {max}\n </Hint>\n }\n </>\n )\n\n}\n\nexport default TextField;","import { Api } from './BaseApi'\nimport { IClient } from '../../types/Client/IClient';\nimport { IClientType } from '../../types/Client/IClientType';\nimport { IOffice } from '../../types/Client/IOffice';\n\nconst ClientApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getClient: build.query<IClient, number>({\n query: (Id) => `Client/${Id}`,\n providesTags: [\"GetClient\"],\n }),\n getMyClients: build.query<IClient[], undefined>({\n query: (Id) => `Client/My`,\n providesTags: [\"GetMyClient\"],\n }),\n getClientList: build.query<IClient[], number | undefined>({\n query: (companyTypeId) => {\n if (companyTypeId)\n return `Client/ByType/${companyTypeId}`;\n\n return `Client`\n },\n providesTags: [\"ClientList\"],\n }),\n getClientTypes: build.query<IClientType[], void>({\n query: () => `Client/Type/`,\n providesTags: [\"GetClientTypes\"],\n }),\n getOffice: build.query<IOffice, number>({\n query: (Id) => `Office/${Id}`,\n providesTags: [\"GetOffice\"],\n })\n }),\n overrideExisting: false,\n})\n\nexport { ClientApi };","import { DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns';\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport { Label } from \"@progress/kendo-react-labels\";\nimport { toInteger } from 'lodash';\nimport React, { FunctionComponent } from 'react'\nimport { ClientApi } from '../../../redux/api/ClientApi';\n\nconst ClientFieldList: FunctionComponent<FieldRenderProps> = props => {\n const {\n validationMessage,\n touched,\n label,\n id,\n valid,\n disabled,\n hint,\n type,\n optional,\n value,\n data,\n multiSelect,\n field,\n ...others\n } = props;\n const values = Array.isArray(field?.VALUES) ? field?.VALUES?.map(v => toInteger(v)) : [];\n const clientTypeId = field?.ConfigSettings?.ClientType;\n const { data: clients } = ClientApi.useGetClientListQuery(clientTypeId);\n //const defaultClient = clients?.filter(c=>c.ID == defaultValue);\n //const defaultClients = clients?.filter(c=>defaultValue.split(',').indexOf(c.ID.toString()) > -1);\n const currentValues = values?.length > 0 ? clients?.filter(i => values?.indexOf(i.ID) > -1) : undefined;\n const fieldChanged = (e) => {\n let fieldChange = { ...field, VALUES: [e.value.ID] }\n props.onChange({ value: fieldChange });\n }\n const multiFieldChanged = (e) => {\n let newValues = e.value.length ? e.value : [{ ID: null }];//Null required to remove existing values from multi-select\n let fieldChange = { ...field, VALUES: newValues.map(v => v.ID) }\n\n props.onChange({ value: fieldChange });\n }\n const listControl = () => {\n if (field?.ConfigSettings?.Display === '1' || multiSelect)\n return <MultiSelect {...others} popupSettings={{ className: \"z500\" }} placeholder='Select multiple' onChange={multiFieldChanged} value={currentValues} data={clients} textField=\"Company_Name\" dataItemKey='ID' />\n else\n return <DropDownList {...others} popupSettings={{ className: \"z500\" }} defaultItem={{ Company_Name: \"Select\" }} onChange={fieldChanged} value={currentValues?.length > 0 ? currentValues[0] : undefined} data={clients} dataItemKey=\"ID\" textField=\"Company_Name\" />\n }\n return (\n <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label}\n </Label>\n {listControl()}\n </>\n )\n}\n\nexport default ClientFieldList;","import React, { FunctionComponent } from 'react'\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport ClientList from '../../Client/ListControls/ClientFieldList';\n\nexport const ClientField: FunctionComponent<FieldRenderProps> = props => {\n const { field, ...others } = props;\n\n return (\n <ClientList {...others} field={field} />\n )\n\n}\n","import { DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns';\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport { Label } from \"@progress/kendo-react-labels\";\nimport React, { FunctionComponent, useState } from 'react'\nimport { Api } from '../../../redux/api/BaseApi';\nimport { UserApi } from '../../../redux/api/UserApi';\n\nconst StaffList: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n values,\n multiSelect,\n addSelect,\n companyId,\n showMe,\n currentUserTop,\n } = props;\n\n const { data: staff } = UserApi.useGetStaffQuery({ teamId: undefined, includeQueues: false, includeStaffPlusForCompanyId: companyId || 0 });\n const [opened, setOpened] = useState(false);\n\n //Show current user as \"Me\"\n const { data: userProfile } = Api.useGetUserProfileQuery();\n let bindStaff = showMe ? staff?.map(s => { return { ...s, Full_Name: s.ID === userProfile.Id ? '<Me>' : s.Full_Name } }) : staff;\n bindStaff = currentUserTop ? bindStaff?.sort(function (x, y) { return x.ID === userProfile.Id ? -1 : y.ID === userProfile.Id ? 1 : 0; }) : bindStaff;\n\n const currentValues = values?.length > 0 ? bindStaff?.filter(i => values?.indexOf(i.ID) > -1) : undefined;\n const fieldChanged = (e) => {\n props.onChange({ value: [e.value.ID] });\n }\n const multiFieldChanged = (e) => {\n let newValues = e.value.map(v => v.ID);\n props.onChange({ value: newValues.length ? newValues : [null] }); //Null required to remove existing values from multi-select\n }\n const listControl = (\n multiSelect ?\n <MultiSelect popupSettings={{ className: \"z500\" }} placeholder='Select multiple' onChange={multiFieldChanged} value={currentValues} data={bindStaff} textField=\"Full_Name\" dataItemKey='ID'\n opened={opened}\n onFocus={() => { setOpened(true) }}\n onBlur={() => { setOpened(false) }}\n />\n :\n <DropDownList popupSettings={{ className: \"z500\", width: 250 }} defaultItem={addSelect ? { Full_Name: \"Select\" } : undefined} onChange={fieldChanged} value={currentValues?.length > 0 ? currentValues[0] : undefined} data={bindStaff} dataItemKey=\"ID\" textField=\"Full_Name\" />\n )\n return (\n <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label}\n </Label>\n {listControl}\n </>\n )\n}\n\n\nexport default StaffList;","import React, { FunctionComponent } from 'react'\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport StaffList from '../../User/ListControls/StaffList';\n\nexport const StaffField: FunctionComponent<FieldRenderProps> = props => {\n const {field} = props;\n const defVal = field.ConfigSettings?.DefaultValue;\n const multiSelect = field?.ConfigSettings?.Display === '1'\n const values = Array.isArray(field?.VALUES) ? field?.VALUES?.map(v=>parseInt(v)) : [];\n const fieldChanged = (e) =>{\n //console.log('fieldChanged',e);\n let fieldChange = {...field, VALUES:e.value}\n //console.log('fieldChanged2',fieldChange);\n props.onChange({value:fieldChange});\n }\n return(\n <StaffList defaultValue={defVal} {...props} onChange={fieldChanged} multiSelect={multiSelect} values={values} />\n )\n \n}\n\n","import { FieldRenderProps } from \"@progress/kendo-react-form\";\nimport { Input } from \"@progress/kendo-react-inputs\";\nimport { FunctionComponent, useEffect, useState } from \"react\";\nimport { Label } from \"@progress/kendo-react-labels\";\nimport React from \"react\";\nimport { toDigital, toMinutes } from \"../../utils/utils\";\n\nconst Time: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n mins,\n value,\n onChange,\n ...others\n } = props;\n\n const [time, setTime] = useState<string>(toDigital(mins))\n //const theTime = React.useMemo(() => time === undefined ? toDigital(mins) : time, [mins, time]);\n const timeChanged = e => {\n let newVal = toMinutes(e.target.value);\n onChange({ value: newVal })\n //console.log('timeChanged', e.target.value, newVal)\n setTime(toDigital(newVal))\n }\n\n useEffect(() => {\n setTime(toDigital(mins))\n }, [mins])\n\n return (\n <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}>\n {label}\n {/* {disabled} - {mins} - {time} value={disabled ? '' : time} */}\n </Label>\n <Input {...others} value={time} disabled={disabled} placeholder={'0:00'} className='time-field' onBlur={timeChanged} onChange={(e) => setTime(e.target.value?.toString())} />\n\n </>\n )\n}\n\nexport default Time","import React, { FunctionComponent, useRef } from 'react'\nimport { DatePicker, DateTimePicker, TimePicker } from \"@progress/kendo-react-dateinputs\";\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport { MaskedTextBox } from '@progress/kendo-react-inputs';\nimport Time from '../../Common/Time';\n\nexport const TimeField: FunctionComponent<FieldRenderProps> = props => {\n const { field, value, companyId, ...others } = props;\n const defVal = field?.VALUES?.length > 0 ? new Date(field?.VALUES[0]) : undefined //props.ConfigSettings?.Default === \"2\" ? new Date(Date.parse(props.ConfigSettings?.DefaultValue)) : (props.ConfigSettings?.Default === \"1\" ? new Date() : null);\n const fieldChanged = (e) => {\n let fieldChange = { ...field, VALUES: [e.value] }\n props.onChange({ value: fieldChange });\n }\n return (\n <div>\n <Time {...others} onChange={fieldChanged} value={defVal} />\n </div>\n\n )\n}\n\n\n","import React, { FunctionComponent } from 'react'\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport { DropDownList, DropDownListChangeEvent, MultiSelect } from '@progress/kendo-react-dropdowns';\nimport { ClientApi } from '../../../redux/api/ClientApi';\nimport { UserApi } from '../../../redux/api/UserApi';\n\nexport const EndUserField: FunctionComponent<FieldRenderProps> = props => {\n const { field, ...others } = props;\n const defClientId = field.ConfigSettings?.DefaultCompany;\n const { data: clients } = ClientApi.useGetClientListQuery(null);\n const defClient = clients?.filter(c => c.ID === defClientId)\n const { data: users, isFetching: usersLoading } = UserApi.useGetUsersQuery({ companyId: defClient?.length ? defClient[0].ID : null })\n const currentValues = field?.VALUES?.length > 0 ? users?.filter(i => field?.VALUES.map(v => parseInt(v)).indexOf(i.ID) > -1) : null;\n //const [selectedClient, setSelectedClient] = React.useState<IClient>(defClient?.length ? defClient[0] : null)\n const fieldChanged = (e) => {\n //console.log('fieldChanged',e);\n let fieldChange = { ...field, VALUES: [e.value.ID] }\n props.onChange({ value: fieldChange });\n }\n const clientChanged = (e: DropDownListChangeEvent) => {\n let fieldChange = { ...field, ConfigSettings: { ...field.ConfigSettings, DefaultCompany: e.value.ID } }\n props.onChange({ value: fieldChange });\n\n console.log('clientChanged', fieldChange)\n }\n const multiFieldChanged = (e) => {\n let fieldChange = { ...field, VALUES: e.value.map(v => v.ID) }\n props.onChange({ value: fieldChange });\n }\n const clientList = (\n <>\n <DropDownList {...others} valid={true} popupSettings={{ className: \"z500\" }} defaultItem={{ Company_Name: \"Select\" }} onChange={clientChanged} value={defClient?.length > 0 ? defClient[0] : undefined} data={clients} dataItemKey=\"ID\" textField=\"Company_Name\" />\n </>\n )\n\n if (field.ConfigSettings?.Display === \"0\") {\n //Dropdown\n return (\n <div>\n {clientList}\n <DropDownList {...others} loading={usersLoading} popupSettings={{ className: \"z500\" }} value={currentValues?.length ? currentValues[0] : null} onChange={fieldChanged} defaultItem={{ Value: \"Select\" }} data={users} textField=\"FullName\" dataItemKey='ID' />\n </div>)\n }\n else if (field.ConfigSettings?.Display === \"1\") {\n //Multi select\n return (\n <div>\n {clientList}\n <MultiSelect {...others} loading={usersLoading} popupSettings={{ className: \"z500\" }} value={currentValues} onChange={multiFieldChanged} data={users} textField=\"FullName\" dataItemKey='ID' />\n </div>\n )\n }\n\n}\n","import React, { FunctionComponent } from 'react'\nimport { DateField } from './FieldTypes/DateField';\nimport DropdownField from './FieldTypes/DropdownField';\nimport NumericField from './FieldTypes/NumericField';\nimport TextField from './FieldTypes/TextField';\nimport { Field, FieldRenderProps, FieldWrapper, } from '@progress/kendo-react-form';\nimport { ClientField } from './FieldTypes/ClientField';\nimport { StaffField } from './FieldTypes/StaffField';\nimport { Label, Error, Hint } from \"@progress/kendo-react-labels\";\nimport { TimeField } from './FieldTypes/TimeField';\nimport { EndUserField } from './FieldTypes/EndUserField';\nconst FormField: FunctionComponent<FieldRenderProps> = formRenderProps => {\n const {\n validationMessage,\n touched,\n label,\n id,\n valid,\n disabled,\n hint,\n showHint,\n optional,\n field,\n ...others\n } = formRenderProps;\n const labelValid = !validationMessage;\n const hintId = showHint ? `${id}_hint` : \"\";\n const errorId = validationMessage ? `${id}_error` : \"\";\n let description = field.Description && !field.Show_Tooltip && (\n <Hint>\n {field.Description}\n </Hint>\n )\n\n //Show tooltip popup\n const tool = (\n field.Show_Tooltip && field.Description &&\n <span className='k-font-icon k-i-info' title={field.Description} ></span>\n )\n\n const renderField = () => {\n switch (field.Field_Type_Id) {\n case 1:\n return TextField\n case 2:\n return DropdownField\n case 3:\n return DateField\n case 4:\n return TimeField\n case 5:\n return NumericField\n case 6:\n return StaffField\n case 7:\n return ClientField\n case 8:\n return EndUserField\n case 9:\n return NumericField\n default:\n return Error\n }\n }\n return (\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={labelValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {tool} {field.Name} {validationMessage && (<Error id={errorId}> {validationMessage}</Error>)}\n </Label>\n {/* <em>{JSON.stringify(field.Is_Required)} - valid:{JSON.stringify(field.Required_To)} - {validationMessage}</em> */}\n {description}\n <Field\n {...others}\n field={field}\n id={id}\n name={id}\n component={renderField()}\n />\n <Hint id={hintId}>{hint}</Hint>\n\n </FieldWrapper>\n )\n}\n\nexport default FormField;","import { Field, FieldRenderProps } from '@progress/kendo-react-form'\nimport { min } from 'lodash'\nimport React, { FunctionComponent } from 'react'\nimport { Api } from '../../redux/api/BaseApi'\nimport FormField from './FormField'\nimport {\n Label\n} from \"@progress/kendo-react-labels\";\n\n\nconst CustomForm: FunctionComponent<FieldRenderProps> = formRenderProps => {\n const {\n id,\n disabled,\n valid,\n optional,\n validationMessage,\n formId,\n fields,\n ...others\n } = formRenderProps;\n const { data: form } = Api.useGetFormQuery(formId);\n if (!form)\n return <></>\n\n //const form = value || {Fields:[]} as Form;\n let fieldWidth = form.Columns === 1 ? 'basis-full pl-1' : `basis-full p-2 md:basis-1/2 lg:basis-1/${min([3, form.Columns])} xl:basis-1/${form.Columns} 2xl:basis-1/${form.Columns}`\n let parentStyle = 'flex flex-wrap w-full';\n if (form.Direction === 1) {\n parentStyle = `gap-0 columns-1 md:columns-2 lg:columns-${min([3, form.Columns])} xl:columns-${form.Columns}` //+ form.Columns;\n fieldWidth = 'inline-block w-full pl-1';\n }\n return (\n <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {/* id:{id} {JSON.stringify(valid)} - {validationMessage} */}\n </Label>\n <h4>{form.Description}</h4>\n <div className={parentStyle}>\n {fields?.map((f) => {\n return (\n f.Enabled &&\n <div className={fieldWidth} key={f.ID}>\n <Field\n {...others}\n id={`field_${f.ID}`}\n name={`field_${f.ID}`}\n component={FormField}\n field={f}\n\n />\n </div>)\n })}\n </div>\n {/* Required for css rendering */}\n <div className=\"basis-full md:basis-1/2 lg:basis-1/3 xl:basis-1/4\"></div>\n {/* <JsonTreeViewer data={fields} title=\"Custom Form\" /> */}\n </>\n )\n}\n\n\nexport default CustomForm;","import React from 'react'\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport { Badge, BadgeContainer } from '@progress/kendo-react-indicators';\nimport { UserApi } from '../../redux/api/UserApi';\nimport { Api } from '../../redux/api/BaseApi';\nimport { ClientApi } from '../../redux/api/ClientApi';\n\nconst FilterButton = (props: FilterButtonProps) => {\n const { data: clientTypeFilters } = UserApi.useGetClientTypeFiltersQuery();\n const badgeCount = clientTypeFilters?.filter(c => c.Checked).length\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const disabled = userProfile?.Features.Client_Type_Filter_Disabled;\n const { data: clientTypes } = ClientApi.useGetClientTypesQuery()\n const myClientTypeIds = clientTypeFilters?.map(my => my.Company_Type_Id)\n const title = myClientTypeIds?.length === 0 ? `${props.clientTypePhrase} type filters: None` : `${props.clientTypePhrase} Types: ${clientTypes?.filter(ct => myClientTypeIds?.indexOf(ct.ID) > -1).map(ct => ct.Company_Type_Name).join(', ')}`\n return (\n <BadgeContainer>\n <Button type=\"button\" icon=\"filter\" onClick={props.onClick} formNoValidate={true} title={title} />\n {badgeCount > 0 && <Badge className='ml-1' size='small' align={{ horizontal: \"start\", vertical: \"top\" }}><span>{badgeCount}</span></Badge>}\n </BadgeContainer>\n )\n}\n\ntype FilterButtonProps = {\n clientTypePhrase: string\n onClick: () => void\n}\nexport default FilterButton","import React from 'react'\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport { Badge, BadgeContainer } from '@progress/kendo-react-indicators';\n\nconst BulkLogButton = (props: BulkLogButtonProps) => {\n return (\n <BadgeContainer>\n <Button icon=\"aggregate-fields\" onClick={props.onClick} formNoValidate={true} title={'Toggle Bulk Logging'} type='button' />\n {props.badgeCount > 0 && <Badge className='ml-1' size='small' align={{ horizontal: \"start\", vertical: \"top\" }}><span>{props.badgeCount}</span></Badge>}\n </BadgeContainer>\n )\n}\n\ntype BulkLogButtonProps = {\n ticketPhrase?: string\n onClick: () => void\n badgeCount: number\n}\nexport default BulkLogButton","import { Button } from \"@progress/kendo-react-buttons\";\nimport { Window, WindowMoveEvent } from \"@progress/kendo-react-dialogs\";\nimport {\n plusIcon,\n pencilIcon,\n userIcon\n} from \"@progress/kendo-svg-icons\";\nimport React, { useEffect } from \"react\";\nimport { useGetTenantQuery, useGetUserProfileQuery } from \"../../redux/api/BaseApi\";\nimport { PartialSpinny, Spinny } from \"../Nav/Spinny\";\nimport { UserApi } from \"../../redux/api/UserApi\";\nimport { Icon, SvgIcon } from \"@progress/kendo-react-common\";\nimport { useReduxDispatch } from \"../../redux/hooks\";\n\n///A modal that displays the user's details when clicking the Add / Edit icon on the log a ticket dialog.\nconst UserDetailsModal = (props: UserModalProps) => {\n const dispatch = useReduxDispatch();\n const { data: tenant } = useGetTenantQuery()\n const [newUserId, setNewUserId] = React.useState<number>();\n const { data: newUser, refetch } = UserApi.useGetUserByIdQuery(newUserId, { skip: !newUserId });\n const { data: classification } = UserApi.useGetUserClassificationQuery();\n\n const [ifameProps, setIfameProps] = React.useState<IframeProps>({ contactId: 0, visible: false });\n const { data: userProfile, isFetching: profileIsLoading } = useGetUserProfileQuery();\n\n useEffect(() => {\n //console.log('useEffect', newUser, newUserId);\n if (newUser && props.userCreated && newUserId == newUser.ID && classification) {\n console.log('User Updated', newUser?.F_Name, newUser?.L_Name, newUser?.Company_Name, newUser?.[classification?.Field_Name]);\n //The contact display name should use the secondary user classification field if it is set otherwith the company_name\n var displayName = `${newUser?.FullName} - ${(classification?.Field_Name && newUser?.[classification?.Field_Name] || newUser?.Company_Name)}`;\n refetch().then(() => {\n console.log('User Updated2', newUser?.F_Name, newUser?.L_Name, newUser?.Company_Name, newUser?.[classification?.Field_Name]);\n\n props.userCreated({ ...newUser, Contact_Name: displayName, Contact_Id: newUser.ID });\n setNewUserId(null);\n });\n }\n }, [newUser, newUserId, classification]);\n\n useEffect(() => {\n //Add event listener for Events that get posted when a user is created or edited.\n const messageListener = (e) => {\n console.log('Message Recieved', e.data);\n try {\n if (e.data?.indexOf && e.data?.indexOf('{') === 0) {\n console.log('JSON Message Recieved', e.data);\n var messageObj = JSON.parse(e.data);\n if ('message' in messageObj && messageObj.message === 'user_created' && 'contactId' in messageObj) {\n if (messageObj.contactId != '0') {\n //clear API cache because the user details may have been edited in the old UI\n //console.log('UserApi.util.invalidateTags');\n //dispatch(UserApi.util.invalidateTags([\"GetUsersById\", \"GetUsersByIds\", \"GetUsers\"]));\n\n //console.log('setNewUserId', messageObj.contactId);\n setNewUserId(messageObj.contactId);\n }\n //props.userCreated && props.userCreated({ Contact_Id: messageObj.contactId });\n\n setIfameProps({ visible: false, contactId: 0 });\n }\n }\n } catch (err) {\n console.error('ouch in window.addEventListener', err);\n }\n };\n\n var ev = window.addEventListener(\"message\", messageListener, false)\n //console.log('addEventListener added', messageListener);\n return () => { window.removeEventListener(\"message\", messageListener) }\n }, []);\n\n return (\n tenant &&\n <>\n <Button type=\"button\" formNoValidate className=\"buttons-container-button\" svgIcon={plusIcon} onClick={() => setIfameProps({ iFrameLoading: true, visible: true, contactId: 0 })} title={`Add ${userProfile?.Phrases.EndUser}`}>\n </Button>\n {props?.contactId > 0 && <Button type=\"button\" formNoValidate className=\"buttons-container-button\" svgIcon={pencilIcon} onClick={() => setIfameProps({ iFrameLoading: true, visible: true, contactId: props?.contactId })} title={`Edit ${userProfile?.Phrases.EndUser}`}>\n </Button>}\n {ifameProps?.visible &&\n <Window\n initialWidth={1000}\n initialHeight={800}\n className=\"user-details\"\n onClose={() => setIfameProps({ visible: false, contactId: 0 })}\n title={\n <>\n <SvgIcon icon={userIcon} className=\"pt-1\"></SvgIcon><span className=\"pl-3\">{ifameProps?.contactId ? `Edit ${userProfile?.Phrases.EndUser}` : `Add ${userProfile?.Phrases.EndUser}`}</span>\n </>}\n modal={true}\n >\n {/* A fullscreen IfraME WINDOW to the user details aspx page */}\n <div className=\"inline-block w-full h-full\">\n {ifameProps.iFrameLoading && <PartialSpinny z={98} />}\n <iframe src={`${tenant?.Tenant_Url}/contacts/contactinfo.aspx?LogCallPopup=1&company_id=${props?.companyId}&contact_Id=${ifameProps?.contactId}`} className=\"w-full h-full\" onLoad={() => setIfameProps((props) => { return { ...props, iFrameLoading: false } })}>\n </iframe>\n </div>\n </Window>}\n </>\n );\n}\n\ninterface UserModalProps {\n contactId?: number,\n companyId?: number,\n userCreated?: (e: any) => void\n}\n\ninterface IframeProps {\n contactId: number,\n visible: boolean,\n iFrameLoading?: boolean\n}\n\n\nexport default UserDetailsModal;\n","import { ComboBox, ComboBoxChangeEvent, ComboBoxFilterChangeEvent, DropDownList, DropDownListChangeEvent, MultiColumnComboBox, MultiColumnComboBoxColumn, MultiColumnComboBoxHandle } from '@progress/kendo-react-dropdowns';\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport React, { ChangeEvent, FunctionComponent, useEffect, useMemo, useRef } from 'react'\nimport { Api } from '../../../redux/api/BaseApi';\nimport {\n Label,\n Error,\n Hint,\n} from \"@progress/kendo-react-labels\";\nimport { UserApi } from '../../../redux/api/UserApi';\nimport { ClientApi } from '../../../redux/api/ClientApi';\nimport { FilterDescriptor, filterBy } from \"@progress/kendo-data-query\";\nimport { IClient } from '../../../types/Client/IClient';\nimport { IUser } from '../../../types/User/IUser';\nimport FilterButton from '../../ClientType/FilterButton';\nimport BulkLogButton from '../FormControls/BulkLogButton';\nimport UserDetailsModal from '../../User/UserDetailsModal';\n\nconst UserFynd: FunctionComponent<FieldRenderProps> = props => {\n const {\n validationMessage,\n label,\n id,\n disabled,\n hint,\n optional,\n endUserId,\n hideOptions\n } = props;\n const { data: profile } = Api.useGetUserProfileQuery();\n const requiredMessage = `${profile?.Phrases.EndUser} is required`\n const { data: columns } = Api.useGetUserFyndConfigQuery();\n const [postSearch, { isLoading, data }] = Api.usePostUserFyndMutation();\n const { data: users, isFetching: usersLoading } = UserApi.useGetUsersQuery({ companyId: props.companyId })\n const { data: clients } = ClientApi.useGetMyClientsQuery(undefined);\n const { data: classification } = UserApi.useGetUserClassificationQuery();\n\n const niceColumns: MultiColumnComboBoxColumn[] = useMemo(() => {\n return columns?.map<MultiColumnComboBoxColumn>(c => { return { field: c.Display_Name, header: c.Display_Name, width: '' } as MultiColumnComboBoxColumn })\n }, [columns]);\n\n const [clientOpen, setClientOpen] = React.useState<boolean>(false);\n const [userOpen, setUserOpen] = React.useState<boolean>(false);\n const [filter, setFilter] = React.useState<FilterDescriptor>();\n const [userFilter, setUserFilter] = React.useState<FilterDescriptor>();\n const filterChange = (event) => {\n setFilter(event.filter);\n };\n const userFilterChange = (event) => {\n setUserFilter(event.filter);\n };\n const filteredUsers = (userFilter ? filterBy(users.slice(), userFilter) : users)?.map(u => { return { ...u, Address_Line_1: u.Address_Line_1 || '', Bus_Phone: u.Bus_Phone || '', Title: u.Title || '', Custom1: u.Custom1 || '', Custom2: u.Custom2 || '', Custom3: u.Custom3 || '', Custom4: u.Custom4 || '', Custom5: u.Custom5 || '', Custom6: u.Custom6 || '', Company_Abbrev: u.Company_Abbrev || '' } });\n const filteredClients = filter ? filterBy(clients.slice(), filter) : clients\n const selectedClient = filteredClients?.find(c => c.ID === props.companyId) || {} as IClient;\n const selectedUser = users?.find(c => c.ID === endUserId) || {} as IUser;\n const sortedUsers = classification?.Secondary_Sort ? filteredUsers?.sort((a, b) => classification?.Secondary_Sort_Direction === 'Desc' ? b[classification.Field_Name].toString().localeCompare(a[classification.Field_Name]) : a[classification.Field_Name].toString().localeCompare(b[classification.Field_Name])) : filteredUsers;\n const combo = useRef<MultiColumnComboBoxHandle>();\n\n //Auto focus the combo box when the component is loaded\n useEffect(() => {\n if (combo.current && !endUserId) {\n combo.current.focus();\n }\n }, [combo, endUserId]);\n\n //Select the first client if there is only one\n useEffect(() => {\n if (clients?.length === 1)\n props?.onClientChange({ value: clients[0] })\n }, [clients]);\n\n //Event handlers\n const endUserFilterHandler = (e: ComboBoxFilterChangeEvent) => {\n //console.log('endUserChangeHandler', e.filter);\n if (e.filter.value.length > 2)\n postSearch(e.filter.value);\n }\n const endUserChangeHandler = (e: ComboBoxChangeEvent) => {\n console.log('endUserChangeHandler', e.value);\n props?.onChange(e.value);\n }\n\n const endUserCreated = (newEndUser: IUser) => {\n\n console.log('endUserCreated', newEndUser);\n\n props?.onChange({ target: null, value: newEndUser.ID, ...newEndUser });\n }\n\n function endUserChanged(e: DropDownListChangeEvent): void {\n console.log('endUserChanged', e.value, userOpen)\n\n setUserOpen(false);\n setUserFilter(null);\n props?.onChange({ ...e.value, Contact_Id: e.value.ID });\n\n }\n\n function clientChanged(e: DropDownListChangeEvent): void {\n setClientOpen(false);\n\n props?.onClientChange(e);\n\n setUserOpen(true);\n setFilter(null);\n }\n\n\n const itemRender = (li, props) => {\n const children = columns?.map((col, i) => {\n return (\n <span className=\"k-table-td user-fynd-item\" key={i}>\n <div dangerouslySetInnerHTML={{ __html: props.dataItem[col.Display_Name] }} />\n </span>\n );\n });\n return React.cloneElement(li, { ...li.props }, children);\n };\n const endUserColumns = classification?.Field_Name ? [\n {\n field: \"FullName\",\n header: \"Name\",\n width: \"40%\",\n },\n {\n field: classification?.Field_Name,\n header: classification?.Display_Name,\n width: null,\n }\n ] : [\n {\n field: \"FullName\",\n header: \"Name\",\n width: \"50%\",\n }\n ]\n\n const wrapper = useRef(null);\n const showValidationMessage = validationMessage;\n const isValid = !validationMessage\n const showHint = !showValidationMessage && hint;\n const hintId = showHint ? `${id}_hint` : \"\";\n const errorId = showValidationMessage ? `${id}_error` : \"\";\n\n const filterButton = !hideOptions && profile?.Features.Show_Client_Type_Filter ? <div className='inline-block pl-1'>\n <FilterButton onClick={props.filterClicked} clientTypePhrase={profile?.Phrases.Client} />\n </div> : <></>\n\n const bulkLog = !hideOptions && profile?.Features.Bulk_Call_Logging && <div className='inline-block pl-1'>\n <BulkLogButton badgeCount={props.bulkContactIds?.length} onClick={props.toggleBulkLogging}></BulkLogButton>\n </div>\n\n const addEditUser = !hideOptions && profile?.Features.Add_Edit_EndUSer_From_LogACall && <div className='inline-block pl-1'>\n <UserDetailsModal companyId={props.companyId} contactId={endUserId} userCreated={endUserCreated}></UserDetailsModal>\n </div>\n\n\n return (\n profile?.Features.UserFynd ?\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label} {showValidationMessage && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n\n <div className={\"k-form-field-wrap1 inline-block w-10/12\"} ref={wrapper} >\n <MultiColumnComboBox ref={combo} valid={isValid} size='small' popupSettings={{ className: 'z500 user-fynd-results', popupClass: 'z500', appendTo: wrapper.current }} className='az500' itemRender={itemRender} placeholder='Type 3 characters to search...' value={props.display} columns={niceColumns} onChange={endUserChangeHandler} onFilterChange={endUserFilterHandler} data={data} filterable={true} loading={isLoading} required={props.isRequired} validationMessage={requiredMessage} />\n </div>\n {addEditUser}\n {filterButton}\n {bulkLog}\n {showHint && <Hint id={hintId}>{hint}</Hint>}\n </FieldWrapper>\n : <>\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {profile?.Phrases.Client} {showValidationMessage && !selectedClient?.ID && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n <div className=\"k-form-field-wrap1 inline-block w-10/12\">\n <ComboBox opened={clientOpen} onOpen={e => setClientOpen(true)} onBlur={e => setClientOpen(false)} onFocus={e => setClientOpen(true)} suggest={true} filterable={true} placeholder=\"Type to search...\" popupSettings={{ className: \"z500\" }} onFilterChange={filterChange} onChange={clientChanged} value={selectedClient} data={filteredClients} dataItemKey=\"ID\" textField=\"Company_Name\" />\n </div>\n {filterButton}\n </FieldWrapper> <FieldWrapper>\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label} {showValidationMessage && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n <div className=\"k-form-field-wrap1 inline-block w-10/12\">\n {/* selected:{selectedUser?.FullName} */}\n <MultiColumnComboBox columns={endUserColumns} opened={userOpen} onOpen={e => setUserOpen(true)} onBlur={e => setUserOpen(false)} onFocus={e => setUserOpen(true)} suggest={true} filterable={true} loading={usersLoading} placeholder={selectedClient ? \"Select\" : `Select a ${profile.Phrases.Client}`} popupSettings={{ className: \"z500\" }} onFilterChange={userFilterChange} onChange={endUserChanged} value={selectedUser} data={sortedUsers} textField=\"FullName\" dataItemKey='ID' />\n </div>\n {addEditUser}\n {bulkLog}\n </FieldWrapper></>\n )\n}\n\nexport default UserFynd;","import { MultiColumnComboBox } from '@progress/kendo-react-dropdowns';\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport React, { FunctionComponent } from 'react'\nimport { TicketApi } from '../../../redux/api/TicketApi';\nimport {\n Label\n} from \"@progress/kendo-react-labels\";\n\nconst SLAList: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n onChange,\n } = props;\n\n const { data: config } = TicketApi.useGetSLAConfigQuery();\n const { data: slas, isFetching: fetchingSLAs } = TicketApi.useGetSLAListQuery({ projectId: props.projectId, priorityId: props.priorityId });\n const { data: selectedSLA } = TicketApi.useGetSLAQuery(props.slaId, { skip: !props.slaId });\n // const SLA = {SLA_ID:props.slaId,SLA_Name:'Nope'} as ISLA;\n const defaultSLA = props.slaId === 0 ? slas?.filter(s => s.SLA_ID === 0) : selectedSLA ? [selectedSLA] : [];\n\n const slaColumns = [\n {\n field: \"SLA_Name\",\n header: \"Name\",\n width: \"300px\",\n },\n config?.Multi_SLA_List_Option > 1 ?\n {\n field: \"SLA_Code\",\n header: \"Code\",\n width: \"100px\",\n } : undefined,\n config?.Multi_SLA_List_Option > 2 ?\n {\n field: \"SLA_Response_Time\",\n header: \"Response\",\n width: \"80px\",\n } : undefined,\n config?.Multi_SLA_List_Option > 2 ?\n {\n field: \"SLA_Resolve_Time\",\n header: \"Resolve\",\n width: \"80px\",\n } : undefined\n ].filter(f => f !== undefined);\n return (\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label}\n </Label>\n <div className={\"k-form-field-wrap\"}>\n <MultiColumnComboBox popupSettings={{ className: 'z500' }} filterable={false} value={defaultSLA?.length > 0 ? defaultSLA[0] : null} columns={slaColumns} onChange={onChange} data={slas} dataItemKey=\"SLA_ID\" textField=\"SLA_Name\" loading={fetchingSLAs} />\n </div>\n </FieldWrapper>\n\n )\n}\n\nexport default SLAList","import { DropDownList } from '@progress/kendo-react-dropdowns'\nimport { FieldRenderProps, FieldWrapper } from \"@progress/kendo-react-form\";\nimport React, { FunctionComponent, useRef, useState } from 'react'\nimport { TicketApi } from '../../../redux/api/TicketApi'\nimport { Label, Hint } from \"@progress/kendo-react-labels\";\nimport { Popup } from '@progress/kendo-react-popup';\nimport { Menu } from '@progress/kendo-react-layout';\nimport { Dialog, DialogActionsBar } from \"@progress/kendo-react-dialogs\";\nimport { Api } from '../../../redux/api/BaseApi';\nimport { DateTimePicker } from '@progress/kendo-react-dateinputs';\nimport { IStatus } from '../../../types/Ticket/Status/IStatus';\nimport { IAutoCloseSetting, IAutoOpenSetting } from '../../../types/Ticket/ITicket';\nimport ReactTimeAgo from 'react-timeago';\n\nconst StatusList: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n statusId,\n autoOpenSettings,\n autoCloseSettings,\n optional,\n onChange,\n } = props;\n\n const { data } = TicketApi.useGetMyStatusesQuery();\n const defaultStatusOrCurrent = data?.map(s => {\n if (statusId) return s.Statuses.find(ss => ss.Id === statusId);\n return s.Statuses.find(ss => ss.Open_Default)\n }).find(s => s);\n const defaultStatusIdOrCurrent = statusId ? statusId : defaultStatusOrCurrent?.Id;\n const selectedStatus = data?.map((t) => { //return {Type:t.Name, Name:t.Statuses.find(s=>s.Id === defaultStatusIdOrCurrent)?.Name}}\n var stat = t.Statuses.find(s => s.Id === defaultStatusIdOrCurrent)\n if (stat)\n return t.Name + ' > ' + stat.Name;\n else\n return null;\n }).find(s => s);\n //console.log('selectedStatus', statusId, defaultStatusOrCurrent);\n const [show, setShow] = useState(false);\n const offSet = useRef({\n left: 0,\n top: 0,\n });\n const onClick = (e) => {\n offSet.current = {\n left: e.nativeEvent.x,\n top: e.nativeEvent.y,\n };\n setShow(!show);\n };\n const itemSelected = (e) => {\n let selectedStatus = data?.map(s => { return s.Statuses.find(ss => ss.Id === e.item.id) }).find(s => s);\n\n //Show the Date prompt for auto close\n if (selectedStatus?.Auto_Status_Interval === 4) {\n setAutoCloseStatus(selectedStatus);\n setAutoCloseDate(null);\n setShowDatePrompt(true);\n return;\n }\n\n //console.log('itemSelected', selectedStatus, e.item);\n onChange({ value: { status: (selectedStatus ? { Call_Status: selectedStatus.Name, ID: selectedStatus.Id, Open_status: selectedStatus.Open_Status } as IStatus : null) } });\n\n setShow(false);\n };\n const [autoCloseStatus, setAutoCloseStatus] = useState(null);\n const [autoCloseDate, setAutoCloseDate] = useState(null);\n const autoCloseDateOk = (e) => {\n if (autoCloseStatus) {\n let selectedStatus = data?.map(s => { return s.Statuses.find(ss => ss.Id === autoCloseStatus.Id) }).find(s => s);\n //console.log('itemSelected', autoCloseStatus.Id, autoCloseDate);\n autoCloseStatus?.Open_Status === 2\n ? onChange({ value: { autoOpenSettings: { Enabled: true, Auto_Open_Date: autoCloseDate } as IAutoOpenSetting, status: (selectedStatus ? { Call_Status: selectedStatus.Name, ID: selectedStatus.Id, Open_status: selectedStatus.Open_Status } as IStatus : null) } })\n : onChange({ value: { autoCloseSettings: { Enabled: true, Auto_Close_Date: autoCloseDate } as IAutoCloseSetting, status: (selectedStatus ? { Call_Status: selectedStatus.Name, ID: selectedStatus.Id, Open_status: selectedStatus.Open_Status } as IStatus : null) } })\n }\n setShow(false)\n setShowDatePrompt(false);\n }\n const anchor = useRef();\n //No Empties statuses\n const statusItems = data?.filter(s => s.Id !== 3).map((t) => {\n return {\n id: t.Id,\n text: t.Name,\n items: t.Statuses?.map((s) => { return { id: s.Id, text: s.Name } })\n }\n });\n\n const [showDatePrompt, setShowDatePrompt] = React.useState(false);\n const toggleDialog = () => {\n setShowDatePrompt((curValue) => !curValue);\n };\n const { data: userProfile } = Api.useGetUserProfileQuery();\n return (\n <>\n <FieldWrapper >\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label}\n </Label>\n <div className={\"k-form-field-wrap\"} ref={anchor}>\n {/* <DropDownList popupSettings={{className:'z500'}} onChange={onChange} value={selectedStatus?.length > 0 ? selectedStatus[0] : null} data={data} textField={\"Call_Status\"} dataItemKey={\"ID\"}/> */}\n <DropDownList opened={false} onOpen={onClick} onBlur={() => setShow(false)} ref={anchor} value={selectedStatus} />\n <Popup anchor={anchor.current} show={show} offset={offSet.current} className='z500' style={{ width: 300 }}>\n <Menu items={statusItems} vertical={true} onSelect={itemSelected} style={{ display: \"inline-block\" }} className='z500 ticket-context' />\n </Popup>\n {(autoCloseSettings?.Auto_Close_Date) &&\n <Hint id=\"status_hint\">\n <span className={'k-text-success'}>\n Auto close <ReactTimeAgo date={autoCloseSettings?.Auto_Close_Date} />\n </span>\n </Hint>\n }\n {(autoOpenSettings?.Auto_Open_Date) &&\n <Hint id=\"status_hint\">\n <span className={'k-text-success'}>\n Un-pause <ReactTimeAgo date={autoOpenSettings?.Auto_Open_Date} />\n </span>\n </Hint>\n }\n </div>\n {showDatePrompt && (\n <Dialog title={autoCloseStatus?.Open_Status === 2 ? \"On hold until...\" : \"Auto-Close On...\"} onClose={toggleDialog}>\n <div\n style={{\n margin: \"15px\",\n }}\n >\n {autoCloseStatus?.Open_Status === 2\n ? `Select the date when this ${userProfile?.Phrases.CallPhrase} will un-pause and go back to Open status:`\n : `Select the date when this ${userProfile?.Phrases.CallPhrase} will Auto-close:`\n }\n\n </div>\n <DateTimePicker placeholder='Select date/time' min={new Date()} onChange={(e) => setAutoCloseDate(e.value.toISOString())} />\n <DialogActionsBar>\n <button\n disabled={!autoCloseDate}\n className=\"k-button k-primary k-button-md k-rounded-md k-button-solid k-button-solid-base\"\n onClick={autoCloseDateOk}\n >\n Ok\n </button>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-i-cancel\"\n onClick={toggleDialog}\n >\n Cancel\n </button>\n </DialogActionsBar>\n </Dialog>\n )}\n </FieldWrapper>\n\n </>\n )\n}\n\nexport default StatusList;","import { DropDownList } from '@progress/kendo-react-dropdowns'\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport React, { FunctionComponent } from 'react'\nimport { IProject } from '../../../types/Project/IProject'\nimport {\n Label,\n Error,\n Hint,\n} from \"@progress/kendo-react-labels\";\nimport { toDigital } from '../../../utils/utils';\nimport { ProjectApi } from '../../../redux/api/ProjectApi';\nconst ProjectList: FunctionComponent<FieldRenderProps> = props => {\n const { data: projects, isLoading: projectLoading } = ProjectApi.useGetProjectListQuery(props.companyId);\n const {\n validationMessage,\n label,\n id,\n disabled,\n optional,\n selectedProject,\n } = props;\n const isValid = !validationMessage;\n const showValidationMessage = validationMessage;\n const showHint = selectedProject && !(selectedProject as IProject)?.Unlimited_Ret;\n const availableTime = (selectedProject as IProject)?.Available_Time;\n const hintId = showHint ? `${id}_hint` : \"\";\n const errorId = showValidationMessage ? `${id}_error` : \"\";\n const defaultValue = { ID: 0, Project_Name: \"Select\" } as IProject\n const sortedProjects = [...projects || []].sort((a, b) => a.Project_Name.localeCompare(b.Project_Name));\n return (\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label} {showValidationMessage && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n\n <div className={\"k-form-field-wrap\"} >\n {/* selectedProject:{selectedProject?.Project_Name} */}\n <DropDownList valid={isValid} defaultItem={defaultValue} popupSettings={{ className: 'z500' }} onChange={(e) => props.onSelect(e.value)} value={selectedProject} data={sortedProjects} dataItemKey=\"ID\" textField=\"Project_Name\" loading={projectLoading} required={true} />\n {showHint && <Hint id={hintId}>\n <span className={availableTime > 0 ? 'k-text-success' : 'k-text-error'}>{label} time remaining: {toDigital((selectedProject as IProject)?.Available_Time, true)}</span>\n </Hint>}\n\n </div>\n </FieldWrapper>\n )\n}\n\n\nexport default ProjectList;","import { DropDownList } from '@progress/kendo-react-dropdowns';\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport {\n Label\n } from \"@progress/kendo-react-labels\";\nimport React, { FunctionComponent } from 'react'\nimport { Api } from '../../../redux/api/BaseApi';\n\nconst PriorityList: FunctionComponent<FieldRenderProps> = props =>{\n const {data:priorities} = Api.useGetPriorityListQuery(props.prioritySetId,{skip:!props.prioritySetId});\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n selectedPriority,\n priorityChangeHandler,\n } = props;\n return (\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label}\n </Label>\n \n <div className={\"k-form-field-wrap\"}> \n <DropDownList popupSettings={{className:'z500'}} onChange={priorityChangeHandler} value={selectedPriority} data={priorities} dataItemKey=\"ID\" textField=\"Priority_Level\" />\n </div>\n </FieldWrapper>\n )\n}\n\nexport default PriorityList;","import { MultiSelect, MultiSelectFilterChangeEvent } from \"@progress/kendo-react-dropdowns\"\nimport { FieldRenderProps, FieldWrapper } from \"@progress/kendo-react-form\";\nimport { FunctionComponent, useMemo, useState } from \"react\"\nimport { Label } from \"@progress/kendo-react-labels\";\nimport { Api } from \"../../../redux/api/BaseApi\";\nimport { UserApi } from \"../../../redux/api/UserApi\";\nimport UserFynd from \"./UserFynd\";\nimport {\n ListBox,\n ListBoxItemClickEvent,\n ListBoxToolbar,\n} from \"@progress/kendo-react-listbox\";\nimport { IStaff } from \"../../../types/IStaff\";\nimport { filterBy, FilterDescriptor } from \"@progress/kendo-data-query\";\nconst AssociatedContacts: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n assContactIds,\n companyId,\n companyTypeId,\n onChange,\n } = props;\n //const { data : userProfile } = Api.useGetUserProfileQuery(); \n const { data: associatedUsers } = UserApi.useGetUsersByIdsQuery(assContactIds?.length ? assContactIds?.join(',') : '0');\n const { data: assContactConfig } = Api.useGetAssContactConfigQuery(companyTypeId, { skip: !companyTypeId });\n const { data: endUsers } = Api.useGetUsersQuery({ companyId: companyId, locationId: null });\n const [filter, setFilter] = useState<FilterDescriptor>(null);\n const [globalContactsIds, setGlobalContactIds] = useState(assContactIds || []);\n const [selectedId, setSelectedId] = useState();\n const SELECTED_FIELD = \"selected\";\n //add usememo to stop rerendering on every keypress of the call description changing\n const endUsersFormatted = useMemo(() => setDisplayName(endUsers) || [], [endUsers]);\n const associatedUsersFormatted = setDisplayName(associatedUsers) || [];\n\n function setDisplayName(data) {\n return data?.map(a => {\n return {\n ...a,\n \"Display_Name\":\n a[a.Secondary_User_Classification] ?\n `${a.FullName} - ${a[a.Secondary_User_Classification]}`\n : a.FullName,\n [SELECTED_FIELD]: a.ID === selectedId\n }\n })\n }\n const globalContactSelected = (e) => {\n console.log('globalContacts', globalContactsIds, e.Contact_Id, [...globalContactsIds, e.Contact_Id])\n\n let newArray = [...globalContactsIds, e.Contact_Id];\n setGlobalContactIds(newArray)\n\n onChange({ value: newArray.map(g => { return { ID: g } as IStaff }) });\n\n console.log('globalContacts', newArray?.length)\n }\n\n const handleToolBarClick = (e) => {\n let toolName = e.toolName || \"\";\n if (toolName === \"remove\") {\n let newArray = [...globalContactsIds];\n newArray.splice(newArray.indexOf(selectedId), 1)\n\n setGlobalContactIds(newArray)\n\n onChange({ value: newArray.map(g => { return { ID: g } as IStaff }) });\n }\n };\n\n const filterChanged = (event: MultiSelectFilterChangeEvent) => {\n setFilter(event.filter)\n }\n return (\n <div>\n <FieldWrapper>\n {\n assContactConfig?.Global\n ? <div>\n <UserFynd {...props} onChange={globalContactSelected} display={null} hideOptions={true} />\n <ListBox\n style={{ height: 100, width: \"100%\" }}\n data={associatedUsersFormatted}\n textField=\"Display_Name\"\n selectedField={SELECTED_FIELD}\n onItemClick={(e: ListBoxItemClickEvent) => setSelectedId(e.dataItem.ID)}\n toolbar={() => {\n return (\n <ListBoxToolbar\n data={associatedUsersFormatted}\n selectedField={SELECTED_FIELD}\n tools={[\n \"remove\",\n ]}\n //data={associatedUsers}\n onToolClick={handleToolBarClick}\n />\n );\n }\n }\n />\n </div>\n : <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}>\n {label}\n </Label>\n <MultiSelect filterable={true} onFilterChange={filterChanged} onChange={onChange} value={associatedUsersFormatted}\n popupSettings={{ className: \"z500\" }} placeholder=\"Select multiple\"\n data={filterBy(endUsersFormatted, filter)}\n dataItemKey=\"ID\" textField=\"Display_Name\" loading={false} /></>\n }\n\n\n </FieldWrapper>\n </div>\n )\n\n}\n\nexport default AssociatedContacts;","import { FieldRenderProps, FieldWrapper } from \"@progress/kendo-react-form\";\nimport { FunctionComponent } from \"react\";\nimport { UserApi } from \"../../../redux/api/UserApi\";\nimport {Label} from \"@progress/kendo-react-labels\";\nimport { DropDownList } from \"@progress/kendo-react-dropdowns\";\n\nconst TeamList: FunctionComponent<FieldRenderProps> = props => {\n const {\n validationMessage,\n touched,\n label,\n id,\n valid,\n disabled,\n hint,\n type,\n optional,\n value,\n teamId,\n data,\n selectedPriority,\n priorityChangeHandler,\n showHint,\n ...others\n } = props;\n const { data: teams } = UserApi.useGetTeamsQuery();\n const selectedTeam = teams?.filter(f=>f.ID === teamId);\n const allTeams = {ID:undefined,Dept_Name: `All ${label}s` }\n return(\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label} \n </Label> \n <div className={\"k-form-field-wrap\"}> \n <DropDownList defaultItem={allTeams} value={selectedTeam?.length > 0 ? selectedTeam[0] : undefined} data={teams} dataItemKey=\"ID\" textField=\"Dept_Name\" popupSettings={{className:'z500' }} {...others} />\n \n </div>\n </FieldWrapper>\n )\n}\n\nexport default TeamList;","import { FieldRenderProps, FieldWrapper } from \"@progress/kendo-react-form\";\nimport { FunctionComponent, useEffect, useState } from \"react\";\nimport { Api } from \"../../../redux/api/BaseApi\";\nimport {Label} from \"@progress/kendo-react-labels\";\nimport { MultiSelect, MultiSelectFilterChangeEvent } from \"@progress/kendo-react-dropdowns\";\nimport { filterBy } from \"@progress/kendo-data-query\";\nimport { UserApi } from '../../../redux/api/UserApi';\n\nconst AssignedStaff: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n teamId,\n staff,\n showMe,\n onChange,\n } = props;\n //const { ticket } = useReduxSelector(state => state.ticketDetails);\n const {data:userProfile} = Api.useGetUserProfileQuery();\n const assignedStaff = staff?.map(ass=> { return {Full_Name:ass?.Contact_Name, ID:ass.Contact_Id}});\n let { data: staffList, isLoading: staffLoading } = UserApi.useGetStaffQuery({ teamId: teamId, includeQueues: true, includeStaffPlusForCompanyId: 0 });\n \n \n const [staffFiltered, setStaff] = useState([])\n\n const onFilter = (event:MultiSelectFilterChangeEvent) =>{\n console.log('Filter',event);\n setStaff(filterBy(staffList?.slice(), event.filter));\n }\n\n useEffect(()=>{\n console.log('Team chnaged',teamId, staffList?.length)\n\n if(showMe)\n staffList = staffList?.map(s=>s.ID === userProfile?.Id ? {...s,Full_Name:'<Me>'}: s );\n\n setStaff(staffList)\n },[staffList]);\n return(\n <FieldWrapper > \n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}>\n {label} \n </Label> \n {/* {JSON.stringify(assignedStaff)} */}\n <div className={\"k-form-field-wrap\"}> \n <MultiSelect filterable={true} popupSettings={{className:'z500'}} onFilterChange={onFilter} onChange={onChange} data={staffFiltered} value={assignedStaff} dataItemKey=\"ID\" textField=\"Full_Name\" loading={staffLoading} />\n </div>\n </FieldWrapper>\n )\n}\n\nexport default AssignedStaff;","import { FieldRenderProps, FieldWrapper } from \"@progress/kendo-react-form\";\nimport { FunctionComponent, useMemo, useRef, useState } from \"react\";\nimport { TicketApi } from \"../../../redux/api/TicketApi\";\nimport { Label, Error } from \"@progress/kendo-react-labels\";\nimport { DropDownList } from \"@progress/kendo-react-dropdowns\";\nimport { Popup } from \"@progress/kendo-react-popup\";\nimport { Menu } from \"@progress/kendo-react-layout\";\nimport { IType } from \"../../../types/IType\";\n\nconst TypeList: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n disabled,\n optional,\n typeId,\n validationMessage,\n onChange,\n } = props;\n const { data: typesList } = TicketApi.useGetTypeListQuery(-1)\n\n const getSelectedPath = (typeId) => {\n let path = '';\n let currentType = typesList?.filter(t => t.ID === typeId)\n if (currentType?.length > 0) {\n let parentType = getSelectedPath(currentType[0].Parent_Id)\n path = (parentType ? parentType + ' > ' : '') + currentType[0].Call_Type\n }\n console.log('getSelectedPath', path)\n return path;\n }\n const selectedPath = useMemo(() => getSelectedPath(typeId), [typeId]);\n\n //const typeItems = typesList?.filter(l=>{l.Level === 1});\n function fillLevelTypes(type: IType[]) {\n return type?.map((t) => {\n const result: any = {\n id: t.ID,\n text: t.Call_Type,\n items: fillLevelTypes(typesList.filter(tf => tf.Parent_Id === t.ID))\n }\n return result;\n });\n }\n\n const typeItems = useMemo(() => fillLevelTypes(typesList?.filter(l => l.Level === 1)), [typesList])\n //console.log('Lets go',typeItems);\n const popRef = useRef<Menu>();\n const dropRef = useRef<DropDownList>();\n const [show, setShow] = useState(false);\n const offSet = useRef({\n left: 0,\n top: 0,\n });\n const onClick = (e) => {\n offSet.current = {\n left: e.nativeEvent.x,\n top: e.nativeEvent.y,\n };\n setShow(!show);\n\n // setTimeout(() => {\n // console.log('clicky', popRef?.current, popRef?.current?.element.focus);\n // popRef.current && popRef.current.element.focus();\n // }, 100);\n };\n\n window.onclick = (e) => {\n //Check whether the user clicked out of the menu\n //console.log('window click', e.target, popRef?.current?.element)\n if (popRef?.current?.element && dropRef?.current?.element && !popRef.current.element.contains(e.target) && !dropRef.current.element.contains(e.target)) {\n setShow(false);\n }\n }\n\n const itemSelected = (e) => {\n console.log('itemSelected', e, popRef?.current)\n\n onChange(e.item);\n\n setShow(false)\n }\n function dropdownBlur(e) {\n //console.log('Debounce the dropdown blur', e);\n //Debounce the dropdown blur otherwise you can't select a top-level itme in the menu\n // setTimeout(() => {\n // setShow(false);\n // }, 30);\n }\n const isValid = !validationMessage;\n const anchor = useRef();\n const errorId = validationMessage ? `${id}_error` : \"\";\n return (\n\n <FieldWrapper >\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label} {validationMessage && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n <div className={\"k-form-field-wrap1 z500\"} ref={anchor}>\n <DropDownList ref={dropRef} validationMessage=\"\" valid={isValid} value={selectedPath} opened={false} onOpen={onClick} onBlur={dropdownBlur} />\n <Popup collision={{ vertical: \"fit\", horizontal: \"fit\" }} anchor={anchor.current} show={show} offset={offSet.current} style={{ width: 300 }}>\n <Menu ref={popRef} items={typeItems} vertical={true} onSelect={itemSelected} style={{ display: \"inline-block\" }} className='z500 ticket-context' />\n </Popup>\n </div>\n </FieldWrapper>\n )\n}\n\nexport default TypeList;","import { IField } from \"../../../types/Form/IForm\";\n\nexport default function dropdownFieldValidator(field: IField) {\n if (!field.VALUES || field.VALUES.length === 0 || !field.VALUES[0] || field.VALUES[0] === '')\n return `*required`\n}","import { IField } from \"../../../types/Form/IForm\";\n\nexport default function numberFieldValidator(field: IField) {\n if (!field.VALUES || field.VALUES.length === 0 || !field.VALUES[0] || field.VALUES[0] === '')\n return `*required`\n}","import { IField } from \"../../../types/Form/IForm\";\nimport dateFieldValidator from \"./DateFieldValidator\";\nimport dropdownFieldValidator from \"./DropdownFieldValidator\";\nimport endUserFieldValidator from \"./EndUserFieldValidator\";\nimport numberFieldValidator from \"./NumberFieldValidator\";\nimport textFieldValidator from \"./TextFieldValidator\";\n\nexport default function validateCustomFields(fields: IField[], closeTicket: boolean) {\n let validators = {};\n fields?.filter(field => field.Is_Required && (field.Required_To === 0 || (field.Required_To === 1 && closeTicket))).map(field => {\n var validMsg = null;\n switch (field.Field_Type_Id) {\n case 1:\n validMsg = textFieldValidator(field);\n break\n case 2:\n validMsg = dropdownFieldValidator(field);\n break\n case 3:\n //DateField\n validMsg = dateFieldValidator(field);\n break\n case 4:\n // TimeField\n validMsg = numberFieldValidator(field);\n break\n case 5:\n // NumericField\n validMsg = numberFieldValidator(field);\n break\n case 8: //End user\n validMsg = endUserFieldValidator(field);\n break\n case 6:\n validMsg = dropdownFieldValidator(field);\n break\n case 7:\n //ClientField\n validMsg = dropdownFieldValidator(field);\n break\n case 9:\n return null//NumericField\n default:\n return null\n }\n if (validMsg)\n validators = { ...validators, ...{ ['field_' + field.ID]: validMsg } };\n })\n //console.log('validateCustomFields',validators)\n return validators;\n}","import { IField } from \"../../../types/Form/IForm\";\n\nexport default function endUserFieldValidator(field: IField) {\n if (!field.VALUES || field.VALUES.length === 0 || !field.VALUES[0] || field.VALUES[0] === '')\n return `*required`\n}","\nimport { IField } from \"../../../types/Form/IForm\";\nimport { isDate } from \"../../../utils/utils\";\n\nexport default function dateFieldValidator(field: IField) {\n\n if (!field.VALUES || field.VALUES.length === 0 || !field.VALUES[0] || !isDate(new Date(field.VALUES[0])))\n return `*required`\n}","import { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs'\nimport React from 'react'\nimport { Link } from 'react-router-dom';\nimport { Api } from '../../redux/api/BaseApi';\nimport { TicketSavedDialogProps } from '../../types/Props/TicketSavedProps'\n\nconst TicketSavedDialog = (props: TicketSavedDialogProps) => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n\n\n return (\n <div>\n <Dialog className='ticket-success' title={<div className=''>{props.title}</div>} onClose={props.toggleDialog} >\n <p\n style={{\n margin: \"25px\",\n textAlign: \"center\",\n }}\n >\n {userProfile.Phrases.CallPhrase + (props.ticketIds.length > 1 ? 's' : '')}\n {props.ticketIds.map(tid => {\n return (\n <Link to={`/deeplink?url=/calls/callhistory.aspx?call_id=${tid}`} target='_blank'> {tid}{props.ticketIds.length > 1 ? ',' : ''}</Link>\n )\n })}\n {(props.ticketIds.length > 1 ? ' were' : ' was') + ' logged successfully.'}\n </p>\n <DialogActionsBar>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base\"\n onClick={props.toggleDialog}\n >\n OK\n </button>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base\"\n onClick={props.viewDetails}\n disabled={props.ticketIds.length > 1}\n >\n View Details\n </button>\n </DialogActionsBar>\n </Dialog>\n </div>\n )\n}\n\nexport default TicketSavedDialog","import { DropDownList } from \"@progress/kendo-react-dropdowns\";\nimport { FieldRenderProps } from \"@progress/kendo-react-form\";\nimport { Label } from \"@progress/kendo-react-labels\";\nimport { FunctionComponent } from \"react\";\nimport { UserApi } from \"../../../redux/api/UserApi\";\n\nconst RoleList: FunctionComponent<FieldRenderProps> = props => {\n const {\n validationMessage,\n touched,\n label,\n id,\n valid,\n disabled,\n hint,\n type,\n optional,\n value,\n uid,\n showHint,\n ...others\n } = props;\n\n const { data: roles, isFetching } = UserApi.useGetRolesQuery(uid, { skip: !uid });\n const defaultRole = roles?.filter(r => r.Default_Role);\n const selectedRole = roles?.filter(r => r.Role_id === value?.Role_id);\n const currentValue = (selectedRole?.length ? selectedRole[0] : undefined) || (defaultRole?.length ? defaultRole[0] : undefined)\n return (\n <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}>\n {label}\n </Label>\n <div className={\"k-form-field-wrap\"}>\n <DropDownList {...others} loading={isFetching} value={currentValue} data={roles} dataItemKey=\"Role_id\" textField=\"Role_Name\" popupSettings={{ className: 'z500', width: 300 }} style={{ maxWidth: 200 }} />\n </div>\n </>\n )\n}\n\nexport default RoleList;","export const Setting = {\n \"Mimic\": 80,\n \"Timepicket Interval\": 93,\n}\n\n","import { Api } from './BaseApi'\nimport { IHours, IStartEnd } from '../../types/System/IHours';\n\nconst SystemApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getHours: build.query<IHours, void>({\n query: () => \"System/Hours\",\n providesTags: [\"GetSystemHours\"],\n }),\n getStartEnd: build.query<IStartEnd, void>({\n query: () => \"System/StartEnd\",\n providesTags: [\"GetSystemStartEnd\"],\n }),\n }),\n\n overrideExisting: false,\n})\n\nexport { SystemApi };","import { DateTimePicker } from '@progress/kendo-react-dateinputs'\nimport { FieldRenderProps } from '@progress/kendo-react-form'\nimport React, { FunctionComponent } from 'react'\nimport { Label } from \"@progress/kendo-react-labels\";\nimport { UserApi } from '../../redux/api/UserApi';\nimport { Setting } from '../../types/Setting/Setting';\nimport { SystemApi } from '../../redux/api/SystemApi';\n\nconst ActionDate: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n actionDate,\n optional,\n onChange\n } = props;\n const { data: startEnd } = SystemApi.useGetStartEndQuery()\n const { data: setting } = UserApi.useGetSettingQuery(Setting['Timepicket Interval'])\n const timeInterval = setting?.Int_Value\n const minTime = setting?.Bool_Value && startEnd?.Item1 && new Date(startEnd?.Item1)\n const maxTime = setting?.Bool_Value && startEnd?.Item2 && new Date(startEnd?.Item2)\n\n const selectedDate = actionDate ? new Date(actionDate) : new Date()\n return (\n <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label}\n </Label>\n {/* Don't validate start and end dates */}\n <DateTimePicker valid={true} onChange={onChange} defaultValue={selectedDate} steps={{ minute: timeInterval }} minTime={minTime} maxTime={maxTime} />\n {/* {JSON.stringify(minTime)} - {JSON.stringify(maxTime)} = {JSON.stringify(systemHours)} */}\n </>\n )\n}\n\nexport default ActionDate;","import { filterBy } from \"@progress/kendo-react-data-tools\";\nimport { mapTree, extendDataItem } from \"@progress/kendo-react-common\";\n\nexport const processTreeData = (data, state, fields) => {\n const { selectField, expandField, dataItemKey, subItemsField } = fields;\n const { expanded, value, filter } = state;\n const filtering = Boolean(filter && filter.value);\n\n return mapTree(\n filtering ? filterBy(data, [filter], subItemsField) : data,\n subItemsField,\n (item) => {\n const props = {\n [expandField]: expanded.includes(item[dataItemKey]),\n [selectField]: value && item[dataItemKey] === value[dataItemKey],\n };\n return filtering\n ? extendDataItem(item, subItemsField, props)\n : { ...item, ...props };\n }\n );\n};\n\nexport const expandedState = (item, dataItemKey, expanded) => {\n const nextExpanded = expanded.slice();\n const itemKey = item[dataItemKey];\n const index = expanded.indexOf(itemKey);\n index === -1 ? nextExpanded.push(itemKey) : nextExpanded.splice(index, 1);\n\n return nextExpanded;\n};","import { Window } from \"@progress/kendo-react-dialogs\"\nimport { useEffect } from \"react\";\nimport { useGetTenantQuery } from \"../../../redux/api/BaseApi\";\nimport { QuickNotePopupProps } from \"../../../types/Props/QuickNotePopupProps\";\nimport { trimChar } from \"../../../utils/utils\";\n\nconst AddQuickNote: React.FC<QuickNotePopupProps> = (props) => {\n const { data: tenant } = useGetTenantQuery();\n\n useEffect(() => {\n const listenForMessage = (ev) => {\n console.log('Lets GO!', ev)\n if (ev.data) {\n let dataObject = JSON.parse(ev.data);\n if (dataObject?.Message && dataObject?.Message === 'Quick_Note_Added') {\n props.onSave(dataObject.ID);\n }\n }\n }\n\n window.addEventListener('message', listenForMessage);\n\n //remove the event listener when component unmounts\n return () => {\n window.removeEventListener('message', listenForMessage);\n };\n }, []);\n\n return (\n <Window className=\"p-0\" modal={true}\n title='Add Quick Note'\n width={800}\n height={650}\n onClose={props.onClose}\n >\n <div className=\"relative flex flex-col grow\">\n {tenant?.Tenant_Url && <iframe name=\"add-quick-note\" height={550} className=\"grow\" src={`${trimChar(tenant?.Tenant_Url, '/')}/Calls/AddQuickNote.aspx`} />}\n </div>\n </Window>\n )\n}\n\nexport default AddQuickNote;","import { FieldRenderProps } from \"@progress/kendo-react-form\";\nimport { FunctionComponent } from \"react\";\nimport { Label } from \"@progress/kendo-react-labels\";\nimport { DropDownTree, DropDownTreeChangeEvent, DropDownTreeExpandEvent } from \"@progress/kendo-react-dropdowns\";\nimport { TicketApi } from \"../../../redux/api/TicketApi\";\nimport React from \"react\";\nimport { expandedState, processTreeData } from \"../../../utils/TreeDataOperations\";\nimport { IQuickNote } from \"../../../types/Ticket/IQuickNotes\";\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport AddQuickNote from \"./AddQuickNote\";\nimport { Api } from \"../../../redux/api/BaseApi\";\nimport './QuickNotes.css'\n\nconst QuickNotesList: FunctionComponent<FieldRenderProps> = props => {\n const {\n quickNoteId,\n label,\n id,\n valid,\n disabled,\n optional,\n } = props;\n const selectField = \"selected\";\n const expandField = \"expanded\";\n const dataItemKey = \"Id\";\n const subItemsField = \"QuickNotes\";\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const fields = { selectField, expandField, dataItemKey, subItemsField };\n const { data: quickNotes, refetch } = TicketApi.useGetQuickNotesQuery();\n const [refetchQuicknotes] = TicketApi.useRefetchQuicknotesMutation();\n const selectedQuickNote = quickNotes?.map(q => q.QuickNotes.find(qn => qn.Id === quickNoteId)).find(qn => qn?.Id === quickNoteId);\n const [value, setValue] = React.useState<IQuickNote>(selectedQuickNote);\n const [expanded, setExpanded] = React.useState(quickNotes?.length > 0 ? [quickNotes?.[0][dataItemKey]] : []);\n const [open, setOpen] = React.useState<boolean>();\n const [popupVisible, setPopupVisible] = React.useState<boolean>();\n\n const onChange = (event: DropDownTreeChangeEvent) => {\n\n //console.log('onChange', event, expanded.includes(event?.value?.Id))\n if (event?.value && event?.value.QuickNotes) {\n //console.log('cat');\n if (!expanded.includes(event?.value.Id))\n setExpanded([event?.value.Id]); //expand\n else\n //let newArray = [...expanded].splice(expanded.indexOf(event?.value.Id)\n setExpanded((oldVal) => {\n let newVal = [...oldVal]\n newVal.splice(expanded.indexOf(event?.value.Id), 1)\n return newVal;\n }); //collaps\n setOpen(true); //stay open\n\n return\n }\n\n setValue(event.value);\n props.onChange(event);\n setOpen(undefined); //Close\n }\n const onExpandChange = React.useCallback(\n (event: DropDownTreeExpandEvent) =>\n setExpanded(expandedState(event.item, dataItemKey, expanded)),\n [expanded]\n );\n\n const treeData = React.useMemo(\n () => {\n console.log('processTreeData', value)\n return processTreeData(quickNotes || [], { expanded, value }, fields)\n },\n\n [quickNotes, expanded, value]\n );\n\n //After a quicknote has beem saved\n const [newId, setNewId] = React.useState<number>(null)\n const quickNoteSaved = (id: number) => {\n setPopupVisible(false);\n setNewId(id)\n refetch()\n }\n\n return (\n <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label}\n </Label>\n <div className={\"flex\"}>\n <DropDownTree data={treeData}\n onBlur={() => setOpen(undefined)}\n opened={open}\n placeholder=\"Select...\"\n value={selectedQuickNote}\n dataItemKey=\"Id\"\n textField=\"Name\"\n subItemsField=\"QuickNotes\"\n onChange={onChange}\n selectField={selectField}\n expandField={expandField}\n onExpandChange={onExpandChange}\n popupSettings={{ width: 500, className: 'quick-note-dropdown' }}\n />\n {userProfile?.Features.Add_Quick_Note && <Button icon='add' title=\"Add Quick Note\" onClick={() => setPopupVisible(true)} formNoValidate={true}></Button>}\n {popupVisible && <AddQuickNote onClose={() => setPopupVisible(false)} onSave={(id) => quickNoteSaved(id)} />}\n </div>\n </>\n )\n}\n\nexport default QuickNotesList;","import { FieldRenderProps } from '@progress/kendo-react-form'\nimport React, { useEffect, useMemo } from 'react'\nimport { TicketApi } from '../../../redux/api/TicketApi';\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport { IStopwatch, StopwatchProps } from '../../../types/Ticket/IStopwatch';\n\nconst Stopwatch: React.FC<FieldRenderProps> = ({ action, actionId, ticketId, isBill, onStart, onStop, onTick }) => {\n\n const { data: stopwatches } = TicketApi.useGetStopwatchesQuery(ticketId)\n const [startStopwatch] = TicketApi.useStartStopwatchMutation()\n const [stopStopwatch] = TicketApi.useStopStopwatchMutation()\n const runningWatches = useMemo(() => stopwatches?.filter(s => s.Is_Bill === (isBill ? true : false) && s.IsTicking === true), [stopwatches, isBill]);\n const isRunning = runningWatches?.length > 0;\n const title = `${isRunning ? 'Stop' : 'Start'} stopwatch`\n const [timer, setTimer] = React.useState<number>();\n\n function stopwatchClicked(e) {\n let props = { ActionId: actionId, TicketId: ticketId, IsBill: isBill ? true : false } as StopwatchProps\n if (isRunning)\n stopStopwatch(props).unwrap().then((data: IStopwatch) => {\n window.clearInterval(timer);\n setTimer(null);\n onStop && onStop(data);\n });\n else {\n if (!action || ((isBill && action.Billable_Time === 0) || (!isBill && action.Non_Billable_Time === 0)) || window.confirm('Starting the stopwatch will remove any existing time, are you sure you want to continue?')) {\n startStopwatch(props).unwrap().then((data: IStopwatch) => {\n //console.log('More Cool!', data)\n onStart && onStart(data);\n });\n }\n }\n }\n\n //Set a timer to keep the time up to date\n useEffect(() => {\n if (runningWatches?.length > 0) {\n let interval = window.setInterval(() => {\n if (runningWatches?.length > 0) {\n onTick && onTick(runningWatches[0]);\n }\n }, 1000);\n onTick && onTick(runningWatches[0]);\n return () => { clearInterval(interval); }\n }\n }, [runningWatches, onTick])\n\n return (\n <>\n {/* {JSON.stringify(action?.HTML_Notes?.length)} */}\n <Button title={title} onClick={stopwatchClicked} formNoValidate={true} type=\"button\">\n {isRunning\n ? <img alt='Stopwatch running' src='./images/stopwatch_on.gif' width={20} height={20} />\n : <img alt='Stopwatch not running' src='./images/stopwatch_off.gif' width={20} height={20} />}\n </Button>\n </>\n )\n}\n\nexport default Stopwatch;","import { MutableRefObject, useState } from \"react\";\nimport { UserApi } from \"../../../redux/api/UserApi\";\nimport { Popup } from \"@progress/kendo-react-popup\";\nimport { IMention } from \"../../../types/User/IMention\";\nimport useEventListener from \"@use-it/event-listener\";\n\nconst ARROWS = {\n up: \"ArrowUp\",\n left: \"ArrowLeft\",\n right: \"ArrowRight\",\n down: \"ArrowDown\",\n};\n\nexport interface IMentionsProps {\n handleOnClick: (person: IMention) => void;\n containerRef: MutableRefObject<HTMLDivElement>;\n text: string;\n}\n\nexport const Mentions = ({ props }: { props: IMentionsProps }) => {\n const { handleOnClick, containerRef, text } = props;\n const { data, isLoading, isError } = UserApi.useGetMentionQuery(text);\n const [scrollIndex, setScrollIndex] = useState(0);\n\n function handleNavigation(e: KeyboardEvent) {\n const defaultBehavior: ScrollIntoViewOptions = { behavior: \"smooth\" };\n let idx: number;\n let mention: IMention;\n\n if (Object.values(ARROWS).includes(e.key)) {\n if (e.key === ARROWS.down) {\n idx = (scrollIndex + 1) % data.length;\n mention = data.at(scrollIndex);\n } else if (e.key === ARROWS.up) {\n idx = (scrollIndex - 1) % data.length;\n mention = data.at(scrollIndex);\n } else if (e.key === ARROWS.left) {\n idx = 0;\n mention = data[0];\n } else if (e.key === ARROWS.right) {\n idx = data.length - 1;\n mention = data[data.length - 1];\n }\n const focusEle = document.getElementById(\n `${mention.ID}-${mention.value}`\n );\n focusEle.scrollIntoView(defaultBehavior);\n setScrollIndex(idx);\n }\n\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleOnClick(data.at(scrollIndex));\n setScrollIndex(0);\n }\n }\n useEventListener(\"keydown\", handleNavigation);\n const iframe = document.querySelector(\"div.k-editor-content iframe\");\n const div = iframe\n ? //@ts-ignore\n (iframe.contentDocument.querySelector(\"div\") as HTMLElement)\n : document.body;\n useEventListener(\"keydown\", handleNavigation, div);\n if (isLoading) return <div>Loading Suggestions</div>;\n if (isError) return <div>More characters needed</div>;\n if (data && data.length) {\n try {\n const sideLength = data ? getImageLength(data[0].img_class) : \"l\";\n return (\n <Popup anchor={containerRef.current} show>\n <ul className=\"max-h-[300px] max-w-[500px] overflow-scroll overflow-x-hidden\">\n {data.map((person, i) => {\n const id = `${person.ID}-${person.value}`;\n let liStyle = \"flex p-1\";\n const cmp =\n scrollIndex >= 0\n ? scrollIndex\n : (data.length - Math.abs(scrollIndex)) % data.length;\n if (data.at(i).ID === data.at(cmp).ID) {\n liStyle = \"bg-green text-white \" + liStyle;\n }\n return (\n <li\n key={id}\n id={id}\n className={liStyle}\n onMouseEnter={() => setScrollIndex(i)}\n >\n <button\n onClick={() => handleOnClick(person)}\n className=\"flex text-sm\"\n >\n <img\n src={person.img}\n width={sideLength}\n height={sideLength}\n alt={person.label}\n className=\"mr-1 rounded-full\"\n />\n <div className=\"flex flex-col place-content-between text-left\">\n <span>{person.label}</span>\n <span className=\"text-xs opacity-70\">{person.team}</span>\n </div>\n </button>\n </li>\n );\n })}\n </ul>\n </Popup>\n );\n } catch (e) {\n console.log(e);\n return <></>;\n }\n } else {\n return <></>;\n }\n};\n\nfunction getImageLength(payload: string) {\n switch (payload) {\n case \"n\":\n return 0;\n case \"s\":\n return 20;\n case \"l\":\n return 35;\n default:\n return 35;\n }\n}\n","import { TaggedUserType } from \"../../../slices/TicketSlice\";\n\nexport function CallDescToTaggedDescriptionConverter(\n callDesc: string,\n taggedUsers: TaggedUserType[]\n) {\n let newDesc = callDesc;\n taggedUsers.forEach((tag) => {\n if (callDesc.includes(tag.label)) {\n const newValue = newDesc.replace(tag.label, `[${tag.value}]`);\n newDesc = newValue;\n }\n });\n return newDesc;\n}\n\nexport function ShowMentions(mentionsText: string, minChars: number) {\n return (\n mentionsText.length !== 0 &&\n mentionsText.length >= minChars &&\n mentionsText.length <= 6\n );\n}\n","import { AnyAction, ThunkDispatch } from \"@reduxjs/toolkit\";\nimport { Dispatch, MutableRefObject, SetStateAction } from \"react\";\nimport { TaggedUserType } from \"../../../slices/TicketSlice\";\nimport { IMention } from \"../../../types/User/IMention\";\nimport { CallDescToTaggedDescriptionConverter } from \"./utils\";\nimport { EditorChangeEvent } from \"@progress/kendo-react-editor\";\nimport { TextAreaChangeEvent } from \"@progress/kendo-react-inputs\";\n\nexport interface IMentionsHandle {\n dispatch: ThunkDispatch<any, any, any>;\n SetDescription(action: string): AnyAction;\n SetTaggedDescription(action: string): AnyAction;\n SetDescription(action: string): AnyAction;\n setAtActivated: Dispatch<SetStateAction<number>>;\n setMentionsText: Dispatch<SetStateAction<string>>;\n TaggedUsers: TaggedUserType[];\n}\n\nexport interface IMentionsHandleOnClick extends IMentionsHandle {\n SetTaggedUsers(action: TaggedUserType[]): AnyAction;\n textAreaRef: MutableRefObject<any>;\n mentionsText: string;\n}\n\nexport function DefaultMentionsHandleOnClick(\n person: IMention,\n required: IMentionsHandleOnClick\n) {\n const {\n dispatch,\n SetDescription,\n SetTaggedDescription,\n SetTaggedUsers,\n TaggedUsers,\n setAtActivated,\n setMentionsText,\n mentionsText,\n textAreaRef,\n } = required;\n setAtActivated(-1);\n setMentionsText(\"\");\n const idx = textAreaRef.current.element.current.selectionStart;\n\n const whole = textAreaRef.current.value;\n const prefixCallDesc = whole.substring(0, idx - mentionsText.length);\n const suffixCallDesc = whole.substring(idx);\n const additionCallDesc = `[[@${person.label}]]`;\n const newCallDesc = prefixCallDesc + additionCallDesc + suffixCallDesc;\n dispatch(SetDescription(newCallDesc));\n\n const newTag: TaggedUserType = { label: person.label, value: person.value };\n const newTaggedUsers: TaggedUserType[] = [...TaggedUsers, newTag];\n dispatch(SetTaggedUsers(newTaggedUsers));\n\n const newTaggedDescription = CallDescToTaggedDescriptionConverter(\n newCallDesc,\n newTaggedUsers\n );\n dispatch(SetTaggedDescription(newTaggedDescription));\n textAreaRef.current.element.current.focus()\n}\n\nexport interface IMentionsHandleOnChange extends IMentionsHandle {\n minChars: string;\n atActivated: number;\n}\n\nexport function MentionsHandleOnChange(\n e: EditorChangeEvent | TextAreaChangeEvent,\n eType: string,\n required: IMentionsHandleOnChange\n) {\n const {\n dispatch,\n SetDescription,\n SetTaggedDescription,\n TaggedUsers,\n setAtActivated,\n setMentionsText,\n atActivated,\n minChars,\n } = required;\n let val: string;\n let newE: EditorChangeEvent | TextAreaChangeEvent;\n switch (eType) {\n case \"TextAreaChangeEvent\":\n newE = e as TextAreaChangeEvent;\n val = newE.target.value;\n break;\n case \"EditorChangeEvent\":\n newE = e as EditorChangeEvent;\n val = newE.html;\n break;\n }\n\n dispatch(SetDescription(val));\n\n const newTaggedDescription = CallDescToTaggedDescriptionConverter(\n val,\n TaggedUsers\n );\n dispatch(SetTaggedDescription(newTaggedDescription));\n // captures the form @name limited to max five characters with custom min characters.\n // const atRegex = new RegExp(\n // `^@\\\\w{${minChars},5}|([^[]@\\\\w{${minChars},5})`,\n // \"m\"\n // );\n // const maxRegex = new RegExp(`^@\\\\w{6}|([^[]@\\\\w{6})`, \"m\");\n const atRegex = new RegExp(\n `^@\\\\w{${minChars},6}|[^[]@\\\\w{${minChars},6}`,\n \"m\"\n );\n const maxRegex = new RegExp(`^@\\\\w{6,}|[^[]@\\\\w{6,}`, \"m\");\n const spaceBreakRegex = new RegExp(\"^@\\\\w+\\\\s|[^[]@\\\\w+\\\\s\", \"m\");\n // console.log(\"atRegex source: \", atRegex.source);\n // console.log(\"maxRegex source: \", maxRegex.source);\n // console.log(\"maxRegex: \", maxRegex.test(val));\n // console.log(\"atRegex: \", atRegex.test(val));\n // console.log(\"atActivated: \", atActivated);\n\n const atRegexMatch = atRegex.test(val);\n const maxRegexMatch = maxRegex.test(val);\n const spaceBreakMatch = spaceBreakRegex.test(val);\n\n if (\n atRegexMatch &&\n !maxRegexMatch &&\n !spaceBreakMatch &&\n atActivated === -1\n ) {\n setAtActivated(1);\n } else if (\n (!atRegexMatch || maxRegexMatch || spaceBreakMatch || val.length === 0) &&\n atActivated >= 0\n ) {\n // reset\n setAtActivated(-1);\n setMentionsText(\"\");\n // console.log(\"reset atActivated\");\n } else if (atActivated >= 0) {\n const valMatch = val.match(atRegex);\n // const setActive =\n // valMatch[0].slice(0, 1) === \" \" ? valMatch.index + 1 : valMatch.index;\n const setActive = valMatch.index + 1;\n const res = valMatch[0].trim().replace(\">\", \"\");\n setAtActivated(setActive);\n setMentionsText(res);\n\n // console.log(\"setActive: \", `\"${setActive}\"`);\n // console.log(\n // \"replace at: \",\n // `\"${val.slice(setActive, setActive + res.length)}\"`\n // );\n // console.log(\"res: \", `\"${res}\"`);\n }\n}\n\nexport interface IMentionsHandleOnClickForTextEditor extends IMentionsHandle {\n atActivated: number;\n SetTaggedUsers(action: TaggedUserType[]): AnyAction;\n mentionsText: string;\n HTML_Notes: string;\n}\nexport function MentionsHandleOnClickForTextEditor(\n person: IMention,\n required: IMentionsHandleOnClickForTextEditor\n) {\n const {\n dispatch,\n SetDescription,\n SetTaggedDescription,\n SetTaggedUsers,\n TaggedUsers,\n setAtActivated,\n atActivated,\n setMentionsText,\n mentionsText,\n HTML_Notes,\n } = required;\n setAtActivated(-1);\n setMentionsText(\"\");\n\n const endOfString = atActivated + mentionsText.length;\n const prefixHTML_Notes = HTML_Notes.slice(0, atActivated);\n const suffixHTML_Notes = HTML_Notes.substring(endOfString).replace(\n \"<p></p>\",\n \"\"\n );\n const additionHTML_Notes = `[[@${person.label}]]`;\n const newHTML_Notes =\n prefixHTML_Notes + additionHTML_Notes + suffixHTML_Notes;\n dispatch(SetDescription(newHTML_Notes));\n\n const newTag: TaggedUserType = { label: person.label, value: person.value };\n const newTaggedUsers: TaggedUserType[] = [...TaggedUsers, newTag];\n dispatch(SetTaggedUsers(newTaggedUsers));\n\n const newTaggedDescription = CallDescToTaggedDescriptionConverter(\n newHTML_Notes,\n newTaggedUsers\n );\n dispatch(SetTaggedDescription(newTaggedDescription));\n const iframe = document.querySelector(\"div.k-editor-content iframe\");\n //@ts-ignore\n const div = iframe.contentDocument.querySelector(\"div\") as HTMLElement;\n div.focus();\n\n // console.log(\"atActivated: \", atActivated);\n // console.log(\"HTML_Notes: \", HTML_Notes);\n // console.log(\"endOfString: \", endOfString);\n // console.log(\"prefixHTML_Notes: \", prefixHTML_Notes);\n // console.log(\"suffixHTML_Notes: \", suffixHTML_Notes);\n // console.log(\"newHTML_Notes: \", newHTML_Notes);\n // console.log(\"newTaggedDescription: \", newTaggedDescription);\n\n // console.log(\"iframe: \", iframe);\n // console.log(\"div: \", div);\n}\n","import {\n Editor,\n EditorChangeEvent,\n EditorTools,\n} from \"@progress/kendo-react-editor\";\nimport { useRef, useState } from \"react\";\nimport { UserApi } from \"../../redux/api/UserApi\";\nimport { useReduxDispatch, useReduxSelector } from \"../../redux/hooks\";\nimport { IMentionsProps, Mentions } from \"./Mentions/Mentions\";\nimport { IMention } from \"../../types/User/IMention\";\nimport {\n IMentionsHandleOnChange,\n IMentionsHandleOnClickForTextEditor,\n MentionsHandleOnChange,\n MentionsHandleOnClickForTextEditor,\n} from \"./Mentions/Handlers\";\nimport { ShowMentions } from \"./Mentions/utils\";\nimport { SetTaggedUsers } from \"../../slices/TicketSlice\";\nimport { SetHTML_Notes, SetTaggedDescription } from \"../../slices/ActionSlice\";\n\nconst TextEditor = () => {\n const { data } = UserApi.useGetMentionConfigQuery();\n\n const [atActivated, setAtActivated] = useState(-1);\n const [mentionsText, setMentionsText] = useState(\"\");\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const TaggedUsers = useReduxSelector(\n (state) => state.ticketDetails.TaggedUsers\n );\n const HTML_Notes = useReduxSelector(\n (state) => state.actionDetails.action.HTML_Notes\n );\n const dispatch = useReduxDispatch();\n const minChars = data ? data.Min_Chars - 1 : 0;\n\n function handleOnClick(person: IMention) {\n const required: IMentionsHandleOnClickForTextEditor = {\n dispatch: dispatch,\n SetDescription: SetHTML_Notes,\n SetTaggedDescription: SetTaggedDescription,\n SetTaggedUsers: SetTaggedUsers,\n TaggedUsers: TaggedUsers,\n setAtActivated: setAtActivated,\n atActivated: atActivated,\n setMentionsText: setMentionsText,\n mentionsText: mentionsText,\n HTML_Notes: HTML_Notes,\n };\n MentionsHandleOnClickForTextEditor(person, required);\n }\n\n function handleOnChange(e: EditorChangeEvent) {\n const eType = \"EditorChangeEvent\";\n const required: IMentionsHandleOnChange = {\n dispatch: dispatch,\n SetDescription: SetHTML_Notes,\n SetTaggedDescription: SetTaggedDescription,\n TaggedUsers: TaggedUsers,\n setAtActivated: setAtActivated,\n setMentionsText: setMentionsText,\n atActivated: atActivated,\n minChars: minChars.toString(),\n };\n MentionsHandleOnChange(e, eType, required);\n }\n\n const mentionsProps: IMentionsProps = {\n handleOnClick: handleOnClick,\n containerRef: containerRef,\n text: mentionsText,\n };\n\n const {\n Bold,\n Italic,\n Underline,\n Strikethrough,\n AlignLeft,\n AlignCenter,\n AlignRight,\n AlignJustify,\n OrderedList,\n UnorderedList,\n Undo,\n Redo,\n FontSize,\n FontName,\n FormatBlock,\n Link,\n Unlink,\n ViewHtml,\n } = EditorTools;\n\n const styles = `\n body {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;\n }\n`;\n const onMount = (event) => {\n const iframeDocument = event.dom.ownerDocument;\n const style = iframeDocument.createElement(\"style\");\n style.appendChild(iframeDocument.createTextNode(styles));\n iframeDocument.head.appendChild(style);\n };\n\n return (\n <div ref={containerRef}>\n <Editor\n style={{ height: \"220px\" }}\n onChange={handleOnChange}\n onMount={onMount}\n value={HTML_Notes}\n tools={[\n [Bold, Italic, Underline, Strikethrough],\n [AlignLeft, AlignCenter, AlignRight, AlignJustify],\n [OrderedList, UnorderedList],\n FontSize,\n FontName,\n FormatBlock,\n [Undo, Redo],\n [Link, Unlink, ViewHtml],\n ]}\n />\n {ShowMentions(mentionsText, minChars) && (\n <Mentions props={mentionsProps} />\n )}\n </div>\n );\n};\n\nexport default TextEditor;\n","import { Field } from \"@progress/kendo-react-form\";\nimport TextEditor from \"../../Common/TextEditor\";\n\nconst ACTION_LOWERCASE = \"action\";\nexport const ActionNoteTextEditor = () => {\n return (\n <div className=\"inline-block w-full pt-2 align-top\">\n <Field\n id={ACTION_LOWERCASE}\n name={ACTION_LOWERCASE}\n component={TextEditor}\n />\n </div>\n );\n};\n","import { Field, FieldRenderProps } from '@progress/kendo-react-form';\nimport React, { FunctionComponent, useEffect } from 'react'\nimport StaffList from '../../User/ListControls/StaffList';\nimport { IAction, IActionUI } from '../../../types/Ticket/IAction';\nimport RoleList from '../../Ticket/ListControls/RoleList';\nimport { Api } from '../../../redux/api/BaseApi';\nimport Time from '../../Common/Time';\nimport { Checkbox } from '@progress/kendo-react-inputs';\nimport { UserApi } from '../../../redux/api/UserApi';\nimport ActionDate from '../ActionDate';\nimport QuickNotes from '../../Ticket/QuickNotes/QuickNotesList';\nimport { TicketApi } from '../../../redux/api/TicketApi';\nimport { IQuickNoteCategory } from '../../../types/Ticket/IQuickNotes';\nimport { useReduxDispatch, useReduxSelector } from '../../../redux/hooks';\nimport Stopwatch from '../../Ticket/FormControls/Stopwatch';\nimport { IStopwatch } from '../../../types/Ticket/IStopwatch';\nimport { Error } from \"@progress/kendo-react-labels\";\nimport * as ActionSlice from '../../../slices/ActionSlice';\nimport { PRIVATE_ACTION_ID } from '../../../slices/ActionSlice';\nimport { ActionNoteTextEditor } from './ActionNoteTextEditor';\n\nconst ActionNote: FunctionComponent<FieldRenderProps> = formRenderProps => {\n const {\n companyId,\n statusId,\n } = formRenderProps;\n const dispatch = useReduxDispatch();\n const { action, settings } = useReduxSelector(state => state.actionDetails);\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { data: status } = TicketApi.useGetStatusQuery(statusId, { skip: !statusId })\n const addTimeSettings = { canAddTime: !status || status?.Allow_Add_Time, warning: `No time can be added because it is disabled for this ${userProfile?.Phrases.CallPhrase} Status (${status?.Call_Status})` }\n const { data: author } = UserApi.useGetUserByIdQuery(action?.Staff_Id || userProfile?.Id)\n //const [actionNote, setActionNote] = React.useState<IAction>(action); \n const [quickNoteId, setQuickNoteId] = React.useState(action?.Quick_Note_Id);\n const { data: quickNote } = TicketApi.useGetQuickNoteAsActionQuery({ id: action?.Quick_Note_Id, ticketId: 0 }, { skip: !action?.Quick_Note_Id })\n const authorChanged = (e: { value: any }) => { fireUpdate({ ...action, Role_Id: 0, Staff_Id: e.value.length > 0 ? e.value[0] : null }) }\n const privateChanged = (e: { value: any }) => {\n let actionTypeId = e.value ? PRIVATE_ACTION_ID : undefined;\n dispatch(ActionSlice.SetUISettings({ ...settings, Bill_Time_Enabled: actionTypeId !== PRIVATE_ACTION_ID, NonBill_Time_Enabled: actionTypeId !== PRIVATE_ACTION_ID } as IActionUI));\n fireUpdate({ ...action, Action_Type_Id: actionTypeId, Billable_Time: e.value ? 0 : action.Billable_Time, Non_Billable_Time: e.value ? 0 : action.Non_Billable_Time })\n }\n const nonBillChanged = (e: { value: any }) => { fireUpdate({ ...action, Non_Billable_Time: e.value }) }\n const billChanged = (e: { value: any }) => { fireUpdate({ ...action, Billable_Time: e.value }) }\n const roleChanged = (e: { value: any }) => { fireUpdate({ ...action, Role_Id: e.value.Role_id }) }\n // const noteChanged = (e: { value: any }) => { fireUpdate({ ...action, HTML_Notes: e.value === '<p></p>' ? '' : e.value }) }\n const quickNoteChanged = (e: { value: IQuickNoteCategory }) => {\n if (!e.value || !action?.HTML_Notes || window.confirm(`Changing the Quick Note will REPLACE all text in the ${userProfile.Phrases.Action} Note. Are you sure you want to continue?`)) {\n fireUpdate({ ...action, Quick_Note_Id: e.value?.Id })\n //console.log('fireUpdate', e);\n //onQuickNoteChanged(e.value)\n }\n }\n const pinChanged = (e: { value: any }) => { fireUpdate({ ...action, Pinned: e.value }) }\n const skipChanged = (e: { value: any }) => { fireUpdate({ ...action, SkipActionEmail: e.value }) }\n const dateChanged = (e: { value: any }) => { fireUpdate({ ...action, Action_Dt: e.value?.toISOString() }) }\n const fireUpdate = React.useCallback((action: IAction) => {\n //console.log('fireUpdate')\n //setActionNote(action);\n //formRenderProps.onChange({ value: action });\n dispatch(ActionSlice.SetAction(action));\n }, [dispatch]);\n\n const stopwatchTicked = (e: IStopwatch) => {\n if (action) {\n //console.log('stopwatchTicked', e.action?.HTML_Notes?.length, action?.HTML_Notes?.length, action?.HTML_Notes?.length)\n\n var delta = Math.abs(new Date().getTime() - new Date(e.Start_Dt + 'Z').getTime()) / 1000;\n var minutes = Math.floor(delta / 60);\n var time = { Billable_Time: action.Billable_Time, Non_Billable_Time: action.Non_Billable_Time }\n if (e.Is_Bill) time.Billable_Time = minutes\n else time.Non_Billable_Time = minutes\n\n //fireUpdate({ ...action, ...time })\n //onBillChanged(time.Billable_Time);\n e.Is_Bill\n ? dispatch(ActionSlice.SetBill(time.Billable_Time))\n : dispatch(ActionSlice.SetNonBill(time.Non_Billable_Time))\n }\n }\n const stopwatchStarted = (e: IStopwatch) => {\n let note = action?.HTML_Notes || '';\n\n //new Date(e.Start_Dt)\n\n note += `Stopwatch started at ${new Date(e.Start_Dt).toLocaleString()} by ${userProfile.F_Name} ${userProfile.L_Name}<br/>`\n\n //Stopwatch started\n dispatch(ActionSlice.SetUISettings({ ...settings, Bill_Time_Enabled: e.Is_Bill ? false : settings.Bill_Time_Enabled, NonBill_Time_Enabled: e.Is_Bill ? settings.NonBill_Time_Enabled : false } as IActionUI));\n fireUpdate({ ...action, HTML_Notes: note })\n }\n const stopwatchStopped = (e: IStopwatch) => {\n if (e) {\n let note = action?.HTML_Notes || '';\n\n note += `Stopwatch stopped at ${new Date(e.Stop_Dt).toLocaleString()} by ${userProfile.F_Name} ${userProfile.L_Name}<br/>`\n\n //Stopwatch started\n dispatch(ActionSlice.SetUISettings({ ...settings, Bill_Time_Enabled: e.Is_Bill ? true : settings.Bill_Time_Enabled, NonBill_Time_Enabled: e.Is_Bill ? settings.NonBill_Time_Enabled : true } as IActionUI));\n fireUpdate({ ...action, HTML_Notes: note })\n }\n }\n\n useEffect(() => {\n //console.log('sActionNote.tsx: Status useEffect', status)\n if (status && !status.Allow_Add_Time && (action.Billable_Time > 0 || action.Non_Billable_Time > 0)) {\n //Remove time if isallowed by the Call status\n fireUpdate({ ...action, Billable_Time: 0, Non_Billable_Time: 0 })\n }\n }, [status, fireUpdate, action])\n\n // useEffect(() => {\n // console.log('ActionNote.tsx: action useEffect', action?.HTML_Notes?.length)\n // setActionNote(action);\n // }, [action])\n\n\n useEffect(() => {\n //console.log('quickNote useEffect', quickNote)\n if (quickNote && quickNoteId !== action.Quick_Note_Id) {\n let newAction = { ...action }\n\n //Bill / Non Bill\n if (quickNote.Billable_Time) newAction.Billable_Time = quickNote.Billable_Time\n if (quickNote.Non_Billable_Time) newAction.Non_Billable_Time = quickNote.Non_Billable_Time\n\n //Private\n newAction.Action_Type_Id = quickNote.Is_Private_Action ? PRIVATE_ACTION_ID : undefined;\n\n //console.log('Set Action note', quickNote.Action_Notes, quickNote.Action_Notes.indexOf('\\r\\n'), quickNote.Action_Notes.indexOf('\\n'));\n //Set Action note\n fireUpdate({ ...newAction, HTML_Notes: quickNote.HTML_Notes || quickNote.Action_Notes?.replaceAll(/(?:\\r\\n|\\r|\\n)/g, '<br>') })\n dispatch(ActionSlice.SetUISettings({ ...settings, Bill_Time_Enabled: newAction.Action_Type_Id !== PRIVATE_ACTION_ID, NonBill_Time_Enabled: newAction.Action_Type_Id !== PRIVATE_ACTION_ID } as IActionUI));\n\n setQuickNoteId(quickNote?.Quick_Note_Id)\n }\n }, [quickNote])\n return (\n <>\n <div className='inline-block w-full lg:w-4/5 align-top '>\n {userProfile?.Features?.Show_Author &&\n <div className='inline-block w-full sm:w-1/4 sm:pr-3 align-top'>\n <Field\n id={\"author\"}\n name={\"author\"}\n label={\"Author\"}\n onChange={authorChanged}\n values={[action?.Staff_Id || userProfile?.Id]}\n component={StaffList}\n companyId={companyId || userProfile.Company_Id}\n currentUserTop={true}\n showMe={true}\n />\n </div>}\n <div className='inline-block w-full sm:w-1/4 sm:pr-3 align-top'>\n <Field\n id={\"role\"}\n name={\"role\"}\n label={userProfile ? userProfile?.Phrases.Role : '...'}\n onChange={roleChanged}\n uid={author?.UId}\n value={action?.Role_Id}\n component={RoleList}\n />\n </div>\n <div className='inline-block w-full md:1/2 sm:w-1/4 align-top bg-yellow'>\n <Field\n id={\"quick-notes\"}\n name={\"quick-notes\"}\n label={\"Quick notes\"}\n component={QuickNotes}\n quickNoteId={action?.Quick_Note_Id}\n onChange={quickNoteChanged}\n />\n </div>\n {userProfile?.Features?.Set_Action_Date &&\n <div className='inline-block w-full sm:w-1/4 sm:pl-3 align-top '>\n <Field\n id={\"actionDate\"}\n name={\"actionDate\"}\n label={\"Date\"}\n actionDate={action?.Action_Dt}\n onChange={dateChanged}\n component={ActionDate} />\n </div>}\n <ActionNoteTextEditor />\n </div>\n <div className='inline-block w-full lg:w-1/5 pl-2 bg-red1'>\n {!addTimeSettings.canAddTime &&\n\n <div className='inline-block w-full'>\n <Error>{addTimeSettings.warning}</Error>\n </div>\n }\n {addTimeSettings.canAddTime && <>\n <div className='inline-block lg:w-full w-1/2 '>\n <Field\n id={\"bill\"}\n name={\"bill\"}\n label={userProfile?.Features?.Non_Bill_Time ? \"Bill (hrs)\" : \"Time (hrs)\"}\n component={Time}\n mins={action?.Billable_Time}\n disabled={settings && !settings?.Bill_Time_Enabled}\n onChange={billChanged}\n />\n {userProfile?.Features?.Display_Stopwatch && action?.Action_Type_Id !== 7 &&\n <Field\n id={\"bill-stop-watch\"}\n name={\"bill-stop-watch\"}\n component={Stopwatch}\n isBill={true}\n mins={action?.Bill_Min}\n action={action}\n onStart={stopwatchStarted}\n onStop={stopwatchStopped}\n onTick={stopwatchTicked}\n />}\n </div>\n {userProfile?.Features?.Non_Bill_Time &&\n <div className='inline-block lg:w-full w-1/2 '>\n <Field\n id={\"nonbill\"}\n name={\"nonbill\"}\n label={\"Non-Bill (hrs)\"}\n component={Time}\n disabled={settings && !settings.NonBill_Time_Enabled}\n mins={action?.Non_Billable_Time}\n onChange={nonBillChanged}\n />\n {userProfile?.Features?.Display_Stopwatch && action?.Action_Type_Id !== 7 &&\n <Field\n id={\"nonbill-stop-watch\"}\n name={\"nonbill-stop-watch\"}\n component={Stopwatch}\n mins={action?.Call_Id}\n onStart={stopwatchStarted}\n onStop={stopwatchStopped}\n onTick={stopwatchTicked}\n />}\n </div>}\n </>}\n {/* Private notes feature */}\n {userProfile?.Features?.Private_Actions &&\n <div className='inline-block lg:w-full w-1/2 p-2'>\n <Field\n id={\"private\"}\n name={\"private\"}\n label={\"Private\"}\n component={Checkbox}\n checked={action?.Action_Type_Id === 7}\n onChange={privateChanged}\n />\n </div>}\n {userProfile?.Features?.Pinned_Actions &&\n <div className='inline-block lg:w-full w-1/2 p-2'>\n <Field\n id={\"pin\"}\n name={\"pin\"}\n label={\"Pin to Top\"}\n component={Checkbox}\n checked={action?.Pinned}\n onChange={pinChanged}\n />\n </div>}\n {userProfile?.Features?.Skip_Action_Notifications &&\n <div className='inline-block lg:w-full w-1/2 p-2'>\n <Field\n id={\"skip\"}\n name={\"skip\"}\n label={\"Skip Notification\"}\n component={Checkbox}\n onChange={skipChanged}\n />\n </div>}\n </div>\n </>\n )\n}\n\nexport default ActionNote;","import { MultiSelect } from '@progress/kendo-react-dropdowns';\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport React, { FunctionComponent, useState } from 'react'\nimport { Label } from \"@progress/kendo-react-labels\";\nimport { ClientApi } from '../../redux/api/ClientApi';\nimport { Api } from '../../redux/api/BaseApi';\nimport {\n Hint,\n} from \"@progress/kendo-react-labels\";\n\nconst ClientTypeList: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n clientTypeIds,\n onChange,\n placeholder,\n ...others\n } = props;\n\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const [opened, setOpened] = useState(false);\n const [values, setValues] = useState([]);\n const { data: clientTypes } = ClientApi.useGetClientTypesQuery()\n const selectClientTypes = clientTypes?.filter(ct => clientTypeIds?.indexOf(ct.ID) > -1);\n\n const handleSingleChange = (event) => {\n console.log('handleSingleSelect', event)\n let foundItem = values.filter(v => v.ID === event.value.ID)\n let newArray = [...values] //clone\n\n if (foundItem?.length > 0) {\n newArray.splice(values.indexOf(foundItem[0]), 1)\n setValues(newArray);\n }\n else {\n newArray = [...values, event.value]\n setValues(newArray);\n }\n }\n\n const itemRender = (li, itemProps) => {\n let foundItem = values?.filter(v => v.ID === itemProps.dataItem[\"ID\"])\n const itemChildren = (\n <span>\n <input type=\"checkbox\" checked={foundItem?.length > 0} onChange={() => console.log('Changed')}\n onMouseDown={(e) => { e.preventDefault(); }}\n />\n {li.props.children}\n </span>\n );\n return React.cloneElement(li, li.props, itemChildren);\n }\n\n const ctFilterChangeHandler = (e) => {\n console.log('ctFilterChangeHandler', e)\n }\n\n return (\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}>\n {label}\n </Label>\n {/* <DropDownList opened={opened}\n onFocus={() => { setOpened(true) }}\n onBlur={() => { setOpened(false) }}\n title={values.map(v => v.Company_Type_Name).join(', ')}\n value={!values?.length ? { Company_Type_Name: 'Filter...' } : values?.length === 1 ? { ID: 0, Company_Type_Name: 'Check All' } : { Company_Type_Name: `${values?.length} items selected` }}\n data={clientTypes}\n textField=\"Company_Type_Name\"\n itemRender={itemRender}\n defaultItem={{ ID: 0, Company_Type_Name: 'Check All' }}\n onChange={handleSingleChange}\n /> */}\n <MultiSelect onChange={onChange}\n disabled={disabled}\n opened={opened}\n value={selectClientTypes}\n onFocus={() => { setOpened(true) }}\n onBlur={() => { setOpened(false) }}\n placeholder={placeholder || 'Filter...'}\n data={clientTypes}\n textField=\"Company_Type_Name\"\n />\n {disabled && (\n <Hint direction={\"start\"}>\n Settings are not editable due to {userProfile?.Phrases.CallPhrase} Access Control permissions\n </Hint>\n )}\n </FieldWrapper>\n )\n}\n\nexport default ClientTypeList","import { Field } from '@progress/kendo-react-form';\nimport React from 'react'\nimport { Api } from '../../redux/api/BaseApi';\nimport { UserApi } from '../../redux/api/UserApi';\nimport { IClientTypeFilter } from '../../types/User/IClientTypeFilter';\nimport ClientTypeList from './ClientTypeList'\n\nexport const ClientTypeFilter = () => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { data: clientTypeFilters } = UserApi.useGetClientTypeFiltersQuery();\n const [saveClientTypeFilter] = UserApi.usePostClientTypeFilterMutation();\n const disabled = userProfile?.Features.Client_Type_Filter_Disabled;\n\n const clientTypeListChanged = (e) => {\n console.log('clientTypeListChanged', e, e.target.value)\n let currentTypeIds = clientTypeFilters?.map(ct => ct.Company_Type_Id)\n let newIds = e.value.map(ct => ct.ID)\n //Added\n e.value.map(ct => currentTypeIds.indexOf(ct.ID) === -1 && saveClientTypeFilter({ Company_Type_Id: ct.ID, Checked: true } as IClientTypeFilter))\n\n //Removed\n clientTypeFilters?.filter(c => c.Checked).map(cur => newIds.indexOf(cur.Company_Type_Id) === -1 && saveClientTypeFilter({ Company_Type_Id: cur.Company_Type_Id, Checked: false } as IClientTypeFilter))\n }\n return (\n <Field\n disabled={disabled}\n label={`${userProfile?.Phrases.Client} Type Filter`}\n name=\"cleintTtypeList\"\n onChange={clientTypeListChanged}\n component={ClientTypeList}\n clientTypeIds={clientTypeFilters?.filter(c => c.Checked).map(ct => ct.Company_Type_Id)}\n />\n\n )\n}\n","import { FieldRenderProps } from '@progress/kendo-react-form';\nimport { ListBox, ListBoxItemClickEvent, ListBoxToolbar } from '@progress/kendo-react-listbox';\nimport React, { FC, useEffect } from 'react'\nimport { UserApi } from '../../../redux/api/UserApi';\nimport { useReduxDispatch } from '../../../redux/hooks';\nimport { IStaff } from '../../../types/IStaff';\nimport * as TicketSlice from '../../../slices/TicketSlice';\nimport UserFynd from './UserFynd';\n\nconst BulkContacts: FC<FieldRenderProps> = props => {\n const {\n bulkContactIds,\n onChange,\n } = props;\n\n const dispatch = useReduxDispatch();\n const { data: bulkUsers } = UserApi.useGetUsersByIdsQuery(bulkContactIds?.length ? bulkContactIds?.join(',') : '0');\n //const { data: assContactConfig } = Api.useGetAssContactConfigQuery(companyTypeId, { skip: !companyTypeId });\n //const [filter, setFilter] = useState<FilterDescriptor>(null);\n //const [contactsIds, setContactIds] = React.useState(bulkContactIds || []);\n const [selectedId, setSelectedId] = React.useState();\n const SELECTED_FIELD = \"selected\";\n const bulkUsersFormatted = setDisplayName(bulkUsers) || [];\n\n function setDisplayName(data) {\n return data?.map(a => {\n return {\n ...a,\n \"Display_Name\":\n a[a.Secondary_User_Classification] ?\n `${a.FullName} - ${a[a.Secondary_User_Classification]}`\n : a.FullName,\n [SELECTED_FIELD]: a.ID === selectedId\n }\n })\n }\n\n // const bulkContactSelected = (e) => {\n // console.log('bulkContactSelected', contactsIds, e.Contact_Id, [...contactsIds, e.Contact_Id])\n\n // let newArray = [...contactsIds, e.Contact_Id];\n // setContactIds(newArray)\n\n // onChange({ value: newArray.map(g => { return { ID: g } as IStaff }) });\n\n // console.log('bulkContactSelected', newArray?.length)\n // }\n\n\n const handleToolBarClick = (e) => {\n let toolName = e.toolName || \"\";\n if (toolName === \"remove\") {\n let newArray = [...bulkContactIds];\n newArray.splice(newArray.indexOf(selectedId), 1)\n //setContactIds(newArray)\n dispatch(TicketSlice.SetBulkContacts(newArray.map(g => { return { ID: g } as IStaff })))\n }\n };\n\n //Set the Client\n useEffect(() => {\n //Single end user\n //if (bulkUsers.length === 1)\n // dispatch(TicketSlice.SetEndUserUid(bulkUsers[0].UId))\n if (bulkUsers?.length > 0) {\n //No client / project etc.\n let clients = [...new Set(bulkUsers.map(item => item.Company_Id))];\n console.log('multiple clients?', clients)\n dispatch(TicketSlice.SetEndUserUid(null))\n dispatch(TicketSlice.SetEndUserName(\"\"))\n dispatch(TicketSlice.SetEndUser(null))\n dispatch(TicketSlice.SetForm(null))\n if (clients.length === 1) {\n dispatch(TicketSlice.SetClient(clients[0]))\n } else {\n dispatch(TicketSlice.SetProject(null))\n }\n }\n\n }, [bulkUsers])\n\n return (\n <div>\n <ListBox\n style={{ height: 100, width: \"100%\" }}\n data={bulkUsersFormatted}\n textField=\"Display_Name\"\n selectedField={SELECTED_FIELD}\n onItemClick={(e: ListBoxItemClickEvent) => setSelectedId(e.dataItem.ID)}\n toolbar={() => {\n return (\n <ListBoxToolbar\n data={bulkUsersFormatted}\n selectedField={SELECTED_FIELD}\n tools={[\n \"remove\",\n ]}\n onToolClick={handleToolBarClick}\n />\n );\n }\n }\n />\n </div>\n )\n}\n\nexport default BulkContacts;","import {\n TextArea,\n TextAreaChangeEvent,\n TextAreaHandle,\n} from \"@progress/kendo-react-inputs\";\nimport React, { FunctionComponent, useRef, useState } from \"react\";\nimport { Error, Hint } from \"@progress/kendo-react-labels\";\nimport { FieldRenderProps } from \"@progress/kendo-react-form\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../../redux/hooks\";\nimport {\n SetDescription,\n SetTaggedDescription,\n SetTaggedUsers,\n} from \"../../../../slices/TicketSlice\";\nimport { IMentionsProps, Mentions } from \"../../../Common/Mentions/Mentions\";\nimport { UserApi } from \"../../../../redux/api/UserApi\";\nimport { IMention } from \"../../../../types/User/IMention\";\nimport {\n IMentionsHandleOnChange,\n IMentionsHandleOnClick,\n MentionsHandleOnChange,\n DefaultMentionsHandleOnClick,\n} from \"../../../Common/Mentions/Handlers\";\nimport { ShowMentions } from \"../../../Common/Mentions/utils\";\n\nexport const ticketDescId = \"ticketDescId\";\n\nconst Description: FunctionComponent<FieldRenderProps> = (formRenderProps) => {\n const { data } = UserApi.useGetMentionConfigQuery();\n const {\n validationMessage,\n value,\n touched,\n label,\n id,\n valid,\n disabled,\n hint,\n type,\n optional,\n customProp,\n ...others\n } = formRenderProps;\n\n const showValidationMessage = validationMessage;\n const errorId = showValidationMessage ? `${id}_error` : \"\";\n\n const [atActivated, setAtActivated] = useState(-1);\n const [mentionsText, setMentionsText] = useState(\"\");\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const textAreaRef = useRef<TextAreaHandle>(null);\n\n const TaggedUsers = useReduxSelector(\n (state) => state.ticketDetails.TaggedUsers\n );\n const Call_Desc = useReduxSelector(\n (state) => state.ticketDetails.ticket.Call_Desc\n );\n\n const dispatch = useReduxDispatch();\n const minChars = data ? data.Min_Chars - 1 : 0;\n\n function handleOnClick(person: IMention) {\n const required: IMentionsHandleOnClick = {\n dispatch: dispatch,\n SetDescription: SetDescription,\n SetTaggedDescription: SetTaggedDescription,\n SetTaggedUsers: SetTaggedUsers,\n TaggedUsers: TaggedUsers,\n setAtActivated: setAtActivated,\n setMentionsText: setMentionsText,\n mentionsText: mentionsText,\n textAreaRef: textAreaRef,\n };\n DefaultMentionsHandleOnClick(person, required);\n }\n\n function handleOnChange(e: TextAreaChangeEvent) {\n const eType = \"TextAreaChangeEvent\";\n const required: IMentionsHandleOnChange = {\n dispatch: dispatch,\n SetDescription: SetDescription,\n SetTaggedDescription: SetTaggedDescription,\n TaggedUsers: TaggedUsers,\n setAtActivated: setAtActivated,\n setMentionsText: setMentionsText,\n atActivated: atActivated,\n minChars: minChars.toString(),\n };\n MentionsHandleOnChange(e, eType, required);\n }\n\n const mentionsProps: IMentionsProps = {\n handleOnClick: handleOnClick,\n containerRef: containerRef,\n text: mentionsText,\n };\n return (\n <>\n {showValidationMessage && (\n <Error direction=\"start\" id={errorId}>\n {validationMessage}\n </Error>\n )}\n <div ref={containerRef}>\n <TextArea\n id={ticketDescId}\n ref={textAreaRef}\n {...others}\n value={Call_Desc}\n maxLength={2000}\n rows={4}\n onChange={handleOnChange}\n />\n </div>\n {ShowMentions(mentionsText, minChars) && (\n <Mentions props={mentionsProps} />\n )}\n <Hint direction={\"end\"}>{Call_Desc?.length || 0} / 2000</Hint>\n </>\n );\n};\n\nexport default Description;\n","import { Field } from \"@progress/kendo-react-form\";\nimport { useGetUserProfileQuery } from \"../../../../redux/api/BaseApi\";\nimport Description from \"./Description\";\n\nexport const DESCRIPTION_LOWERCASE = \"description\";\n\nexport const TicketDescription = () => {\n const { data } = useGetUserProfileQuery();\n return (\n <Field\n id={DESCRIPTION_LOWERCASE}\n name={DESCRIPTION_LOWERCASE}\n label={data ? data.Phrases.Description : \"\"}\n component={Description}\n />\n );\n};\n","import * as R from 'ramda';\nimport * as React from 'react';\nimport {JSONTree} from 'react-json-tree';\n\nexport interface IJsonTreeViewer {\n data: any;\n title: string;\n shouldExpandNode?: (keyPath: Array<string | number>, data: [any] | {}, level: number) => boolean;\n}\n\nexport default class JsonTreeViewer extends React.Component<IJsonTreeViewer, any> {\n public renderJsonData() {\n return R.not(R.isEmpty(this.props.data)) && R.not(R.isNil(this.props.data)) ? (\n <>\n <h1>{this.props.title}</h1>\n <JSONTree data={this.props.data} theme=\"bright\" shouldExpandNode={this.props.shouldExpandNode} />\n </>\n ) : null;\n }\n\n public render() {\n return this.renderJsonData();\n }\n}\n","import { ComboBoxChangeEvent, DropDownList, MultiColumnComboBox } from '@progress/kendo-react-dropdowns'\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport React, { FunctionComponent, useRef } from 'react'\nimport {\n Label,\n Error,\n Hint,\n} from \"@progress/kendo-react-labels\";\nimport { ProjectApi } from '../../redux/api/ProjectApi';\nimport { IWorkstream } from '../../types/Gameplan/IWorkstream';\nimport { trustedTypes } from 'trusted-types';\n\nconst WorkstreamList: FunctionComponent<FieldRenderProps> = props => {\n const {\n validationMessage,\n label,\n id,\n disabled,\n optional,\n projectId,\n onChange,\n } = props;\n\n const { data: workstreams, isLoading } = ProjectApi.useGetWorkstreamsQuery(projectId);\n const prettyWorkStreams = workstreams?.map(w => { return { ...w, StartDt: new Date(w.StartDt)?.toLocaleDateString(), EndDt: new Date(w.EndDt)?.toLocaleDateString() } })\n const isValid = !validationMessage;\n const showHint = !isValid;\n const hintId = showHint ? `${id}_hint` : \"\";\n const showValidationMessage = validationMessage;\n const errorId = showValidationMessage ? `${id}_error` : \"\";\n const defaultValue = { ID: 0, Workstream_Name: \"Select\" } as IWorkstream\n\n const wrapper = useRef(null);\n\n return (\n <div ref={wrapper}>\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label} {showValidationMessage && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n\n <div className={\"k-form-field-wrap\"} >\n {/* popupSettings={{ appendTo: wrapper?.current }} */}\n <MultiColumnComboBox valid={isValid} size='small' value={props.value?.Workstream_Name}\n columns={[\n { field: 'Workstream_Name', header: 'Workstream' },\n { field: 'StartDt', header: 'Start', width: '120px' },\n { field: 'EndDt', header: 'End', width: '120px' }\n ]} onChange={onChange} data={prettyWorkStreams} loading={isLoading} required={props.isRequired} dataItemKey='Workstream_Id' />\n </div>\n </div>\n )\n}\n\n\nexport default WorkstreamList;","import { Field, FieldRenderProps } from \"@progress/kendo-react-form\";\nimport {\n SetWorkstream,\n SetEffort,\n SetStartDate,\n SetEndDate,\n SetWorkstreamAssignment\n} from \"../../slices/TicketSlice\";\nimport WorkstreamList from \"./WorkstreamList\";\nimport { useReduxDispatch, useReduxSelector } from \"../../redux/hooks\";\nimport { IWorkstream } from \"../../types/Gameplan/IWorkstream\";\nimport Time from \"../Common/Time\";\nimport { DatePicker, DateTimePicker } from \"@progress/kendo-react-dateinputs\";\nimport WorkstreamAssignment from \"./WorkstreamAssignment\";\nimport { Hint } from \"@progress/kendo-react-labels\";\nimport { toDigital } from \"../../utils/utils\";\nimport { IProject } from \"../../types/Project/IProject\";\n\nconst TicketWorkstream = ({ selectedProject }: { selectedProject: IProject }) => {\n const dispatch = useReduxDispatch();\n const { WorkstreamId, Workstream_Assignment, WorkstreamName, Effort_Mins, Start_Date, End_Date, Project_Id, Project_Available_Time } = useReduxSelector(\n (state) => state.ticketDetails.ticket\n );\n const projectTimeRemaining = selectedProject?.Available_Time - (Effort_Mins | 0);\n\n return (<>\n {/* <div className='inline-block w-1/2 sm:w-1/2 sm:pl-3'>\n <Field\n id={\"workstreamAssignment\"}\n name={\"workstreamAssignment\"}\n label={\"Assigned To\"}\n onChange={(e) => SetWorkstreamAssignment(e.value)}\n component={WorkstreamAssignment}\n staff={Workstream_Assignment} />\n </div> */}\n <div className='inline-block w-1/2 sm:w-1/2 sm:pl-3 align-top'>\n <Field\n id={\"workstream\"}\n name={\"workstream\"}\n label={\"workstream\"}\n component={WorkstreamList}\n onChange={e => dispatch(SetWorkstream(e.value))}\n projectId={Project_Id}\n required={true}\n value={{ Workstream_Id: WorkstreamId, Workstream_Name: WorkstreamName } as IWorkstream} />\n </div>\n <div className='inline-block w-1/2 sm:w-1/4 sm:pl-3'>\n <div>\n <Field\n id={\"workstreamStart\"}\n name={\"workstreamStart\"}\n label={\"Start\"}\n required={true}\n showValidationMessage={true}\n onChange={(e) => {\n console.log('start date changed', e.value)\n dispatch(SetStartDate(e.value))\n }}\n component={DatePicker}\n value={Start_Date} />\n </div>\n <div>\n <Field\n id={\"workstreamEnd\"}\n name={\"workstreamEnd\"}\n label={\"End\"}\n required={true}\n showValidationMessage={true}\n onChange={(e) => dispatch(SetEndDate(e.value))}\n component={DatePicker}\n value={End_Date} />\n </div>\n <div>\n <Field\n id={\"effort\"}\n name={\"effort\"}\n label={\"Effort\"}\n component={Time}\n mins={Effort_Mins}\n onChange={(e) => e.value && dispatch(SetEffort(e.value))}\n /> hrs / <span className={projectTimeRemaining > 0 ? 'k-text-success' : 'k-text-error'}>{toDigital(projectTimeRemaining, true)} {projectTimeRemaining > 0 ? 'remaining' : 'over'}</span>\n </div>\n </div>\n </>)\n}\n\nexport default TicketWorkstream;","import { FieldRenderProps, FieldWrapper } from \"@progress/kendo-react-form\";\nimport { FunctionComponent, useEffect, useRef, useState } from \"react\";\nimport { Api } from \"../../redux/api/BaseApi\";\nimport { Label, Error } from \"@progress/kendo-react-labels\";\nimport { MultiColumnComboBox, MultiSelect, MultiSelectFilterChangeEvent } from \"@progress/kendo-react-dropdowns\";\nimport { filterBy } from \"@progress/kendo-data-query\";\nimport { UserApi } from '../../redux/api/UserApi';\nimport { Checkbox, NumericTextBox } from \"@progress/kendo-react-inputs\";\nimport React from \"react\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { IWorkstreamAssignment } from \"../../types/Ticket/IWorkstreamAssignment\";\nimport { toDigital } from \"../../utils/utils\";\n\nconst WorkstreamAssignment: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n teamId,\n staff,\n showMe,\n effort,\n assignmentChanged,\n validationMessage,\n } = props;\n console.log('WorkstreamAssignment staff=', staff)\n const { data: userProfile } = Api.useGetUserProfileQuery();\n //const assignedStaff = staff?.map(ass => { return { Contact_Name: ass?.Contact_Name, Contact_Id: ass.Contact_Id } as IWorkstreamAssignment });\n let { data: staffList, isLoading: staffLoading } = UserApi.useGetStaffQuery({ teamId: teamId, includeQueues: true, includeStaffPlusForCompanyId: 0 });\n const bindStaff = staffList?.map(s => {\n return {\n Contact_Name: s?.Full_Name,\n Contact_Id: s.ID,\n Assigned_Percent: staff?.find(a => a.Contact_Id === s.ID)?.Assigned_Percent || 0,\n Assigned_Mins: (effort | 0) * (staff?.find(a => a.Contact_Id === s.ID)?.Assigned_Percent | 0) / 100\n } as IWorkstreamAssignment\n })\n\n const [staffFiltered, setStaff] = useState([])\n const [isOpen, setOpen] = useState(false)\n\n const columns = [\n { field: 'Contact_ID', header: '', width: '30px' },\n { field: 'Contact_Name', header: 'Workstream', width: '300px' },\n { field: 'Assigned_Percent', header: 'Percent', width: '50px' },\n { field: 'Time', header: 'Time', width: '50px' }\n ];\n\n const onFilter = (event: MultiSelectFilterChangeEvent) => {\n console.log('Filter', event);\n setStaff(filterBy(staffList?.slice(), event.filter));\n }\n\n useEffect(() => {\n if (showMe)\n staffList = staffList?.map(s => s.ID === userProfile?.Id ? { ...s, Full_Name: '<Me>' } : s);\n\n setStaff(staffList)\n }, [staffList]);\n\n const itemRender = (li, itemProps) => {\n const itemChildren = (\n <> <div>\n <input\n type=\"checkbox\"\n name='selected'\n checked={itemProps.selected}\n onChange={(e) => itemProps.onClick(itemProps.index, e)}\n style={{ paddingRight: '10px' }}\n />\n <span style={{ display: 'inline-block', width: '200px', paddingLeft: '10px' }}>{li.props.children}</span>\n <span style={{ display: 'inline-block', width: '200px' }}>\n <input style={{ width: '45px', color: 'black', textAlign: 'left' }}\n onClick={(e) => {\n console.log('click textbox', e, itemProps)\n e.preventDefault();\n e.currentTarget.select();\n e.stopPropagation();\n }}\n onBlur={(e) => {\n console.log('onChange textbox', e, staff)\n //Update the percentage\n const percent = parseInt(e.currentTarget.value);\n let currentStaff = staff?.slice() || [];\n const foundIndex = currentStaff.findIndex(c => c.Contact_Id === itemProps.dataItem.Contact_Id)\n foundIndex > -1\n ? currentStaff[foundIndex] = { ...currentStaff[foundIndex], Assigned_Percent: percent }\n : currentStaff.push({ Contact_Id: itemProps.dataItem.Contact_Id, Assigned_Percent: percent } as IWorkstreamAssignment);\n assignmentChanged({ value: currentStaff });\n }}\n type=\"text\" name={'Percent'} defaultValue={itemProps.dataItem.Assigned_Percent} disabled={!itemProps.selected} autoFocus={true}\n />%\n </span>\n <label>{toDigital(itemProps.dataItem.Assigned_Mins)}</label>\n </div>\n </>\n );\n return React.cloneElement(li, li.props, itemChildren);\n }\n const handleCheckboxChange = (event, dataItem) => {\n\n };\n\n const itemRender2 = (li, props) => {\n const children = columns.map((col, i) => {\n return col.field === \"Contact_ID\" ? (\n <span\n className=\"k-table-td\"\n style={{\n width: col.width,\n }}\n key={col.width + i}\n >\n <Checkbox\n onChange={(e) => handleCheckboxChange(e, props.dataItem)}\n />\n </span>\n ) : (\n <span\n className=\"k-table-td\"\n style={{\n width: col.width,\n }}\n key={col.width + i}\n >\n {props.dataItem[col.field]}\n </span>\n );\n\n });\n return React.cloneElement(\n li,\n {\n ...li.props,\n },\n children\n );\n };\n\n useEventListener(\"click\", (e: MouseEvent) => {\n console.log('click', e)\n if (e.target && (e.target as HTMLElement)?.className?.indexOf && (e.target as HTMLElement)?.className?.indexOf('k-input-inner') == -1)\n setOpen(false);\n });\n const errorId = validationMessage ? `${id}_error` : \"\";\n const isValid = !validationMessage;\n const wrapper = useRef(null);\n return (\n <FieldWrapper >\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}>\n {label} {validationMessage && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n <div className={\"k-form-field-wrap\"} ref={wrapper}>\n <MultiSelect header={<div><span style={{ display: 'inline-block', width: '30px' }}> </span><span style={{ display: 'inline-block', width: '190px' }}>Name:</span><span style={{ display: 'inline-block', width: '200px' }}>Percent:</span><span>Time:</span></div>}\n valid={isValid} validationMessage={validationMessage} opened={isOpen} onOpen={() => setOpen(true)} itemRender={itemRender} filterable={false} popupSettings={{ className: 'z500' }} onFilterChange={onFilter} onChange={assignmentChanged} data={bindStaff} value={staff} dataItemKey=\"Contact_Id\" textField=\"Contact_Name\" loading={staffLoading} />\n </div>\n </FieldWrapper>\n )\n}\n\nexport default WorkstreamAssignment;","import { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs'\nimport React, { useEffect } from 'react'\nimport { Api } from '../../../redux/api/BaseApi';\nimport { useReduxDispatch, useReduxSelector } from '../../../redux/hooks';\nimport { UserApi } from '../../../redux/api/UserApi';\nimport {\n Notification,\n} from \"@progress/kendo-react-notification\";\nimport { Icon } from '@progress/kendo-react-common';\nimport { SetLastFlaggedNoteConfirmedId } from '../../../slices/TicketSlice';\nimport { ClientApi } from '../../../redux/api/ClientApi';\n\nconst FlaggedNotes = () => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { Company_Contact: endUserId, Company_Address_Id, Company_Id } = useReduxSelector(s => s.ticketDetails.ticket)\n const lastFlaggedNoteConfirmedId = useReduxSelector(s => s.ticketDetails.lastFlaggedNoteConfirmedId)\n const { data: contact, isFetching: contactFetching } = UserApi.useGetUserByIdQuery(endUserId, { skip: !endUserId });\n const { data: office, isFetching: officeFetching } = ClientApi.useGetOfficeQuery(Company_Address_Id, { skip: !Company_Address_Id });\n const { data: client, isFetching: clientFetching } = ClientApi.useGetClientQuery(Company_Id, { skip: !Company_Id });\n const [popupVisible, setPopupVisible] = React.useState(false);\n const dispatch = useReduxDispatch();\n\n //Show the popup when the contact has flagged notes.\n useEffect(() => {\n const clientNotes = client?.Flag_Notes && client?.Notes\n const officeNotes = office?.Flag_Notes && office?.Notes\n const contactNotes = contact?.Display_Notes && contact?.Notes\n const isLoading = contactFetching || officeFetching || clientFetching\n\n if ((clientNotes || officeNotes || contactNotes) && !isLoading && userProfile.Features.Popup_Flagged_Notes && lastFlaggedNoteConfirmedId !== endUserId)\n setPopupVisible(true);\n }, [client, office, contact, endUserId])\n\n function confirmFlaggedNotes() {\n dispatch(SetLastFlaggedNoteConfirmedId(endUserId));\n setPopupVisible(false);\n }\n\n const clientNotes = client?.Flag_Notes && client?.Notes\n const officeNotes = office?.Flag_Notes && office?.Notes\n const contactNotes = contact?.Display_Notes && contact?.Notes\n if ((!officeNotes && !contactNotes && !clientNotes) || !endUserId) return <></>;\n\n const display = <>\n {clientNotes && <><b>{client.Company_Name}</b> - {client?.Notes.split('\\n').map(str => <>{str}<br /></>)}</>}\n {officeNotes && <><b>{office.Address_Name}</b> - {office?.Notes.split('\\n').map(str => <>{str}<br /></>)}</>}\n {contactNotes && <><b>{contact.FullName}</b> - {contact?.Notes.split('\\n').map(str => <>{str}<br /></>)}</>}\n </>\n\n\n\n return (\n <div>\n <Notification\n type={{\n style: \"info\",\n icon: true,\n }}\n style={{ backgroundColor: '#e7cd90', color: 'black', border: 'none', boxShadow: 'none', borderRadius: '0px', padding: '8px', width: '100%', textAlign: 'left', fontSize: '13px', verticalAlign: 'top' }}\n closable={false}>\n {display}\n </Notification>\n {popupVisible && userProfile?.Features.Popup_Flagged_Notes && <Dialog className='flagged-notes' title={<><Icon name='info' style={{ fontSize: '20px' }} className='pr-6'></Icon>Flagged Notes</>} onClose={() => confirmFlaggedNotes()} >\n {display}\n <DialogActionsBar>\n <button\n style={{ backgroundColor: '#f5f5f5' }}\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-button-solid-primary\"\n onClick={() => confirmFlaggedNotes()}\n >\n OK\n </button>\n </DialogActionsBar>\n </Dialog>}\n </div>\n )\n}\n\nexport default FlaggedNotes","import { PanelBar, PanelBarItem, PanelBarSelectEventArguments } from '@progress/kendo-react-layout';\nimport React, { useEffect, useRef, useState } from 'react'\nimport { Api } from '../../../redux/api/BaseApi';\nimport { TicketApi } from '../../../redux/api/TicketApi';\nimport { useReduxDispatch, useReduxSelector } from '../../../redux/hooks';\nimport Timeline from '../Timeline';\nimport CustomForm from '../../CustomForms/CustomForm';\nimport * as TicketSlice from '../../../slices/TicketSlice';\nimport UserFynd from '../ListControls/UserFynd';\nimport { IFyndResult } from '../../../types/IFyndResult';\nimport SLAList from '../ListControls/SLAList';\nimport StatusList from '../ListControls/StatusList';\nimport './TicketDetails.scss'\nimport ProjectList from '../../Project/ListControls/ProjectList';\nimport { IProject } from '../../../types/Project/IProject';\nimport { Field, Form, FormElement } from '@progress/kendo-react-form';\nimport PriorityList from '../ListControls/PriorityList';\nimport { useNavigate, useParams, useSearchParams } from 'react-router-dom';\nimport AssociatedContacts from '../ListControls/AssociatedContacts';\nimport TeamList from '../ListControls/TeamList';\nimport AssignedStaff from '../ListControls/AssignedStaff';\nimport TypeList from '../ListControls/TypeList';\nimport { DateTimePicker } from '@progress/kendo-react-dateinputs';\nimport { IStaff } from '../../../types/IStaff';\nimport { PartialSpinny } from '../../Nav/Spinny';\nimport { UserApi } from '../../../redux/api/UserApi';\nimport validateCustomFields from '../../CustomForms/Validators/CustomFieldValidator';\nimport { TicketDetailProps } from '../../../types/Props/TicketDetailProps';\nimport { ITicket } from '../../../types/Ticket/ITicket';\nimport TicketSavedDialog from '../TicketSavedDialog';\nimport { TicketSavedDialogProps } from '../../../types/Props/TicketSavedProps';\nimport ActionNote from \"../../Action/ActionNote/ActionNote\"\nimport FilterButton from '../../ClientType/FilterButton';\nimport { ClientTypeFilter } from '../../ClientType/ClientTypeFilter';\nimport { ITemplateListItem } from '../../../types/Ticket/ITemplate';\nimport * as ActionSlice from '../../../slices/ActionSlice';\nimport * as FileSlice from '../../Attachment/FileSlice';\nimport BulkContacts from '../ListControls/BulkContacts';\nimport BulkLogButton from '../FormControls/BulkLogButton';\nimport { //DESCRIPTION_LOWERCASE,\n TicketDescription\n} from './TicketDescription/TicketDescription';\nimport JsonTreeViewer from '../../Test/JsonTreeViewer';\nimport TicketWorkstream from '../../Gameplan/TicketWorkstream';\nimport WorkstreamAssignment from '../../Gameplan/WorkstreamAssignment';\nimport FlaggedNotes from '../FormControls/FlaggedNotes';\nimport { profile } from 'console';\nimport background from '../../DropdownCheckbox/styled/background';\nimport { DropDownListChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { IClient } from '../../../types/Client/IClient';\n// import { ITicketPanelBarItemProps, TicketPanelBarItem } from './TicketPanelBarItem';\n\nconst SECTION_REQUIRED = \"section-required\";\n\nconst TicketDetails: React.FC<TicketDetailProps> = (props) => {\n const [confirmDialogProps, setConfirmDialogProps] = useState({ visible: false } as TicketSavedDialogProps)\n const { Id: ticketId } = useParams()\n const [searchParams] = useSearchParams();\n const debug = searchParams.get(\"debug\")\n const templateId = searchParams.get(\"templateId\")\n const endUserUId = searchParams.get(\"endUserId\")\n const parentCallId = searchParams.get(\"parentCallId\")\n const splitTicketId = searchParams.get(\"splitTicketId\")\n const splitActionIds = searchParams.get(\"splitActionIds\")\n const navigate = useNavigate();\n const dispatch = useReduxDispatch();\n const { ticket, logOptions, formState, bulkLog } = useReduxSelector(state => state.ticketDetails);\n const { action: initialAction } = useReduxSelector(state => state.actionDetails);\n const { data: userProfile, isFetching: profileIsLoading } = Api.useGetUserProfileQuery();\n const { data: formData, isFetching: formIsLoading } = Api.useGetFormByProjectQuery({ projectId: ticket.Project_Id, companyId: ticket.Company_Id, locationId: ticket.Company_Address_Id }, { skip: !ticket.Project_Id })\n const { data: newTicketEndUser, isFetching: userLoading } = UserApi.useGetUserQuery(ticket.Company_Contact_Uid, { skip: !ticket.Company_Contact_Uid })\n const { data: existingTicket, isFetching: ticketIsLoading } = TicketApi.useGetTicketQuery({ ticketId: parseInt(ticketId), populateFormData: true }, { skip: isNaN(parseInt(ticketId)) });\n const { data: assContactConfig } = Api.useGetAssContactConfigQuery(ticket.Company_Type_Id, { skip: !ticket.Company_Type_Id });\n const { data: customFormConfig } = Api.useGetFormConfigQuery();\n const { data: selectedProject, isFetching: projectIsLoading } = Api.useGetProjectQuery(ticket.Project_Id, { skip: !ticket.Project_Id });\n const { data: defaultProjectAssignment, isFetching: defAssignmentLoading } = Api.useGetProjectAssignmentQuery(ticket.Project_Id, { skip: !ticket.Project_Id });\n const { data: selectedPriority } = Api.useGetPriorityQuery(ticket.Priority_Id, { skip: !ticket.Priority_Id });\n const { data: slas } = TicketApi.useGetSLAListQuery({ projectId: ticket.Project_Id, priorityId: ticket.Priority_Id });\n const { data: quickNote } = TicketApi.useGetQuickNoteAsActionQuery({ id: initialAction?.Quick_Note_Id, ticketId: 0 }, { skip: !initialAction?.Quick_Note_Id })\n const { data: statuses } = TicketApi.useGetStatusesQuery();\n const { data: priorities } = Api.useGetPriorityListQuery(selectedProject?.Priority_Set_Id, { skip: !selectedProject?.Priority_Set_Id });\n //const requiredStyle = { background: `#${userProfile.Nav_Hex_Color}`, color: '#fff' }\n const [quickNoteId, setQuickNoteId] = React.useState(initialAction?.Quick_Note_Id);\n const quickNoteStatus = statuses?.find(s => s.ID === quickNote?.Quick_Note_Status_Id)\n const quickNotePriority = priorities?.find(s => s.ID === quickNote?.Quick_Note_Priority_Id)\n\n const selectedSLA = slas?.find(s => s.SLA_ID === ticket.SLA_Id);\n const timelineTitle = `Timeline ${selectedSLA?.SLA_ID > 0 ? '- ' + selectedSLA.SLA_Code + `(${selectedSLA.SLA_Response_Time}/${selectedSLA.SLA_Resolve_Time})` : '- No SLA'}`\n\n //Save Ticket endpoint\n const [postTicket, { isLoading: savingTicket, error: saveTicketError }] = TicketApi.useCreateTicketMutation();\n const [bulkLogTicket, { isLoading: savingBulkTicket, error: bulkSaveTicketError }] = TicketApi.useBulkLogTicketMutation();\n const somethingLoading = profileIsLoading || formIsLoading || ticketIsLoading || projectIsLoading || savingTicket || savingBulkTicket || userLoading || defAssignmentLoading\n\n //Grab the templateID from the querystring and shove it in the Slice\n useEffect(() => {\n //console.log('Checking templates', templateId, template);\n\n if (ticket.Template_Id !== parseInt(templateId) && !isNaN(parseInt(templateId))) {\n //console.log('SetTemplate:', templateId)\n dispatch(TicketSlice.SetTemplate({ Id: parseInt(templateId) } as ITemplateListItem))\n }\n }, [dispatch, templateId, ticket.Template_Id])\n\n //Load the user from Querystring\n useEffect(() => { endUserUId && dispatch(TicketSlice.SetEndUserUid(endUserUId)) }, [dispatch, endUserUId])\n //Load the Parent Ticket ID from Querystring\n useEffect(() => { parentCallId && dispatch(TicketSlice.SetHierarchy({ Parent_Ticket_Id: parseInt(parentCallId), IsParent: false })) }, [dispatch, parentCallId])\n //Load SPlitOptions\n useEffect(() => { splitActionIds && splitTicketId && dispatch(TicketSlice.SetSplitOptions({ TicketId: parseInt(splitTicketId), Ids: splitActionIds.split(\",\").map(a => parseInt(a)) })) }, [dispatch, splitActionIds, splitTicketId])\n\n //Load Contact Details into the ticket\n useEffect(() => {\n //console.log('useEffect SetEndUser', ticket?.Company_Contact_Uid, newTicketEndUser?.ID, newTicketEndUser?.UId)\n if (ticket?.Company_Contact_Uid && newTicketEndUser && newTicketEndUser?.UId == ticket?.Company_Contact_Uid) {\n console.log('useEffect SetEndUser', ticket?.Company_Contact_Uid, newTicketEndUser?.ID, newTicketEndUser?.UId)\n //ticket?.Company_Contact_Uid !== newTicketEndUser?.UId && \n dispatch(TicketSlice.SetEndUser(newTicketEndUser))\n\n //Don't overwrite UserFynd Selection\n if (ticket.Contact_Name.indexOf(newTicketEndUser?.FullName) == -1)\n dispatch(TicketSlice.SetEndUserName(newTicketEndUser?.FullName))\n }\n\n }, [dispatch, newTicketEndUser, ticket?.Company_Contact_Uid])\n\n //Update the form fields of the ticket when then project changes\n useEffect(() => { !existingTicket && dispatch(TicketSlice.SetForm(formData)) }, [dispatch, existingTicket, formData])\n\n //Load the existing ticket\n useEffect(() => {\n if (existingTicket) {\n dispatch(TicketSlice.SetTicket(existingTicket))\n }\n else if (!ticketId && ticket?.ID) {\n //console.log('!ticketId && ticket?.ID',!ticketId,ticket?.ID)\n dispatch(TicketSlice.ResetTicket(null));\n dispatch(ActionSlice.ResetAction(null));\n }\n }, [dispatch, existingTicket, ticket, ticketId])\n\n //Listen for when a quick note is changed\n useEffect(() => {\n if (quickNote && quickNoteId !== quickNote.Quick_Note_Id) {\n console.log('Listen for when a quick note is changed', quickNote, quickNoteStatus, quickNotePriority)\n //Type\n if (quickNote.Quick_Note_Type_Id) { dispatch(TicketSlice.SetType(quickNote.Quick_Note_Type_Id)) }\n\n //Status\n if (quickNote.Quick_Note_Status_Id && quickNoteStatus) { dispatch(TicketSlice.SetStatus(quickNoteStatus)) }\n\n //Priority\n if (quickNote.Quick_Note_Priority_Id && quickNotePriority) { dispatch(TicketSlice.SetPriority(quickNotePriority)) }\n\n setQuickNoteId(quickNote.Quick_Note_Id);\n }\n }, [dispatch, quickNote, quickNoteId, quickNoteStatus, quickNotePriority])\n\n //Update the call assignees whenever the project chnages\n useEffect(() => {\n if (!userProfile?.Features.Project_Default_Assignment) return;\n\n if (ticket.Project_Id > 0 && defaultProjectAssignment) {\n const assignedStaff = defaultProjectAssignment?.map<IStaff>(ass => { return { Full_Name: ass.Contact_Name, ID: ass.Contact_Id } as IStaff });\n dispatch(TicketSlice.SetAssigned(assignedStaff))\n }\n }, [ticket.Project_Id, defaultProjectAssignment, dispatch, userProfile])\n\n //Client Change Handler\n const clientChangeHandler = (e: DropDownListChangeEvent) => {\n console.log('clientChangeHandler value', e.value);\n //Reset end user\n dispatch(TicketSlice.SetEndUserUid(null))\n dispatch(TicketSlice.SetEndUserName(\"\"))\n dispatch(TicketSlice.SetEndUser(null))\n dispatch(TicketSlice.SetProject(null))\n dispatch(TicketSlice.SetForm(null))\n dispatch(TicketSlice.SetClient((e.value as IClient).ID))\n\n }\n\n //Change Handlers\n const endUserChangeHandler = (e: IFyndResult) => {\n\n if (e) {\n if (bulkLog) {\n console.log('Set bulk contacts', e)\n let newArray = [...ticket?.Bulk_Contact_Ids]\n newArray.push(e.Contact_Id)\n dispatch(TicketSlice.SetBulkContacts(newArray.map(g => { return { ID: g } as IStaff })));\n\n } else {\n console.log('SetEndUserUid', e?.Contact_Name, e?.Contact_Id);\n dispatch(TicketSlice.SetEndUserUid(e?.UId));\n e?.Contact_Name && dispatch(TicketSlice.SetEndUserName(e?.Contact_Name?.replaceAll(\"<em>\", \"\")?.replaceAll(\"</em>\", \"\")));\n\n if (e.Asset_Id)\n dispatch(TicketSlice.SetAssets([{ Asset_Id: e.Asset_Id, Call_Id: 0, Contact_Id: e.Contact_Id }]))\n else\n dispatch(TicketSlice.SetAssets([])) //Clear existing\n }\n }\n else {\n //Removed\n dispatch(TicketSlice.SetEndUserUid(null))\n dispatch(TicketSlice.SetEndUserName(\"\"))\n dispatch(TicketSlice.SetEndUser(null))\n dispatch(TicketSlice.SetProject(null))\n dispatch(TicketSlice.SetForm(null))\n }\n\n }\n\n const dueDateChanged = (e) => dispatch(TicketSlice.SetDueDate(e.target.value))\n const projectChangeHandler = (project: IProject) => dispatch(TicketSlice.SetProject(project));\n const priorityChangeHandler = (e) => dispatch(TicketSlice.SetPriority(e.target.value));\n const teamChangeHandler = (e) => dispatch(TicketSlice.SetTeam(e.target.value));\n const slaChangeHandler = (e) => dispatch(TicketSlice.SetSLA(e.value));\n const typeChanged = (e) => dispatch(TicketSlice.SetType(e.id))\n const fieldChanged = (e) => dispatch(TicketSlice.SetField(e.value));\n // const descriptionChanged = (e) => dispatch(TicketSlice.SetDescription(e.target.value));\n const assignedChangeHandler = (e) => dispatch(TicketSlice.SetAssigned(e.value));\n const associatedChangeHandler = (e) => { dispatch(TicketSlice.SetAssociatedContacts(e.value)) }\n const bulkChangeHandler = (e) => { dispatch(TicketSlice.SetAssociatedContacts(e.value)) }\n\n const handleSubmit = (dataItem) => {\n\n\n //Remove any blank actions\n //initialAction?.HTML_Notes?.length && ticket.MergeActionsFromCallId.\n let saveTicket = { ...ticket, Actions: initialAction?.HTML_Notes?.length ? [initialAction] : undefined }\n let saveMethod = saveTicket.Bulk_Contact_Ids?.length ? bulkLogTicket : postTicket;\n\n console.log('handleSubmit', saveMethod, saveTicket)\n\n //Submit the ticket to the API.\n saveMethod(saveTicket).unwrap().then(result => {\n console.log(\"ID in result\", \"ID\" in (result as object))\n console.log(\"result is Array\", Array.isArray(result))\n let newTicketIds = Array.isArray(result) ? result.map(r => r.ID) : [(result as ITicket).ID]\n //Raise event\n const raiseTicketSaved = () => {\n props.ticketSaved(newTicketIds);\n }\n\n let myOptions = logOptions?.Options?.split(',').filter(l => l !== '');\n let viewDetailsURL = `/deeplink?url=/calls/callhistory.aspx?call_id=${newTicketIds[0]}`;\n console.log('log options?', myOptions, viewDetailsURL)\n let viewTicketDetails = () => {\n //Reset the form and go to details\n ResetForm();\n navigate(viewDetailsURL);\n }\n if (!myOptions || myOptions.length === 0 || (myOptions.length === 1 && (myOptions.indexOf('1') > -1 || myOptions.indexOf('2') > -1))) {\n console.log('No log options or PIN only')\n setConfirmDialogProps((currentProps) => {\n return {\n ...currentProps, visible: true, ticketIds: newTicketIds, title: userProfile.Phrases.CallPhrase + ' logged', viewDetails: viewTicketDetails, toggleDialog: () => {\n //reset this form\n ResetForm();\n //GoBack to previous page (TicketPage.tsx)\n raiseTicketSaved();\n }\n }\n });\n } else if (myOptions.indexOf('3') > -1) {\n console.log('Log another (Blank)')\n setConfirmDialogProps((currentProps) => { return { ...currentProps, visible: true, ticketIds: newTicketIds, title: userProfile.Phrases.CallPhrase + ' logged', viewDetails: viewTicketDetails } });\n //Log another (Blank)\n ResetForm();\n } else if (myOptions.indexOf('4') > -1) {\n console.log('Log another (Duplicate)')\n setConfirmDialogProps((currentProps) => { return { ...currentProps, visible: true, ticketIds: newTicketIds, title: userProfile.Phrases.CallPhrase + ' logged', viewDetails: viewTicketDetails } });\n //Log another (Duplicate)\n //Do nothing\n } else {\n if (myOptions.indexOf('0') > -1) { //view details\n //reset this form\n ResetForm();\n //GoBack to previous page (TicketPage.tsx)\n raiseTicketSaved();\n }\n }\n }).catch((e) => {\n //Probably a validation error\n //console.error('caught', e)\n if (e.originalStatus === 400) {\n //Show validation message\n //navigate('#ticket-form');\n if (divErrorRef?.current)\n divErrorRef.current.scrollIntoView({ behavior: \"smooth\" });\n }\n });\n }\n const divErrorRef = useRef<HTMLDivElement>();\n const ResetForm = () => {\n console.log('ResetForm')\n dispatch(TicketSlice.ResetTicket(null));\n dispatch(ActionSlice.ResetAction(null));\n dispatch(FileSlice.ResetFiles(null));\n }\n\n const formValidator = (values) => {\n const closeTicketValidation = ticket.Open_Status === 0 || ticket.Open_Status === 4 || ticket.LogOptions?.Close;\n let customFieldValidators = { ...validateCustomFields(ticket.CustomFormFields, closeTicketValidation) }\n let formValidator = Object.keys(customFieldValidators).length ? { \"customform\": `${Object.keys(customFieldValidators).length} ${Object.keys(customFieldValidators).length === 1 ? 'field' : 'fields'} required` } : {};\n let typeRequired = userProfile?.Features?.Call_Types && !ticket.Type_Id && (userProfile?.Features?.Ticket_Type_Required_To_Log || (closeTicketValidation && userProfile.Features.Ticket_Type_Required_To_Close))\n let actionRequired = closeTicketValidation && !initialAction.HTML_Notes\n\n let val = {\n ...(!ticket.Call_Desc?.trim()?.length && { \"description\": `${userProfile?.Phrases.Description} is required` }),\n ...(!ticket.Project_Id && !bulkLog && { \"project\": ` (required)` }),\n ...(!ticket.Company_Contact && !bulkLog && { \"endUser\": ` (required)` }),\n ...(typeRequired && { \"type\": ` (required)` }),\n ...(actionRequired && { \"action\": ` (required)` }),\n ...(ticket.Is_Workstream && !ticket.WorkstreamId && { \"workstream\": ` (required)` }),\n ...(ticket.Is_Workstream && !ticket.Start_Date && { \"workstreamStart\": ` (required)` }),\n ...(ticket.Is_Workstream && !ticket.End_Date && { \"workstreamEnd\": ` (required)` }),\n ...(ticket.Is_Workstream && ticket.End_Date && ticket.End_Date < ticket.Start_Date && { \"workstreamEnd\": ` (End date must be greater than the start date)` }),\n ...(ticket.Is_Workstream && ticket.Workstream_Assignment?.reduce((a, b) => a + parseInt(b.Assigned_Percent.toString()), 0) !== 100 && { \"workstreamAssignment\": ` (Total assigned percent is ${ticket.Workstream_Assignment?.reduce((a, b) => a + b.Assigned_Percent, 0) || 0}% but it must total 100%) ` }),\n ...customFieldValidators,\n ...formValidator\n }\n\n\n //if (ticket.Call_Desc && ticket.Project_Id && (ticket.Company_Contact || bulkLog) && !actionRequired && !typeRequired && !Object.keys(customFieldValidators).length) {\n if (Object.keys(val).length) {\n const pageVal = {\n ...val,\n ...((val.type || val.project || val.endUser) && { \"top\": ` (required)` }),\n VALIDATION_SUMMARY: \"Please fill in all required fields below.\",\n }\n // console.log('not good', pageVal)\n\n return pageVal;//NOT good\n }\n //console.log('formValidator', val, Object.keys(val).length)\n\n return {}; //All Good\n };\n\n //const descValidator = (value) => { return ticket?.Call_Desc ? \"\" : userProfile?.Phrases.Description + \" is required.\" };\n const wrapper2 = useRef(null);\n const customFormTop = ticket?.CustomFormId && ticket?.CustomFormId !== -1 && customFormConfig?.Custom_Forms_Enabled && customFormConfig?.Log_Call_Orientation === 1\n const customFormBottom = ticket?.CustomFormId && ticket?.CustomFormId !== -1 && customFormConfig?.Custom_Forms_Enabled && !customFormConfig?.Log_Call_Orientation\n const handleSelect = (e: PanelBarSelectEventArguments) => {\n //console.log('handleSelect', e)\n dispatch(TicketSlice.SetFormState(e.expandedItems))\n\n //post to persist settings in API.\n //saveLogOptions(logOptions);\n };\n const toggleBulkLogging = () => {\n dispatch(TicketSlice.SetBulkLog(!bulkLog))\n }\n const filterClicked = () => {\n let newState = [...formState]\n if (newState.indexOf('client-type-filter') > -1)\n newState.splice(newState.indexOf('client-type-filter'), 1)\n else\n newState.push('client-type-filter')\n dispatch(TicketSlice.SetFormState(newState))\n };\n\n const requiredStyleClass = `\n #ticket-form .k-messagebox-error,\n #ticket-form .k-panelbar-header.section-required>span.k-link .k-panelbar-item-icon,\n #ticket-form .k-panelbar>.k-panelbar-header.section-required>span.k-link,\n #ticket-form .k-panelbar>.k-panelbar-header.section-required>span.k-link.k-selected,\n #ticket-form .k-panelbar>.k-panelbar-header.section-required>span.k-link.k-selected:hover,\n #ticket-form .k-panelbar>.k-panelbar-header.section-required>span.k-link:hover {\n border-color: ${userProfile?.Nav_Hex_Color};\n color: #fff;\n background-color: ${userProfile?.Nav_Hex_Color};\n }\n #ticket-form .k-form-error,\n #ticket-form .k-text-error{\n color: ${userProfile?.Nav_Hex_Color}; \n }\n #ticket-form .k-picker-solid.k-invalid, \n #ticket-form .k-picker-solid.ng-invalid.ng-touched, \n #ticket-form .k-picker-solid.ng-invalid.ng-dirty{\n border-color: ${userProfile?.Nav_Hex_Color}; \n }`;\n\n return (\n <>\n <style id='required-section-styles'>\n {requiredStyleClass}\n </style>\n {/* {/* Success dialog */}\n {confirmDialogProps.visible && <TicketSavedDialog toggleDialog={() => setConfirmDialogProps({ ...confirmDialogProps, visible: false })} {...confirmDialogProps} />}\n <Form onSubmit={handleSubmit} validator={formValidator} ignoreModified={true}\n initialValues={{\n due: ticket?.Due_Dt ? new Date(ticket?.Due_Dt + 'Z') : undefined,\n }}\n render={(formRenderProps) => {\n // const DescContainerProps: ITicketPanelBarItemProps = {\n // className: formRenderProps.errors.description ? SECTION_REQUIRED : null,\n // id: DESCRIPTION_LOWERCASE,\n // title: userProfile ? userProfile.Phrases.Description : \"\"\n // }\n\n return (\n <FormElement id='ticket-form'>\n {/* <div>touched? ={JSON.stringify(formRenderProps)}</div> */}\n <div id='error-summary' ref={divErrorRef}>\n {/* Validation */}\n {saveTicketError?.[\"data\"] && saveTicketError?.[\"data\"] && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n {saveTicketError[\"data\"]?.Message || saveTicketError[\"data\"]}\n </div>)}\n {bulkSaveTicketError?.[\"data\"] && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n An unexpected application error occurred: \n {bulkSaveTicketError[\"data\"]?.Message || bulkSaveTicketError[\"data\"]}\n </div>)}\n {formRenderProps.errors &&\n formRenderProps.errors.VALIDATION_SUMMARY && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n {formRenderProps.errors.VALIDATION_SUMMARY}\n </div>\n )}\n\n </div>\n <div className='new-ticket '>\n <PanelBar isControlled={true} expanded={Object.assign([], formState)} onSelect={handleSelect}>\n <PanelBarItem id=\"details\" selected={true} title='Details' icon='user' className={formRenderProps.errors.top ? SECTION_REQUIRED : null} >\n <div>\n {userProfile?.Features.Show_Client_Type_Filter && formState.indexOf('client-type-filter') > -1 &&\n <div>\n <Field\n id={\"clientTypeFilter\"}\n name={\"clientTypeFilter\"}\n component={ClientTypeFilter}\n />\n </div>}\n <div>\n <div className='inline-block w-full'>\n\n <Field\n id={\"endUser\"}\n name={\"endUser\"}\n label={userProfile?.Phrases.EndUser + (bulkLog ? 's' : '')}\n component={UserFynd}\n onChange={endUserChangeHandler}\n onClientChange={clientChangeHandler}\n display={ticket.Contact_Name}\n companyId={ticket.Company_Id}\n endUserId={ticket.Company_Contact}\n filterClicked={filterClicked}\n toggleBulkLogging={toggleBulkLogging}\n bulkContactIds={ticket.Bulk_Contact_Ids}\n />\n\n </div>\n <FlaggedNotes />\n </div>\n {bulkLog &&\n <div>\n <Field\n id={\"bulkContacts\"}\n name={\"bulkContacts\"}\n component={BulkContacts}\n bulkContactIds={ticket.Bulk_Contact_Ids}\n onChange={bulkChangeHandler} />\n </div>\n }\n {assContactConfig?.IsActive &&\n <div>\n <Field\n id={\"assContacts\"}\n name={\"assContacts\"}\n label={`Associated ${userProfile?.Phrases.Contact}s`}\n component={AssociatedContacts}\n companyTypeId={ticket.Company_Type_Id}\n companyId={ticket.Company_Id}\n ticketId={ticket.ID}\n locationId={ticket.Company_Address_Id}\n assContactIds={ticket.Associated_Contact_Ids}\n onChange={associatedChangeHandler}\n />\n </div>\n }\n <div className='flex w-full '>\n <div className='inline-block w-full'>\n <Field\n id={\"project\"}\n name={\"project\"}\n label={userProfile?.Phrases.Project}\n component={ProjectList}\n companyId={ticket.Company_Id}\n selectedProject={ticket?.Project_Id ? selectedProject : null}\n onSelect={projectChangeHandler} />\n </div>\n </div>\n <div className='flex flex-wrap w-full'>\n <div className='inline-block w-full sm:w-1/2 sm:pr-3'>\n <Field\n id={\"status\"}\n name={\"status\"}\n label={\"Status\"}\n component={StatusList}\n statusId={ticket?.Call_Status_Id}\n autoCloseSettings={ticket?.AutoCloseSettings}\n autoOpenSettings={ticket?.AutoOpenSettings}\n onChange={(e) => {\n //Set the ticket status\n dispatch(TicketSlice.SetStatus(e.value.status));\n //And possibly the auto close settings\n dispatch(TicketSlice.SetAutoCloseSetting(e.value.autoCloseSettings))\n //Auto reopen from on-hold\n dispatch(TicketSlice.SetAutoOpenSetting(e.value.autoOpenSettings))\n }\n } />\n </div>\n {userProfile?.Features.Call_Types && <div className='inline-block w-full sm:w-1/2 pl-0'>\n <Field\n id={\"type\"}\n name={\"type\"}\n label={userProfile?.Phrases.Type}\n component={TypeList}\n typeId={ticket?.Type_Id}\n onChange={typeChanged} />\n </div>}\n </div>\n <div>\n {userProfile?.Features.Show_Team_Filter && (\n <div className='inline-block w-full sm:w-1/2 sm:pr-3'>\n <Field\n id={\"team\"}\n name={\"team\"}\n label={userProfile?.Phrases.Team}\n component={TeamList}\n onChange={teamChangeHandler}\n teamId={ticket?.Assigned_Team_Id}\n />\n </div>)}\n <div className={userProfile?.Features.Show_Team_Filter ? 'inline-block w-full sm:w-1/2' : 'inline-block w-full'} ref={wrapper2}>\n {ticket.Is_Workstream ?\n <Field\n id={\"workstreamAssignment\"}\n name={\"workstreamAssignment\"}\n label={\"Assigned To\"}\n projectId={ticket?.Project_Id}\n teamId={ticket?.Assigned_Team_Id}\n component={WorkstreamAssignment}\n staff={ticket?.Workstream_Assignment}\n effort={ticket?.Effort_Mins}\n assignmentChanged={(e) => {\n console.log('assignmentChanged in TicketDetails', e.value);\n dispatch(TicketSlice.SetWorkstreamAssignment(e.value));\n }} />\n :\n <Field\n id={\"assigned\"}\n name={\"assigned\"}\n label={\"Assigned To:\"}\n showMe={true}\n projectId={ticket?.Project_Id}\n teamId={ticket?.Assigned_Team_Id}\n staff={ticket?.Call_Assignment}\n component={AssignedStaff}\n onChange={assignedChangeHandler} />\n\n }\n </div>\n </div>\n </div>\n </PanelBarItem>\n {!ticket?.Is_Workstream && <PanelBarItem id=\"timeline\" title={timelineTitle} selected={true} icon='clock'>\n <div>\n {userProfile?.Features.Multi_SLA && (\n\n <div className='inline-block w-1/2 sm:pr-3'>\n <Field\n id={\"sla\"}\n name={\"sla\"}\n label={userProfile?.Phrases.SLA}\n component={SLAList}\n onChange={slaChangeHandler}\n projectId={ticket?.Project_Id}\n priorityId={ticket?.Priority_Id}\n slaId={ticket?.SLA_Id} />\n </div>\n\n )}\n <div className='inline-block w-full sm:w-1/2 '>\n <Field\n id={\"priority\"}\n name={\"priority\"}\n label={userProfile?.Phrases.Priority}\n validationMessage={`${userProfile?.Phrases.Priority} is required`}\n component={PriorityList}\n prioritySetId={selectedProject?.Priority_Set_Id}\n selectedPriority={selectedPriority}\n priorityChangeHandler={priorityChangeHandler} />\n </div>\n </div>\n <div>\n <div className='inline-block w-full sm:w-1/2'>\n {ticket?.Due_Dt}\n <Field\n id={\"due\"}\n name={\"due\"}\n label={\"Due Date\"}\n onChange={dueDateChanged}\n component={DateTimePicker}\n />\n\n </div>\n <div className='inline-block w-full sm:w-1/2 sm:pl-3'>\n <Field\n id={\"timeline\"}\n name={\"timeline\"}\n label={\"Timeline\"}\n component={Timeline} />\n </div>\n </div>\n </PanelBarItem>}\n <PanelBarItem id=\"workstream-section\" title={userProfile?.Phrases.Workstream || \"\"} selected={true} className={formRenderProps.errors.workstream || formRenderProps.errors.workstreamStart || formRenderProps.errors.workstreamEnd ? 'section-required' : (ticket?.Is_Workstream ? null : 'hidden')} icon='clock'>\n {ticket?.Is_Workstream && <TicketWorkstream\n selectedProject={ticket?.Project_Id ? selectedProject : null}\n />}\n </PanelBarItem>\n <PanelBarItem id=\"form\" title={ticket?.CustomFormName + (formRenderProps.errors.customform ? ' - ' + formRenderProps.errors.customform : '')} className={customFormTop ? formRenderProps.errors.customform ? SECTION_REQUIRED : null : 'hidden'} icon='paste-plain-text'>\n {customFormTop && (<Field\n id={\"customform\"}\n name={\"customform\"}\n label={\"form\"}\n component={CustomForm}\n formId={ticket?.CustomFormId}\n fields={ticket?.CustomFormFields}\n companyId={ticket.Company_Id}\n onChange={fieldChanged} />)}\n </PanelBarItem>\n <PanelBarItem id=\"description\" title={userProfile?.Phrases.Description || \"\"} selected={true} className={formRenderProps.errors.description ? 'section-required' : null} icon='track-changes'>\n <TicketDescription />\n </PanelBarItem>\n <PanelBarItem id=\"form\" focused={true} title={ticket?.CustomFormName + (formRenderProps.errors.customform ? ' - ' + formRenderProps.errors.customform : '')} selected={false} className={customFormBottom ? formRenderProps.errors.customform ? SECTION_REQUIRED : null : 'hidden'} icon='paste-plain-text'>\n {customFormBottom &&\n <Field\n id={\"customform\"}\n name={\"customform\"}\n label={\"form\"}\n component={CustomForm}\n formId={ticket?.CustomFormId}\n fields={ticket?.CustomFormFields}\n companyId={ticket.Company_Id}\n onChange={fieldChanged} />}\n </PanelBarItem>\n <PanelBarItem id=\"action\" parentExpanded={true} focused={true} title={`Add ${userProfile?.Phrases.Action}`} selected={false} className={formRenderProps.errors.action ? SECTION_REQUIRED : null} icon='comment'>\n <Field\n id={\"action\"}\n name={\"action\"}\n component={ActionNote}\n companyId={ticket?.Company_Id}\n statusId={ticket?.Call_Status_Id}\n />\n </PanelBarItem>\n {debug && <PanelBarItem id=\"meta\" expanded={false} title='Meta data' selected={true}>\n <JsonTreeViewer data={ticket} title=\"Ticket data\" />\n <JsonTreeViewer data={initialAction} title=\"Action data\" />\n </PanelBarItem>}\n </PanelBar>\n\n </div>\n </FormElement>\n\n )\n }\n } />\n {somethingLoading && <PartialSpinny />}\n </>\n )\n}\nexport default TicketDetails;","import { FieldWrapper } from '@progress/kendo-react-form'\nimport { DropDownTree, DropDownTreeChangeEvent, DropDownTreeExpandEvent } from \"@progress/kendo-react-dropdowns\";\nimport React from \"react\";\nimport { Label } from \"@progress/kendo-react-labels\";\nimport { TicketApi } from \"../../../redux/api/TicketApi\";\nimport { expandedState, processTreeData } from \"../../../utils/TreeDataOperations\";\nimport { ITemplateListItem } from '../../../types/Ticket/ITemplate';\nimport { Api } from '../../../redux/api/BaseApi';\n\nexport const TemplateList: React.FunctionComponent<TemplateListProps> = props => {\n const selectField = \"selected\";\n const expandField = \"expanded\";\n const dataItemKey = \"Id\";\n const subItemsField = \"Templates\";\n\n const { data: template } = TicketApi.useGetTemplateQuery(props.templateId, { skip: !props.templateId });\n const { data: templates, isLoading } = TicketApi.useGetMyTemplatesQuery();\n const { data: userProfile } = Api.useGetUserProfileQuery();\n\n const selectedTemplate = { Id: props.templateId, Name: props.templateId ? template?.Call_Template_Name : null } //templates?.map(t => t.Templates.filter(t2=>t2.Id === props.templateId)\n const [value, setValue] = React.useState(selectedTemplate);\n const [open, setOpen] = React.useState<boolean>();\n const [expanded, setExpanded] = React.useState([templates?.length && templates?.[0][dataItemKey]]);\n\n\n const onChange = (event: DropDownTreeChangeEvent) => {\n //console.log('event', expanded, expanded.includes(event?.value?.Id))\n if (event?.value && event?.value.Id < 0) {\n if (!expanded.includes(event?.value.Id))\n setExpanded([event?.value.Id]); //expand\n else\n //let newArray = [...expanded].splice(expanded.indexOf(event?.value.Id)\n setExpanded((oldVal) => {\n let newVal = [...oldVal]\n newVal.splice(expanded.indexOf(event?.value.Id), 1)\n return newVal;\n }); //collaps\n setOpen(true); //stay open\n\n return\n }\n\n if (!event.value || !props.hasDescription || window.confirm(`Changing the template will REPLACE the ${userProfile.Phrases.CallPhrase} ${userProfile.Phrases.Description}. Are you sure you want to continue?`)) {\n setValue(event.value);\n props.onChange(event)\n setOpen(undefined); //Close\n }\n }\n const onExpandChange = React.useCallback(\n (event: DropDownTreeExpandEvent) =>\n setExpanded(expandedState(event.item, dataItemKey, expanded)),\n [expanded]\n );\n\n const treeData = React.useMemo(\n () => {\n const fields = { selectField, expandField, dataItemKey, subItemsField };\n //console.log('processTreeData', selectedTemplate, value)\n let tree = processTreeData(templates || [], { expanded, value }, fields)\n //console.log('processTreeData2', tree)\n return tree\n }, [expanded, value, templates]\n );\n\n return (\n <FieldWrapper>\n <Label>\n {/* Template */}\n </Label>\n <div className={\"k-form-field-wrap\"}>\n <DropDownTree data={treeData} loading={isLoading} placeholder=\"Select...\"\n onBlur={() => setOpen(undefined)}\n opened={open}\n value={selectedTemplate}\n dataItemKey=\"Id\"\n textField=\"Name\"\n subItemsField=\"Templates\"\n onChange={onChange}\n selectField={selectField}\n expandField={expandField}\n onExpandChange={onExpandChange}\n />\n </div>\n </FieldWrapper>\n )\n}\n\ntype TemplateListProps = {\n templateId?: number;\n hasDescription?: boolean;\n onChange?: (e: { value: ITemplateListItem; }) => void;\n}","import { IFileSetting } from '../../types/File/FileSetting';\nimport { IFile } from '../../types/File/IFile';\nimport { Api } from './BaseApi'\n\nconst FileApi = Api.injectEndpoints({\n endpoints: (build) => ({\n isActive: build.query<boolean, number>({\n query: (typeId) => `File/IsActive/${typeId}`,\n providesTags: [\"FileIsActive\"],\n }),\n getFiles: build.query<IFile[], { typeId: number, primaryId: number }>({\n query: ({ typeId, primaryId }) => `File/${typeId}/${primaryId | 0}`,\n providesTags: [\"GetFiles\"],\n }),\n getFileSettings: build.query<IFileSetting, void>({\n query: () => `File/Settings`,\n providesTags: [\"GetFileSetting\"],\n }),\n // saveFiles: build.mutation<boolean, UploadFileInfo[]>({\n // query: (files) => ({\n // url: `File/Save`,\n // method: \"POST\",\n // body: files,\n // }),\n // // invalidatesTags: [\"FileIsActive\"]\n // }),\n deleteFile: build.mutation<boolean, string>({\n query: (id) => ({\n url: `File/${id}`,\n method: \"DELETE\"\n }),\n invalidatesTags: [\"GetFiles\"]\n }),\n refetchFiles: build.mutation<null, void>({\n queryFn: () => ({ data: null }),\n invalidatesTags: ['GetFiles'],\n }),\n }),\n overrideExisting: false,\n})\n\nexport { FileApi };","export const FileType = {\n \"Undefined\": 0,\n \"User\": 1,\n \"Project\": 2,\n \"Asset\": 3,\n \"Company\": 4,\n \"Office\": 5,\n \"Call_Action_Internal\": 6,\n \"Call_Action_External\": 7,\n \"Knowledgebase\": 8,\n \"Company_Logo\": 9,\n \"Login_Image\": 10,\n \"Banner_Image\": 11,\n \"Report_Image\": 12,\n \"Call_Template_Action\": 13,\n \"Project_Template\": 14,\n \"Email_Parser\": 15,\n \"Profile_Image\": 16,\n \"Email_Action_Template\": 17,\n \"Timesheet\": 18,\n \"Nav\": 19,\n \"Chat\": 20,\n \"Login_Background\": 21,\n \"Internal_Background\": 22,\n \"SSI_Background\": 23,\n \"User_Background\": 24,\n \"Team_Banner_Logo\": 25,\n \"Team_Report_Logo\": 26,\n \"Company_Type_Logo\": 27,\n \"Company_Type_Chat_Logo\": 28\n}","import { Grid, GridColumn, GridColumnMenuGroup } from \"@progress/kendo-react-grid\";\nimport { Api } from \"../../../redux/api/BaseApi\";\nimport { TicketApi } from \"../../../redux/api/TicketApi\";\nimport { toDigital } from \"../../../utils/utils\";\nimport { FileApi } from '../../../redux/api/FileApi';\nimport { FileType } from '../../../types/File/FileType';\nimport { SimpleSpinny } from \"../../Nav/Spinny\";\nimport React, { useEffect } from \"react\";\nimport {\n setGroupIds,\n getGroupIds,\n setExpandedState,\n} from \"@progress/kendo-react-data-tools\";\nimport { GroupDescriptor, SortDescriptor, process } from \"@progress/kendo-data-query\";\nimport { ITemplateAction } from \"../../../types/Ticket/ITemplate\";\n\nconst TemplateActions: React.FC<TemplateActionProps> = (props) => {\n const { data: isFileActive } = FileApi.useIsActiveQuery(FileType.Call_Action_Internal)\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { data: actions, isFetching } = TicketApi.useGetTemplateActionsQuery(props.templateId, { skip: !props.templateId })\n\n const initialDataState = {\n take: 10,\n skip: 0,\n groupable: false,\n sort: [{ field: \"Step_Order\", dir: \"desc\" } as SortDescriptor, { field: \"Order\", dir: \"desc\" } as SortDescriptor]\n };\n const [dataState, setDataState] = React.useState(initialDataState);\n // const bindData = React.useMemo(() => {\n // return (props.templateId && actions?.map(a => { return { ...a, Bill_Time: toDigital(a.Billable_Time), Non_Bill_Time: toDigital(a.Non_Billable_Time) } })) || [];\n // }, [dataState, actions]);\n const bindData = (props.templateId && actions?.map(a => { return { ...a, Bill_Time: toDigital(a.Billable_Time), Non_Bill_Time: toDigital(a.Non_Billable_Time) } })) || [];\n\n const processWithGroups = (data, dataState) => {\n const newDataState = process(data, dataState);\n setGroupIds({\n data: newDataState.data,\n group: dataState.group,\n });\n return newDataState;\n };\n const onDataStateChange = React.useCallback((event) => {\n const newDataState = processWithGroups(bindData, event.dataState);\n setDataState(event.dataState);\n setResultState(newDataState);\n }, []);\n\n const [resultState, setResultState] = React.useState(\n processWithGroups(bindData, initialDataState)\n );\n\n //Group the grid if this is a workflwo template\n useEffect(() => {\n setDataState(d => {\n return {\n ...d, group: props.isWorkflow ? [{\n field: \"Step_Name\",\n compare: (a: ITemplateAction, b: ITemplateAction) => a.Step_Order < b.Step_Order ? 1 : -1,\n } as GroupDescriptor] : [],\n sort: props.isWorkflow ? [{ field: \"Order\", dir: \"desc\" } as SortDescriptor] : [{ field: \"Order\", dir: \"asc\" } as SortDescriptor]\n }\n });\n }, [props.isWorkflow])\n\n if (!props.templateId) return <></>;\n\n return (<>\n {/* dataState:{JSON.stringify(dataState)} */}\n {/* props.isWorkflow:{JSON.stringify(props)} */}\n {isFetching\n ? <SimpleSpinny />\n : <Grid\n data={process(bindData || [], dataState)}\n total={resultState.total}\n onDataStateChange={onDataStateChange}\n {...dataState}\n sortable={false}\n groupable={false}\n pageable={true}\n reorderable={true}>\n <GridColumn field=\"Action_Notes\" title=\"Notes\" width={undefined} />\n {/* Attachment column */}\n {isFileActive && <GridColumn field=\"File_Count\" title=\"\" width={40} headerClassName=\"template-attach-column\" headerCell={(c) => {\n return <span className=\"k-font-icon k-i-attachment p-1\"></span>\n }} />}\n <GridColumn field=\"Bill_Time\" title={userProfile?.Features?.Non_Bill_Time ? \"Bill\" : \"Time\"}\n width={80} />\n {userProfile?.Features?.Non_Bill_Time && <GridColumn field=\"Non_Bill_Time\" width={80} title='Non Bill' />}\n\n </Grid>}\n </>)\n}\n\ntype TemplateActionProps = {\n templateId: number\n isWorkflow: boolean\n}\n\nexport default TemplateActions;","\nimport { PanelBar, PanelBarItem } from \"@progress/kendo-react-layout\";\nimport React from \"react\";\nimport { Api } from \"../../../redux/api/BaseApi\";\nimport { TicketApi } from \"../../../redux/api/TicketApi\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../redux/hooks\";\n\nimport { ITemplateListItem } from \"../../../types/Ticket/ITemplate\";\nimport { TemplateList } from \"../ListControls/TemplateList\";\nimport * as TicketSlice from \"../../../slices/TicketSlice\";\nimport TemplateActions from \"./TemplateActions\";\n\nconst Templates: React.FC = (props) => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const dispatch = useReduxDispatch();\n const { ticket } = useReduxSelector(state => state.ticketDetails);\n const { data: template } = TicketApi.useGetTemplateQuery(ticket?.Template_Id, { skip: !ticket?.Template_Id });\n\n\n const onTemplateChanged = (e: { value: ITemplateListItem; }) => {\n dispatch(TicketSlice.SetTemplatePopulated(false))\n dispatch(TicketSlice.SetTemplate(e.value))\n\n //console.log('After dispatch', template?.ID, ticket.Template_Id)\n }\n const title = userProfile?.Features.Call_Templates && userProfile?.Features.Workflow\n ? `Templates & Workflows`\n : userProfile?.Features.Call_Templates ? 'Templates' : userProfile?.Features.Workflow ? 'Workflows' : '...'\n\n return (\n <PanelBar>\n <PanelBarItem selected={true} expanded={true} title={title} >\n <div className=\"mb-3\">\n <TemplateList onChange={onTemplateChanged} templateId={ticket.Template_Id} hasDescription={ticket?.Call_Desc?.length > 0} />\n </div>\n <TemplateActions templateId={ticket.Template_Id} isWorkflow={template?.IsWorkflow} />\n </PanelBarItem>\n </PanelBar>\n )\n}\n\nexport default Templates;","import React, { FunctionComponent } from 'react'\nimport { Window } from '@progress/kendo-react-dialogs';\nimport { useGetTenantQuery } from '../../../redux/api/BaseApi';\nimport { trimChar } from '../../../utils/utils';\n\n\nconst KBPreview: FunctionComponent<KBPreviewArgs> = props => {\n const { data: tenant } = useGetTenantQuery();\n return (\n <Window className='kb-preview' modal={true} onClose={props.onClose} initialWidth={900} initialHeight={700} title={`Knowledge Base Article: KB${props.KB_ID}`}>\n <section className='relative grow flex flex-col' style={{ height: '100%' }}>\n <iframe title='KB Preview' className=\"grow z-0\" src={`${trimChar(tenant?.Tenant_Url, '/')}/KBase/?Popup=1&KB_Id=${props.KB_ID}`}></iframe>\n </section>\n </Window>\n )\n}\n\nexport type KBPreviewArgs = {\n KB_ID: number\n onClose: () => void\n}\nexport default KBPreview;","import { Checkbox } from \"@progress/kendo-react-inputs\";\nimport React from \"react\";\nimport { Grid, GridColumn as Column, GridDataStateChangeEvent } from \"@progress/kendo-react-grid\";\nimport { nanoid } from \"nanoid\";\nimport { IKBSearchResult } from \"../../../types/KB/IKBSearchResult\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../redux/hooks\";\nimport { process, State } from '@progress/kendo-data-query';\nimport { Api, useGetTenantQuery } from \"../../../redux/api/BaseApi\";\nimport { PanelBar, PanelBarItem } from \"@progress/kendo-react-layout\";\nimport KBPreview from \"./KBPreview\";\nimport { SetLinkedKbs } from \"../../../slices/TicketSlice\";\nimport ReactTimeAgo from 'react-timeago'\nimport { trimChar } from \"../../../utils/utils\";\n\nconst KnowledgeBase: React.FC = (props) => {\n const dispatch = useReduxDispatch();\n const { data: tenant } = useGetTenantQuery();\n const { ticket } = useReduxSelector(state => state.ticketDetails);\n const [previewKBId, setPreviewKBId] = React.useState<number>()\n const columns = [\n {\n title: \"Article #\",\n field: \"KB_Id\",\n show: true,\n filter: \"text\",\n orderIndex: 0,\n width: 80,\n cell: (props) => {\n return (\n <td colSpan={props.colSpan} style={props.style}>\n <a target={\"_blank\"} href={`${trimChar(tenant.Tenant_Url, '/')}/KBase/?Popup=0&KB_Id=${props.dataItem[\"Id\"]}`}>{props.dataItem[\"KB_Id\"]}</a>\n </td>)\n }\n },\n {\n title: \"Title\",\n field: \"Title\",\n show: true,\n filter: \"text\",\n orderIndex: 1\n },\n {\n title: \"Updated\",\n field: \"Date_Updated\",\n show: true,\n filter: \"text\",\n orderIndex: 3,\n cell: (props) => {\n return (\n <td colSpan={props.colSpan} style={props.style}>\n <ReactTimeAgo date={new Date(props.dataItem[\"Date_Updated\"] + 'Z')} />\n </td>)\n }\n },\n {\n title: \"Score\",\n field: \"Rating\",\n show: true,\n filter: \"text\",\n orderIndex: 4,\n width: 80\n },\n {\n width: 50,\n cell: (props) => {\n return (\n <td colSpan={props.colSpan} style={props.style}>\n <button onClick={() => {\n setPreviewKBId(props.dataItem[\"ID\"]);\n }} title=\"Preview\" className=\"k-font-icon k-i-preview k-icon-48\"></button>\n </td>\n );\n },\n show: true,\n orderIndex: 5\n }\n ]\n\n const kbSelected = (e: IKBSearchResult) => {\n const linkedKbs = ticket.Linked_Kb_Ids ? [...ticket.Linked_Kb_Ids] : [] as number[];\n //Add or remove element\n console.log('kbSelected', linkedKbs.indexOf(e.ID), linkedKbs.length)\n linkedKbs.indexOf(e.ID) === -1 ? linkedKbs.push(e.ID) : linkedKbs.splice(linkedKbs.indexOf(e.ID), 1)\n dispatch(SetLinkedKbs(linkedKbs));\n }\n const { results: kbResults } = useReduxSelector(state => state.kb);\n const userState = ({ state: { take: 5, skip: 0 }, columns: null }) as { state: State, columns: [{ field: string, orderIndex: number }] }\n const [dataState, setDataState] = React.useState<State>(userState?.state || {});\n const dataStateChange = (event: GridDataStateChangeEvent) => {\n setDataState(event.dataState);\n };\n\n const { data: userProfile } = Api.useGetUserProfileQuery();\n return <>\n <PanelBar>\n <PanelBarItem selected={true} expanded={true} title=\"Knowledge Base Results\" >\n {previewKBId && <KBPreview KB_ID={previewKBId} onClose={() => setPreviewKBId(null)} />}\n <Grid\n data={process(kbResults || [], dataState)}\n {...dataState}\n onDataStateChange={dataStateChange}\n // onColumnReorder={columnReorder}\n sortable={true}\n groupable={false}\n pageable={true}\n reorderable={false}\n //pageSize={5}\n >\n <Column width={50} locked={true} reorderable={false}\n key={nanoid()}\n field=\"\"\n cell={(e) => {\n if (e.rowType === 'groupHeader') return <></>;\n return (\n <td style={{ textAlign: 'center' }}>\n <Checkbox title={`Link to ${userProfile?.Phrases.CallPhrase}`} checked={ticket.Linked_Kb_Ids?.indexOf(e.dataItem[\"ID\"]) > -1} onChange={() => kbSelected(e.dataItem)} />\n </td>)\n }}\n />\n {columns?.map((column, idx) =>\n column.show && (\n <Column\n key={idx}\n orderIndex={column.orderIndex}\n field={column.field}\n title={column.title}\n cell={column.cell}\n width={column.width}\n\n />\n )\n )}\n </Grid>\n </PanelBarItem>\n </PanelBar>\n </>\n\n}\n\nexport default KnowledgeBase;","import { FunctionComponent, useEffect, useState } from \"react\";\nimport { Upload, UploadAdditionalData, UploadFileInfo, UploadHttpHeaders, UploadOnAddEvent, UploadOnBeforeUploadEvent, UploadOnProgressEvent, UploadOnRemoveEvent, UploadOnStatusChangeEvent } from \"@progress/kendo-react-upload\";\nimport React from \"react\";\nimport { FileApi } from \"../../redux/api/FileApi\";\nimport { Constants } from \"../../Variables/StaticVariables\";\nimport { FileUploadProps } from \"../../types/Props/FileUploadProps\";\nimport { useReduxDispatch, useReduxSelector } from \"../../redux/hooks\";\nimport * as FileSlice from \"./FileSlice\";\nimport { IFileUpload } from \"../../types/File/FileUpload\";\nimport { PartialSpinny } from \"../Nav/Spinny\";\nimport {\n Hint,\n} from \"@progress/kendo-react-labels\";\n\nconst FileUpload: FunctionComponent<FileUploadProps> = props => {\n const dispatch = useReduxDispatch()\n const { files } = useReduxSelector(s => s.files)\n const { user } = useReduxSelector(s => s.auth)\n const [token, setToken] = useState('');\n const [error, setError] = useState('');\n //const [files, setFiles] = React.useState<Array<UploadFileInfo>>([]);\n const revUploadUrl = `${Constants.apiRoot}file/${props.FileType}/${props.Primary_Id | 0}`\n const [deleteFile, { isLoading: isDeleting }] = FileApi.useDeleteFileMutation();\n const { data: apifiles, isFetching } = FileApi.useGetFilesQuery({ typeId: props.FileType, primaryId: props.Primary_Id });\n const [refetchFiles] = FileApi.useRefetchFilesMutation();\n const { data: fileSettings } = FileApi.useGetFileSettingsQuery()\n const maxFilesReached = fileSettings && fileSettings?.Max_Files <= apifiles?.length;\n const mountedRef = React.useRef(true)\n\n const setFiles = (f: UploadFileInfo[]) => {\n dispatch(FileSlice.SetFiles(f?.map(f1 => {\n return {\n name: f1.name,\n uid: f1.uid,\n size: f1.size,\n extension: f1.extension,\n status: f1.status,\n progress: f1.progress\n } as IFileUpload\n })))\n }\n useEffect(() => {\n console.log('useEffect FielUpload.tsx', apifiles?.length)\n let newFiles = apifiles?.map(f => {\n return {\n name: f.File_Name,\n uid: f.ID.toString(),\n size: f.Length,\n extension: f.File_Name.substring(f.File_Name.lastIndexOf('.'))\n } as UploadFileInfo\n })\n setFiles(newFiles)\n }, [apifiles]);\n useEffect(() => {\n console.log('useEffect()', apifiles?.length)\n async function getToken() {\n //let user = await userManager.getUser()\n setToken(user.access_token);\n }\n if (!token)\n getToken();\n\n return () => { mountedRef.current = false; }\n }, []);\n const onRemove = (event: UploadOnRemoveEvent) => {\n //Make sure some files aren't uploading\n if (event.newState.filter(n => n.status === 3).length > 0) {\n alert('Please wait for files to finish uploading')\n return\n }\n\n console.log('onRemove', event.affectedFiles)\n event.affectedFiles.map(\n f =>\n deleteFile(f.uid).then(e => {\n setFiles(event.newState);\n })\n\n )\n\n }\n const onProgress = (event: UploadOnProgressEvent) => {\n console.log('progress', event.newState)\n\n setFiles(event.newState);\n };\n const onAdd = (event: UploadOnAddEvent) => {\n setError('')\n console.log('onAdd', event, fileSettings?.Prohibited)\n let newFiles = event.newState;\n\n //Moved to onBeforeUpload\n //Validation done on the server\n //remove files too big\n // let fileTooBig = event.affectedFiles.find(f => f.size > fileSettings?.Max_Size * 1024 * 1024)\n // if (fileTooBig) {\n // setError(`Cannot upload file because file size is too large. Upload limit is ${fileSettings?.Max_Size}Mb`)\n // newFiles.splice(newFiles.indexOf(fileTooBig), 1)\n // }\n // if (fileSettings?.Prohibited?.length) {\n // let fileProhibited = event.affectedFiles.find(f => fileSettings?.Prohibited.indexOf(f.extension.replace('.', '')) > -1)\n // if (fileProhibited) {\n // setError(`Cannot upload file because the file extension (${fileProhibited.extension}) is prohibited`)\n // newFiles.splice(newFiles.indexOf(fileProhibited), 1)\n // }\n // }\n\n setFiles(newFiles);\n\n }\n\n const onStatusChange = (event: UploadOnStatusChangeEvent) => {\n console.log('event.response?.status', event.response?.response, event?.newState)\n if (event.response?.response?.status === 400 || event.response?.response?.status === 500)\n setError(event.response?.response?.data)\n\n console.log('mountedRef.current = ', mountedRef.current);\n if (mountedRef.current)\n setFiles(event.newState);\n\n //only refresh the files if they have ALL finished uploading\n if (event.newState.filter(n => n.status === 3 && n.progress < 100).length === 0) {\n console.log('ready to refetchFiles()', apifiles?.length)\n refetchFiles() //Clear the cache'\n console.log('refetchFiles()', apifiles?.length)\n }\n\n };\n\n const onBeforeUpload = (event: UploadOnBeforeUploadEvent) => {\n console.log('onBeforeUpload', event.files, event.additionalData)\n\n let fileTooBig = event.files.find(f => f.size > fileSettings?.Max_Size * 1024 * 1024)\n if (fileTooBig) {\n setError(`Cannot upload file because file size is too large. Upload limit is ${fileSettings?.Max_Size}Mb`)\n files.splice(files.indexOf(fileTooBig), 1)\n }\n\n if (fileSettings?.Prohibited?.length) {\n let fileProhibited = event.files.find(f => fileSettings?.Prohibited.indexOf(f.extension.replace('.', '')) > -1)\n if (fileProhibited) {\n setError(`Cannot upload file because the file extension (${fileProhibited.extension}) is prohibited`)\n files.splice(files.indexOf(fileProhibited), 1)\n }\n }\n }\n\n return (\n <>\n {error &&\n <div className={\"k-messagebox k-messagebox-error\"}>\n {error}\n </div>}\n {(isDeleting || isFetching) && <PartialSpinny />}\n <Hint direction=\"end\">\n {maxFilesReached && fileSettings\n ? <div className=\"pr-1 k-text-error\">Max file limit reached ({fileSettings?.Max_Files}) </div>\n : <div className=\"pr-1\">Max file limit: {fileSettings?.Max_Files} </div>}\n <div> | Max file size:{fileSettings?.Max_Size}Mb</div>\n </Hint>\n {/* <button onClick={() => refetch()}>Refetch ({apifiles?.length})</button> */}\n <Upload\n className={maxFilesReached ? 'no-add-files' : ''}\n batch={false}\n multiple={true}\n files={files}\n saveHeaders={{ \"authorization\": [\"Bearer \" + token] } as UploadHttpHeaders}\n withCredentials={false}\n onAdd={onAdd}\n onRemove={onRemove}\n onBeforeUpload={onBeforeUpload}\n autoUpload={true}\n saveUrl={revUploadUrl}\n showActionButtons={true}\n onProgress={onProgress}\n onStatusChange={onStatusChange}\n />\n </>\n )\n}\n\nexport default FileUpload","import { FileApi } from \"../../../redux/api/FileApi\";\nimport { FileType } from \"../../../types/File/FileType\";\nimport FileUpload from \"../../Attachment/FileUpload\";\n\n\nconst Attachments: React.FC = (props) => {\n const { data: isFileActive } = FileApi.useIsActiveQuery(FileType.Call_Action_Internal)\n\n return (\n <div className=\"content\">\n {isFileActive && <FileUpload FileType={FileType.Call_Action_Internal} Primary_Id={0} />}\n </div>\n )\n}\n\nexport default Attachments;","import { IKBSearchResult } from '../../types/KB/IKBSearchResult';\nimport { KBSearchProps } from '../../types/KB/KBSearchProps';\nimport { Api } from './BaseApi'\n\nconst KBApi = Api.injectEndpoints({\n endpoints: (build) => ({\n searchKB: build.mutation<IKBSearchResult[], KBSearchProps>({\n query: (info) => ({\n url: \"KB/Search/\",\n method: \"POST\",\n body: info,\n }),\n invalidatesTags: [\"KBSearch\"]\n }),\n }),\n overrideExisting: false,\n})\n\nexport { KBApi };","import { Grid, GridColumn } from \"@progress/kendo-react-grid\";\nimport { Api } from \"../../../redux/api/BaseApi\";\nimport { TicketApi } from \"../../../redux/api/TicketApi\";\nimport { toDigital } from \"../../../utils/utils\";\nimport { FileApi } from '../../../redux/api/FileApi';\nimport { FileType } from '../../../types/File/FileType';\nimport { SimpleSpinny } from \"../../Nav/Spinny\";\nimport { useReduxSelector } from \"../../../redux/hooks\";\nimport { IAction } from \"../../../types/Ticket/IAction\";\nimport React, { useEffect } from \"react\";\n\nconst SplitActions: React.FC = (props) => {\n const { data: isFileActive } = FileApi.useIsActiveQuery(FileType.Call_Action_Internal)\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const splitOptions = useReduxSelector(state => state.ticketDetails.splitFromTicketOptions)\n const [getSplitActions, { isLoading }] = TicketApi.useActionsByIdMutation();\n const [actions, setActions] = React.useState<IAction[]>([])\n\n useEffect(() => {\n if (splitOptions && splitOptions.Ids.length > 0 && splitOptions.TicketId > 0)\n getSplitActions(splitOptions).unwrap().then((r) => {\n setActions(r.map(a => { return { ...a, Bill_Time: toDigital(a.Billable_Time), Non_Bill_Time: toDigital(a.Non_Billable_Time) } }));\n }).catch((err) => { });\n\n }, [splitOptions, getSplitActions])\n\n return (<>\n <p className=\"k-form-hint p-3\">These {userProfile?.Phrases.Action}s will be Split (moved) to this {userProfile?.Phrases.CallPhrase} when logged.</p>\n {isLoading\n ? <SimpleSpinny />\n : <Grid data={actions} sort={[{ field: \"Action_Id\" }]}>\n <GridColumn field=\"Staff_Name\" title=\"Author\" width={80} />\n <GridColumn field=\"Action_Dt\" title=\"Timestamp\" width={80} />\n <GridColumn field=\"Action_Notes\" title=\"Notes\" width={undefined} cell={(c) => {\n return <div className=\"whitespace-pre-wrap\" dangerouslySetInnerHTML={{ __html: c.dataItem.Action_Notes }}></div>\n }} />\n {/* Attachment column */}\n {isFileActive && <GridColumn field=\"File_Count\" title=\"\" width={40} headerClassName=\"template-attach-column\" headerCell={(c) => {\n return <span className=\"k-font-icon k-i-attachment p-1\"></span>\n }} />}\n <GridColumn field=\"Bill_Time\" title={userProfile?.Features?.Non_Bill_Time ? \"Bill\" : \"Time\"}\n width={80} />\n {userProfile?.Features?.Non_Bill_Time && <GridColumn field=\"Non_Bill_Time\" width={80} title='Non Bill' />}\n\n </Grid>}\n </>)\n}\n\nexport default SplitActions;","import { WindowActionsBar } from '@progress/kendo-react-dialogs'\nimport { Badge, BadgeContainer } from '@progress/kendo-react-indicators'\nimport { Drawer, DrawerContent, DrawerItem, DrawerItemProps, DrawerSelectEvent } from '@progress/kendo-react-layout'\nimport React, { FunctionComponent, useEffect, useState } from 'react'\nimport { Navigate, Route, Routes, useLocation, useNavigate } from 'react-router-dom'\nimport { AssetApi } from '../../redux/api/AssetApi'\nimport { Api } from '../../redux/api/BaseApi'\nimport { TicketApi } from '../../redux/api/TicketApi'\nimport { TicketDrawerProps } from '../../types/Props/TicketDrawerProps'\nimport LogOptions from './FormControls/LogOptions'\nimport TicketHierarchy from './FormControls/TicketHierarchy'\nimport ExistingTickets from './GridControls/ExistingTickets'\nimport TicketAssets from './GridControls/TicketAssets'\nimport TicketDetails from './TicketDetails/TicketDetails'\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport { useReduxDispatch, useReduxSelector } from '../../redux/hooks'\nimport Templates from './FormControls/Templates'\nimport * as TicketSlice from '../../slices/TicketSlice'\n//import { UserApi } from '../../redux/api/UserApi'\nimport { IStaff } from '../../types/IStaff'\nimport KnowledgeBase from './FormControls/KnowledgeBase'\nimport Attachments from './FormControls/Attachments'\nimport { FileType } from '../../types/File/FileType'\nimport { FileApi } from '../../redux/api/FileApi'\nimport * as KBSlice from '../../slices/KBSlice'\nimport { KBApi } from '../../redux/api/KBApi'\nimport { KBSearchProps } from '../../types/KB/KBSearchProps'\nimport SplitActions from './FormControls/SplitActions'\n\n\nconst TicketDrawer: FunctionComponent<TicketDrawerProps> = props => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { ticket, splitFromTicketOptions } = useReduxSelector(state => state.ticketDetails);\n const { data: apifiles } = FileApi.useGetFilesQuery({ typeId: FileType.Call_Action_Internal, primaryId: ticket?.ID | 0 });\n const { data: isFileActive } = FileApi.useIsActiveQuery(FileType.Call_Action_Internal)\n const { data: assets } = AssetApi.useGetAssetsQuery({ contactId: 0, locationId: ticket.Company_Address_Id }, { skip: !ticket.Company_Address_Id })\n const contactAssets = assets?.filter((a) => a.Contact_Id === ticket.Company_Contact)\n const { data: existingTickets } = TicketApi.useGetOpenEndUserTicketsQuery(ticket.Company_Contact_Uid, { skip: !ticket.Company_Contact_Uid })\n const { data: clientTickets } = TicketApi.useGetOpenTicketsQuery({ companyId: ticket.Company_Id }, { skip: !ticket.Company_Id })\n const { data: templateActions } = TicketApi.useGetTemplateActionsQuery(ticket.Template_Id, { skip: !ticket.Template_Id })\n const { data: templates } = TicketApi.useGetMyTemplatesQuery();\n const { data: template } = TicketApi.useGetTemplateQuery(ticket.Template_Id, { skip: !ticket.Template_Id });\n const { data: status } = TicketApi.useGetStatusQuery(template?.Status_Id, { skip: !template?.Status_Id });\n const { results: kbResults } = useReduxSelector(state => state.kb);\n const dispatch = useReduxDispatch();\n const location = useLocation();\n const navigate = useNavigate();\n\n function isSelected(route) {\n return location.pathname.indexOf(route) > -1;\n }\n function isDetailsPage() {\n //check for /ticket/details OR just /ticket\n return location.pathname.endsWith('/ticket') || location.pathname.endsWith('/ticket/') || location.pathname.endsWith('/ticket/details');\n }\n\n const items = [\n {\n text: `Templates`, route: \"templates\", selected: isSelected('templates'), icon: \"k-i-copy\",\n badge: `${ticket.Template_Id ? templateActions?.length || '0' : ''}`,\n title: ticket.Template_Id ? `${templateActions?.length || '0'} Template ${userProfile.Phrases.Action}${templateActions?.length === 1 ? '' : 's'}` : null,\n visible: templates?.length ? 'true' : null\n },\n {\n separator: true,\n visible: templates?.length ? 'true' : null\n },\n { text: `${userProfile?.Phrases.CallPhrase} Details`, route: \"details\", selected: isDetailsPage(), icon: \"k-i-edit\", visible: 'true' },\n { separator: true, visible: 'true' },\n {\n title: \"Attachments\",\n text: \"Attachments\",\n route: \"file\",\n selected: isSelected('file'),\n icon: \"k-i-clip\",\n visible: isFileActive ? 'true' : null,\n badge: `${apifiles?.length || ''}`\n },\n {\n separator: true,\n visible: isFileActive ? 'true' : null,\n },\n {\n text: ticket.Is_Parent ? \"Parent\" : ticket.Parent_Call_Id > 0 ? `Child to ${ticket.Parent_Call_Id}` : \"Parent / Child\",\n route: \"hierarchy\",\n icon: \"k-i-link-horizontal\",\n selected: isSelected('hierarchy'),\n visible: 'true'\n },\n\n { separator: true, visible: 'true' },\n {\n text: `Open ${userProfile?.Phrases.CallPhrase}s`,\n route: \"existing\",\n icon: \"k-i-calendar\",\n badge: `${existingTickets?.length || 0} / ${clientTickets?.length || 0}`,\n disabled: (!ticket.Company_Contact_Uid),\n selected: isSelected('existing'),\n visible: 'true'\n },\n { separator: true, visible: userProfile?.Features.View_Assets && userProfile?.Features.Asset_Manager ? 'true' : null },\n {\n text: `${userProfile?.Phrases.Asset}s ${ticket?.Assets?.length > 0 ? '(' + ticket?.Assets?.length + ')' : ''}`,\n route: \"assets\",\n selected: isSelected('assets'),\n badge: `${contactAssets?.length || 0} / ${assets?.length || 0}`,\n disabled: (!ticket.Company_Contact_Uid),\n icon: \"k-i-toggle-full-screen-mode\",\n visible: userProfile?.Features.View_Assets && userProfile?.Features.Asset_Manager ? 'true' : null\n },\n {\n separator: true,\n visible: userProfile?.Features.View_KB && userProfile?.Features.KnowledgeBase ? 'true' : null\n },\n {\n badge: kbResults?.length > 0 ? kbResults.length : null,\n title: \"Knowlege base\",\n text: \"KBase\",\n route: \"kbase\",\n selected: isSelected('kbase'),\n image: \"./images/lifesaver.png\",\n visible: userProfile?.Features.View_KB && userProfile?.Features.KnowledgeBase ? 'true' : null\n },\n {\n separator: true,\n visible: 'true'\n },\n {\n badge: splitFromTicketOptions?.Ids?.length > 0 ? splitFromTicketOptions?.Ids?.length : null,\n title: \"Split \" + userProfile?.Phrases.Action + \"s\",\n text: \"Split \" + userProfile?.Phrases.Action + \"s\",\n route: \"split\",\n selected: isSelected('split'),\n icon: \"k-i-connector\",\n // image: \"./images/split-gray.png\",\n visible: splitFromTicketOptions && splitFromTicketOptions.TicketId && splitFromTicketOptions.Ids?.length > 0\n },\n {\n separator: true,\n visible: 'true'\n },\n ];\n const onSelect = (e: DrawerSelectEvent) => {\n navigate(e.itemTarget.props.route);\n };\n const RenderItem = (props: DrawerItemProps) => {\n if (!props.visible) return <></>;\n return (\n <DrawerItem {...props} title={props.text}>\n {props.badge && !props.disabled ?\n <BadgeContainer>\n <div title={props.title}>\n {props.image\n ? <img alt=\"Tool\" src={props.image} style={{ backgroundColor: userProfile?.Nav_Hex_Color, maxHeight: 18, borderRadius: 10 }} />\n : <span className={\"k-font-icon \" + props.icon} style={{ color: userProfile?.Nav_Hex_Color }} />\n }\n <Badge className='ml-1' size='small' align={{ horizontal: \"end\", vertical: \"top\" }}>{props.badge}</Badge>\n </div>\n </BadgeContainer>\n :\n <>\n {props.image\n ? <img alt=\"Tool\" src={props.image} style={{ backgroundColor: userProfile?.Nav_Hex_Color, maxHeight: 18, borderRadius: 10 }} />\n : <span className={\"k-font-icon \" + props.icon} style={{ color: userProfile?.Nav_Hex_Color }} />\n }\n\n </>\n }\n <div className=\"item-descr-wrap\">\n <div>{props.text}</div>\n </div>\n </DrawerItem>\n );\n };\n\n useEffect(() => {\n //Set the other template details like description, type, status etc.\n console.log('Template useEffect', template, status)\n if (template) {\n //if (!ticket.Template_Populated) {\n //Call description\n template.Call_Desc && dispatch(TicketSlice.SetDescription(decodeURIComponent(template.Call_Desc)))\n\n //Call Type\n template.Sub_Type_Id && dispatch(TicketSlice.SetType(template.Sub_Type_Id))\n // }\n\n //Call Status\n template.Status_Id && status && dispatch(TicketSlice.SetStatus(status))\n\n //Call Assignment\n if (template.Assignment?.length) {\n let newAssigned = template.Assignment.map(a => { return { ID: a.Contact_Id, Full_Name: a.Full_Name } as IStaff })\n dispatch(TicketSlice.SetAssigned(newAssigned))\n }\n\n\n //dispatch(TicketSlice.SetTemplatePopulated(true))\n }\n }, [template]);\n\n useEffect(() => {\n console.log('Template Status useEffect')\n //Call Status\n if (template?.Status_Id && status) {\n dispatch(TicketSlice.SetStatus(status))\n console.log('Template useEffect: Status', template, status)\n\n }\n\n }, [template, status]);\n\n //KB Search When ticket description changes\n const [searchKB] = KBApi.useSearchKBMutation();\n const [wordCount, setWordCount] = useState(0)\n useEffect(() => {\n //console.log('KnowledgeBase - desc changed');\n const fetchResults = async () => {\n let currentWordCount = (ticket?.Call_Desc).split(\" \").length;\n //Search\n if (!ticket?.Call_Desc) {\n dispatch(KBSlice.SetResults([]))\n } else if (currentWordCount > 0 && wordCount !== currentWordCount) {\n var kbResults = await searchKB({ Description: ticket.Call_Desc, EndUserId: userProfile.Id } as KBSearchProps).unwrap()\n\n //Update results\n dispatch(KBSlice.SetResults(kbResults))\n\n setWordCount(currentWordCount);\n }\n }\n fetchResults();\n }, [ticket.Call_Desc])\n\n return (\n <>\n {/* KnowledgeBase {JSON.stringify(userProfile?.Features.KnowledgeBase)}\n View_KB {JSON.stringify(userProfile?.Features.View_KB)} */}\n <Drawer\n expanded={props.expanded}\n position=\"start\"\n mode=\"push\"\n mini={true}\n width={175}\n items={items}\n item={RenderItem}\n onSelect={onSelect}\n >\n <DrawerContent>\n <Routes>\n {(userProfile?.Features.Call_Templates || userProfile?.Features.Workflow) && <Route path=\"templates\" element={<Templates />} />}\n <Route path=\"details\" element={<TicketDetails ticketSaved={props.ticketSaved} />} />\n <Route path=\"existing\" element={<ExistingTickets />} />\n <Route path=\"hierarchy\" element={<TicketHierarchy />} />\n <Route path=\"assets\" element={<TicketAssets />} />\n <Route path=\"file\" element={<Attachments />} />\n <Route path=\"kbase\" element={<KnowledgeBase />} />\n <Route path=\"split\" element={<SplitActions />} />\n <Route path=\"*\" element={<TicketDetails ticketSaved={props.ticketSaved} />} />\n {/* <Route path=\"*\" element={<Navigate to={{pathname:'details',search:{templateId:tem}}} />} /> */}\n </Routes>\n </DrawerContent>\n </Drawer>\n <WindowActionsBar>\n <div className=\"flex m-2\">\n <div className='flex w-full'>\n <LogOptions />\n </div>\n <div className='inline-block ml-1'>\n <Button onClick={() => { navigate('./details') }} form='ticket-form' type={\"submit\"} style={{ background: userProfile?.Nav_Hex_Color }} className='log-button'>\n <img src='./images/Log-Ticket-White.png' className='inline mr-2 w-5' alt=\"Log Ticket\" />\n Save {userProfile?.Phrases.CallPhrase}\n </Button>\n {/* <Button onClick={() => {\n dispatch(TicketSlice.ResetTicket(null));\n }} >Reset!</Button> */}\n </div>\n </div>\n </WindowActionsBar>\n </>\n )\n}\n\nexport default TicketDrawer;","import React, { useEffect } from \"react\";\nimport { useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport TicketDrawer from \"./TicketDrawer\";\nimport { Window, WindowMoveEvent } from \"@progress/kendo-react-dialogs\";\nimport { PartialSpinny } from \"../Nav/Spinny\";\nimport { TicketApi as Api } from \"../../redux/api/TicketApi\";\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport { TicketLocationState } from \"./TicketRoute\";\nimport { useReduxDispatch, useReduxSelector } from \"../../redux/hooks\";\nimport { SetDescription } from \"../../slices/TicketSlice\";\nimport { SetHTML_Notes } from \"../../slices/ActionSlice\";\n\nexport const TicketPage = (props) => {\n const { logOptions } = useReduxSelector((state) => state.ticketDetails);\n const { Id: ticketId } = useParams();\n const location = useLocation();\n const navigate = useNavigate();\n const dispatch = useReduxDispatch();\n let background =\n location.state && (location.state as TicketLocationState).background;\n const [previousPage] = React.useState<Location>(background);\n let goBack = () => {\n if (previousPage) navigate(previousPage);\n else navigate(\"/\");\n const blank = \"\";\n dispatch(SetDescription(blank));\n dispatch(SetHTML_Notes(blank));\n };\n\n const [expanded, setExpanded] = React.useState<boolean>(true);\n const [size, setSize] = React.useState<windowDims>({\n w: Math.max(window.innerWidth - 200, 500),\n h: window.innerHeight - 200,\n });\n\n const handleClick = (e) => {\n //console.log('handleClick',e)\n\n setExpanded(!expanded);\n };\n\n const resizing = (e: WindowMoveEvent) => {\n //console.log('resizing', e.width)\n setSize({ t: e.top, l: e.left, w: e.width, h: e.height });\n setExpanded(e.width < 660 ? false : true);\n };\n\n const moving = (e: WindowMoveEvent) => {\n if (e.top !== size.t || e.left !== size.l) {\n //console.log('moving')\n setSize({ ...size, t: e.top, l: e.left });\n }\n };\n\n window.onresize = (e: UIEvent) => {\n console.log(\"window resizing\");\n let popupWidth = window.innerWidth - 200;\n setSize({ w: popupWidth, h: window.innerHeight - 200, t: 100, l: 100 });\n\n setExpanded(popupWidth < 660 ? false : true);\n };\n\n useEffect(() => {\n console.log(\"useEffect\", size);\n //collapse the drawer when the popup gets smaller than 660px\n setExpanded(size.w < 660 ? false : true);\n }, [size]);\n\n //Raised when a ticket is saved. decides where we go from here\n const ticketSaved = (tIds: number[]) => {\n //Check log options\n let myOptions = logOptions?.Options?.split(\",\");\n //console.log('myOptions', myOptions)\n if (!myOptions) {\n goBack();\n }\n\n if (myOptions?.indexOf(\"0\") > -1) {\n //Go to the ticket\n navigate(`/deeplink?url=/calls/callhistory.aspx?call_id=${tIds[0]}`);\n } else if (\n myOptions?.indexOf(\"3\") === -1 &&\n myOptions?.indexOf(\"4\") === -1\n ) {\n //If no \"Log another\" option is chosen\n //just close the popup by going Back\n goBack();\n }\n };\n\n const { data: existingTicket } = Api.useGetTicketQuery(\n { ticketId: ticketId ? parseInt(ticketId) : 0, populateFormData: true },\n { skip: !ticketId }\n );\n const { data: userProfile, isLoading: profileIsLoading } =\n Api.useGetUserProfileQuery(null);\n const ticketTitle = (\n <div className=\"custom-toolbar\">\n <Button\n icon=\"menu\"\n fillMode=\"flat\"\n title=\"Toggle toolbar\"\n onClick={handleClick}\n />\n <span className=\"title\">\n {existingTicket\n ? `${userProfile?.Phrases.CallPhrase} ${existingTicket.ID}`\n : userProfile?.Phrases.CallPhrase ? `New ${userProfile?.Phrases.CallPhrase}` : ''}\n </span>\n </div>\n );\n\n var modalWindow = (\n <div className={props.isModal ? undefined : \"modal-ticket-wrapper\"}>\n <Window\n onMove={moving}\n top={size.t}\n left={size.l}\n width={size.w}\n height={size.h}\n onResize={resizing}\n className=\"ticket-details\"\n onClose={goBack}\n stage={props.isModal ? undefined : \"FULLSCREEN\"}\n title={ticketTitle}\n modal={props.isModal}\n >\n {profileIsLoading && <PartialSpinny />}\n {!profileIsLoading && (\n <>\n {/* location:{JSON.stringify(size)} */}\n\n <TicketDrawer\n expanded={expanded}\n ticketSaved={ticketSaved}\n ></TicketDrawer>\n </>\n )}\n </Window>\n </div>\n );\n const nonModalForm = (\n <div className=\"ticket-details\">\n <TicketDrawer\n expanded={expanded}\n ticketSaved={ticketSaved}\n ></TicketDrawer>\n </div>\n );\n\n return props.isModal ? modalWindow : nonModalForm;\n};\n\ntype windowDims = {\n w: number;\n h: number;\n t?: number;\n l?: number;\n};\n","import React from \"react\";\nimport { TicketPage } from \"./TicketPage\";\n\n\nconst TicketModal: React.FunctionComponent<any> = props => {\n return (\n <>\n {/* (ticketpage.tsx - {props.index}) */}\n <TicketPage isModal={true} >\n </TicketPage>\n </>\n );\n}\n\nexport default TicketModal;","import { Api } from './BaseApi'\nimport { IFavOrder, IFavorite } from '../../types/Favorites/IFavorite';\nimport { IFavoriteConfig } from '../../types/Favorites/IFavoriteConfig';\n\nconst FavoriteApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getUserFavorites: build.query<IFavorite[], string>({\n query: (uid) => `User/${uid}/Favorite`,\n providesTags: [\"GetUserFavs\"],\n }),\n saveFavorite: build.mutation<any, { fav: IFavorite, uid: string }>({\n query: (info) => ({\n url: `User/${info.uid}/Favorite`,\n method: \"POST\",\n body: info.fav\n }),\n invalidatesTags: [\"GetUserFavs\", \"GetContacts\"]\n }),\n getFavoriteConfig: build.query<IFavoriteConfig, string>({\n query: (uid) => `User/${uid}/Favorite/Config`,\n providesTags: [\"GetFavConfig\"],\n }),\n saveFavoriteConfig: build.mutation<any, { config: IFavoriteConfig, uid: string }>({\n query: (info) => ({\n url: `User/${info.uid}/Favorite/Config`,\n method: \"POST\",\n body: info.config\n }),\n invalidatesTags: [\"GetFavConfig\", \"GetContacts\"]\n }),\n sortFavorite: build.mutation<any, { order: IFavOrder, uid: string }>({\n query: (info) => ({\n url: `User/${info.uid}/Favorite/Sort`,\n method: \"POST\",\n body: info.order\n }),\n invalidatesTags: [\"GetUserFavs\", \"GetContacts\"]\n }),\n sortFavCategories: build.mutation<any, { order: string[], uid: string }>({\n query: (info) => ({\n url: `User/${info.uid}/Favorite/Category/Sort`,\n method: \"POST\",\n body: info.order\n }),\n invalidatesTags: [\"GetUserFavs\", \"GetContacts\"]\n }),\n deleteFavorite: build.mutation<any, { favId: number, uid: string }>({\n query: (info) => ({\n url: `User/${info.uid}/Favorite/${info.favId}`,\n method: \"DELETE\"\n }),\n invalidatesTags: [\"GetUserFavs\", \"GetContacts\"]\n }),\n invalidateFavorites: build.mutation<null, void>({\n queryFn: () => ({ data: null }),\n invalidatesTags: ['GetUserFavs'],\n }),\n }),\n\n overrideExisting: true,\n})\n\nexport { FavoriteApi };","export default class Setting {\n public static USER_TIMEZONE = 104\n public static REVELATIONS_COLLAPSED_STATE = 121;\n}","import React from 'react'\nimport { Offset, Popup } from '@progress/kendo-react-popup';\nimport { Menu, MenuItem, MenuSelectEvent } from '@progress/kendo-react-layout';\nimport { HeaderOptions } from '../HeaderOptions';\nimport { MenuProps } from './ContactsMenu';\nimport { Link } from 'react-router-dom';\n\nexport const HeaderMenu = (props: MenuProps<HeaderOptions>) => {\n //const { data: contact } = UserApi.useGetUserByIdQuery(props?.contactId, { skip: !props?.contactId });\n const menuItemSelected = (e: MenuSelectEvent) => {\n //console.log('menuItemSelected', e)\n\n //Fire the click event for this option\n props.options.find(o => o.id === e.item.data)?.onclick()\n\n props.itemClicked();\n }\n\n return (\n <Popup show={props?.visible}\n offset={props?.offset}\n anchorAlign={{ horizontal: 'right', vertical: 'bottom' }} className='contacts-menu' collision={{ horizontal: 'fit', vertical: 'fit' }} >\n <Menu className='contacts-header-menu' vertical={true} style={{ display: \"inline-block\" }} onSelect={menuItemSelected} openOnClick={false} hoverCloseDelay={100} >\n {props.options.map(o => (\n <MenuItem key={o.id} render={() => {\n return o.link\n ? <Link target={'_blank'} to={o.link}>{o.element || <img src={o.image} className='tool-image' />} <span>{o.title}</span></Link>\n : <div>{o.element || <img src={o.image} className='tool-image' />} <span>{o.title}</span></div>\n }} icon={o.icon?.replace('k-i-', '')} text={o.title} data={o.id} />\n ))}\n </Menu>\n </Popup>\n\n )\n}","import React, { useContext, useEffect, useState } from 'react'\nimport { FavoriteApi } from '../../../redux/api/FavoriteApi'\nimport './Revelations.scss'\nimport { Menu, MenuItem, MenuSelectEvent, PanelBar, PanelBarItem } from '@progress/kendo-react-layout';\nimport { UserApi } from '../../../redux/api/UserApi';\nimport Setting from '../../User/Settings';\nimport { Sortable, SortableItemUIProps, SortableOnDragOverEvent, SortableOnDragStartEvent } from \"@progress/kendo-react-sortable\";\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport { Icon } from '@progress/kendo-react-common';\nimport { Offset, Popup } from '@progress/kendo-react-popup';\nimport { InputSuffix, TextBox } from '@progress/kendo-react-inputs';\nimport { IFavOrder, IFavorite } from '../../../types/Favorites/IFavorite';\nimport { RevUserContext } from '../../../context/UserContext';\nimport { useReduxDispatch, useReduxSelector } from '../../../redux/hooks';\nimport * as FavoriteSlice from '../../../slices/FavoriteSlice';\nimport { nanoid } from 'nanoid';\nimport { IUserProfile } from '../../../types/User/IUserProfile';\nimport Scrollbars from 'react-custom-scrollbars-2';\nimport { ReactSortable } from \"react-sortablejs\";\nimport { HeaderMenu } from '../Contacts/HeaderMenu';\nimport { HeaderOptions } from '../HeaderOptions';\nimport { MenuProps } from '../Contacts/ContactsMenu';\nimport { PartialSpinny } from '../../Nav/Spinny';\nimport { updateIframeSrc } from '../../../slices/RevelationSlice';\nimport { ToolProps } from '../ActivityFeed/ActivityFeed';\n\nexport const Revelations: React.FC<ToolProps> = (mainProps) => {\n const profile = useContext<IUserProfile>(RevUserContext)\n const sortedData = useReduxSelector((state) => state.favs.favorites);\n const dispatch = useReduxDispatch();\n const [menuProps, setMenuProps] = useState<FavMenuProps>()\n const [expanded, setExpanded] = useState<string[]>()\n const [editItem, setEditItem] = useState<{ id: number, text: string }>()\n const { data: collapsedItems } = UserApi.useGetSettingQuery(Setting.REVELATIONS_COLLAPSED_STATE)\n const [saveSetting] = UserApi.useSaveSettingMutation()\n const { data: favorites, isFetching } = FavoriteApi.useGetUserFavoritesQuery(profile.Uid)\n const [saveFavorites] = FavoriteApi.useSaveFavoriteMutation()\n const [sortFavorites] = FavoriteApi.useSortFavoriteMutation()\n const [sortFavoriteCategories] = FavoriteApi.useSortFavCategoriesMutation()\n const [deleteFavorite] = FavoriteApi.useDeleteFavoriteMutation()\n const [headerMenu, setHeaderMenu] = useState<MenuProps<HeaderOptions>>()\n //Get the categories\n const [itemsToRender, setItemsToRender] = React.useState<FavData[]>([]);\n\n useEffect(() => {\n if (sortedData) {\n const categoryIds = sortedData ? [...new Set(sortedData?.slice().sort((a, b) => (a.Category_Order - b.Category_Order)).map(item => item.Category_Id))] : [];\n let newRenderData = categoryIds?.map(cid => {\n let _children = sortedData.filter(f => f.Category_Id === cid).sort((a, b) => a.Order - b.Order);\n return {\n id: cid.toString(),\n title: `${sortedData.find(f => f.Category_Id === cid).Category_Name} (${_children.length})`,\n imageUrl: sortedData.find(f => f.Category_Id === cid).Category_Image_Url,\n children: _children\n } as FavData\n });\n //console.log('setItemsToRender')\n setItemsToRender(newRenderData)\n //cancel edit\n setEditItem(null)\n //console.log('useEffect sortedData setItemsToRender', newRenderData);\n }\n }, [sortedData])\n\n //Only set the favoirites the first time we load data\n useEffect(() => {\n console.log('UpdatingFavoriteSlice')\n //if (favorites && !sortedData?.length) {\n //Always update\n favorites && dispatch(FavoriteSlice.saveFavorites(favorites))\n //}\n\n }, [favorites])\n\n\n //Put the saved collapsed items into state\n useEffect(() => {\n\n //Sets the expanded items into local state. This is the opposite of the state saved via the API which is the ids of the COLLAPSED items\n let expandedSet = false;\n if (collapsedItems && sortedData && !expanded) {\n let collapsedArray = JSON.parse(collapsedItems.Big_String_Value) || []//[\"1\",\"2\",\"3\"...]\n if (collapsedArray) {\n let distinctIds = [...new Set(sortedData.map(s => s.Category_Id.toString()))]\n let expanded = distinctIds.filter(c => collapsedArray.indexOf(c.toString()) === -1);\n // console.log('collapsedItems', collapsedItems)\n // console.log('expanded', expanded)\n // console.log('collapsedArray', collapsedArray)\n // console.log('distinctIds', distinctIds)\n // console.log('collapsedArray.indexOf ', distinctIds.map(c => collapsedArray.indexOf(c.toString())))\n setExpanded(expanded);\n expandedSet = true;\n }\n }\n //console.log('setExpanded2', expanded, expandedSet, collapsedItems)\n }, [collapsedItems, sortedData])\n\n const headerRef = React.useRef<HTMLButtonElement>();\n\n const loadRevPage = (fav, deeplink) => {\n let relativeURL = `${fav.Url_Format.replace('{0}', fav.Key_Value_1 || '').replace('{1}', fav.Key_Value_2 || '').replace('{2}', fav.Key_Value_3 || '').replace('{3}', fav.Key_Value_4 || '').replace('{4}', fav.Key_Value_5 || '').replace('{5}', fav.Key_Value_6 || '').replace('{6}', fav.Key_Value_7 || '').replace('{7}', fav.Key_Value_8 || '')}`\n //console.log('loading fav:', relativeURL, fav)\n let navigateTo = `${relativeURL}${relativeURL.indexOf('?') > -1 ? '&' : '?'}d=${nanoid()}`\n if (deeplink)\n return `./deeplink?url=${relativeURL}`;\n else\n return `${relativeURL}`;\n\n mainProps.itemSelected();\n }\n\n const gotoFavorite = (e, navigateTo) => {\n if (mainProps.fullScreen)\n return true;\n\n e.preventDefault()\n e.stopPropagation()\n dispatch(updateIframeSrc(navigateTo));\n\n return false;\n }\n\n\n const RenderItem = (props: SortableItemUIProps) => {\n const { attributes, dataItem, forwardRef, isActive, style } = props;\n const fav: IFavorite = dataItem;\n const [editText, setEditText] = useState<string>(editItem?.id === fav.Id ? editItem.text : '')\n\n return (\n <div className='item'\n {...attributes}\n ref={forwardRef}\n style={{\n ...style,\n cursor: 'default'\n // border: isActive ? \"1px dashed black\" : 0\n }}>\n <div className='flex move k-font-icon k-i-pan k-color-secondary my-handle' title='Reorder' />\n {editItem?.id === fav.Id\n //Edit mode\n ? <TextBox autoFocus value={editText} onChange={(e) => setEditText(e.value.toString())}\n suffix={() => (\n <InputSuffix>\n <Button\n className='m-1 save-button'\n style={{ backgroundColor: profile?.Nav_Hex_Color, color: '#fff' }}\n disabled={!editText} title='Save changes' onClick={async () => {\n //Save changes\n await saveFavorites({ uid: profile.Uid, fav: { ...fav, Name: editText } });\n\n //Update the name in the main sortedData\n let newData = [...sortedData]\n let found = newData.find(f => f.Id === fav.Id)\n if (found) {\n newData[newData.indexOf(found)] = { ...found, Name: editText }\n //console.log('found', newData)\n }\n dispatch(FavoriteSlice.saveFavorites(newData))\n\n }}>Save</Button>\n <Button onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n setEditItem(null)\n\n }} icon='cancel' title='cancel'></Button>\n </InputSuffix>)\n } />\n //Text mode\n : <a className='link' href={loadRevPage(fav, true)} onClick={(e) => { return gotoFavorite(e, loadRevPage(fav, false)); }}>{fav.Name}</a>\n\n }\n {/* Menu */}\n {editItem?.id !== fav.Id &&\n <Icon className='k-color-secondary menu' name='menu' size='small' onClick={(e) => {\n console.log('menu clicked')\n e.syntheticEvent.preventDefault();\n e.syntheticEvent.stopPropagation();\n setMenuProps(oldProps => { return { ...oldProps, item: fav, visible: !oldProps?.visible, offset: { left: e.syntheticEvent.clientX - 100, top: e.syntheticEvent.clientY + 10 } } })\n }} ></Icon>}\n </div>\n );\n };\n\n //Close the menu\n const handleItemSelect = async (e) => {\n //console.log('handleItemSelect', e)\n //setMenuProps(oldProps => { return { ...oldProps, visible: false } })\n\n setExpanded((oldState) => {\n let newState = oldState ? [...oldState] : [];\n if (newState.indexOf(e.id.toString()) > -1)\n newState.splice(newState.indexOf(e.id.toString()), 1);\n else\n newState.push(e.id.toString())\n console.log('newState', newState)\n\n //Save via the API\n let newArray = itemsToRender.filter(i => newState.indexOf(i.id) === -1).map(i => i.id)\n let newSettings = { ...collapsedItems }\n newSettings.Big_String_Value = newArray.length ? `[\"${newArray.join('\",\"')}\"]` : null\n console.log('expanded', newArray, newSettings.Big_String_Value)\n saveSetting(newSettings);\n\n return newState;\n });\n\n\n }\n\n const menuItemSelected = async (e: MenuSelectEvent) => {\n console.log('menuItemSelected', e)\n //Delete favorite\n if (e.item.text.indexOf('Delete') > -1) {\n\n await deleteFavorite({ favId: menuProps.item.Id, uid: profile.Uid }).then(() => {\n //just remove the item\n let newState = [...sortedData]\n let foundItem = newState.find(n => n.Id === menuProps.item.Id)\n if (foundItem) {\n newState.splice(newState.indexOf(foundItem), 1)\n dispatch(FavoriteSlice.saveFavorites(newState))\n }\n }\n )\n\n //Update the state with new favorites\n //refetch().then((e) => dispatch(FavoriteSlice.saveFavorites(e.data)));\n } else {\n setEditItem({ id: menuProps.item.Id, text: menuProps.item.Name });\n }\n\n //close the popup\n setMenuProps(oldProps => { return { ...oldProps, visible: false } })\n }\n\n const categoryReordered = (evt, sortable) => {\n //console.log('categoryReordered', sortable)\n //update category order via the API.\n let sortArray = itemsToRender.map(i => i.id)\n sortFavoriteCategories({ order: sortArray, uid: profile.Uid })\n\n }\n\n const HeaderOptions = [\n {\n id: \"win\",\n title: `Open in New Window`,\n element: <button className='icon settings k-font-icon k-i-hyperlink-open' title='Open in New Window'></button>,\n link: '/Revelations',\n visible: !mainProps.fullScreen\n }\n ] as HeaderOptions[]\n\n\n return (\n <section className='revelations' onMouseLeave={mainProps.onMouseLeave} >\n <header className='right-bar-header'><img className='icon' src='./images/Revelations-Dark.png' /><span className='text'>Revelations</span>\n {!mainProps.fullScreen && <button ref={headerRef} className='icon k-font-icon k-i-more-horizontal' title='More options' onClick={(e) => {\n setHeaderMenu((m) => { return { ...m, visible: !m?.visible, offset: { top: e.clientY + 30, left: e.clientX - 170 } } })\n }} />}\n {!mainProps.fullScreen && <button className='icon lock' onClick={mainProps.unlocked} title='Lock side-bar' ><img src='./images/Lock.png' style={{ alignContent: 'center' }} /></button>}\n {!mainProps.fullScreen && <button className='icon unlock' onClick={mainProps.locked} title='Unlock side-bar' ><img src='./images/Unlock.png' style={{ alignContent: 'center' }} /></button>}\n </header>\n <HeaderMenu {...headerMenu} options={HeaderOptions.filter(o => o.visible)} itemClicked={() => setHeaderMenu(null)} />\n {!isFetching && itemsToRender?.length == 0 && <img className='intro' src='./images/revelations_inst.png' />}\n {isFetching && !favorites ? <PartialSpinny />\n : <Scrollbars>\n <PanelBar\n animation={false}\n isControlled={true}\n className='fav-list'\n expanded={expanded}\n >\n\n <ReactSortable list={itemsToRender} setList={setItemsToRender} onSort={categoryReordered} className='react-sorable k-panelbar' handle='.k-panelbar-item-icon'>\n {itemsToRender?.map((c) => {\n const onDragOver = (event: SortableOnDragOverEvent) => {\n let newData = [...sortedData]\n event.newState.map((n: IFavorite, i) => {\n let found = newData.find(f => n.Id === f.Id)\n if (found)\n newData[newData.indexOf(found)] = { ...found, Order: i }\n });\n dispatch(FavoriteSlice.saveFavorites(newData));\n\n };\n const Sorting = (event: SortableOnDragStartEvent) => {\n //No sorting when in edit mode\n if (menuProps?.visible || editItem)\n event.preventDefault()\n }\n const Sorted = (event: SortableOnDragOverEvent) => {\n console.log('sorted', c.id, event) //event.newstate\n const sortParams: IFavOrder = {\n CategoryId: parseInt(c.id),\n NewOrderIds: event.newState.map(i => (i as IFavorite).Id)\n }\n //Update stat via API\n sortFavorites({ order: sortParams, uid: profile.Uid })\n\n let newData = [...sortedData]\n event.newState.map((n: IFavorite, i) => {\n let found = newData.find(f => n.Id === f.Id)\n if (found)\n newData[newData.indexOf(found)] = { ...found, Order: i }\n });\n //console.log('dispatching', newData)\n dispatch(FavoriteSlice.saveFavorites(newData));\n }\n return (\n <>\n <PanelBarItem onSelect={handleItemSelect} expanded={expanded?.indexOf(c.id) > -1} key={c.id.toString()} id={c.id.toString()} title={`${c.title}`} imageUrl={`.${c.imageUrl}`} className=\"category-item k-panelbar-header\">\n <Sortable\n idField={\"Id\"}\n data={c.children}\n itemUI={RenderItem}\n onDragStart={Sorting}\n onDragEnd={Sorted}\n onDragOver={onDragOver}\n />\n </PanelBarItem>\n </>\n )\n })\n }\n </ReactSortable>\n </PanelBar>\n </Scrollbars>}\n {menuProps?.visible &&\n <Popup show={menuProps?.visible}\n offset={menuProps?.offset}\n anchorAlign={{ horizontal: 'right', vertical: 'bottom' }} className='feed-menu' collision={{ horizontal: 'fit', vertical: 'fit' }} >\n <Menu vertical={true} style={{ display: \"inline-block\" }} onSelect={menuItemSelected} openOnClick={false} hoverCloseDelay={100} >\n <MenuItem text=\"Edit item\" />\n <MenuItem text=\"Delete item\" />\n </Menu>\n </Popup>\n }\n </section>\n )\n}\nexport type FavData = {\n id: string\n title: string\n imageUrl: string,\n children: IFavorite[]\n}\nexport type FavMenuProps = {\n item: IFavorite\n visible: boolean\n offset: Offset\n}\n\nexport type FavProps = {\n itemSelected?: () => void\n locked?: () => void\n unlocked?: () => void\n fullScreen?: boolean\n}","import React from 'react'\nimport { Revelations } from './Revelations'\nimport './Revelations.scss'\n\nexport const RevelationsPage = () => {\n return (\n <div className='revelations-page'>\n <Revelations fullScreen={true} />\n </div>\n )\n}\n","import { Api } from './BaseApi'\nimport { IFeedResult } from '../../types/Feed/IFeedResult';\nimport { IFeedConfig } from '../../types/Feed/IFeedConfig';\n\nconst FeedApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getUserFeed: build.query<IFeedResult, { uid: string, lastId: string }>({\n query: ({ uid, lastId }) => `User/${uid}/Feed?lastId=${lastId}`,\n providesTags: [\"GetUserFeed\"],\n serializeQueryArgs: ({ endpointName }) => {\n return endpointName;\n },\n // Always merge incoming data to the cache entry\n merge: (currentCache, newItems) => {\n //console.log('merging...', currentCache.FeedItems?.length, newItems.FeedItems?.length, newItems.LastId)\n currentCache.FeedItems.push(...newItems.FeedItems);\n //Limit to 100 items and sort by ID\n currentCache.FeedItems = currentCache.FeedItems.sort((a, b) => b.ID - a.ID).slice(0, 100);\n currentCache.LastId = newItems.LastId;\n currentCache.UnReadCount = currentCache.FeedItems?.filter(x => !x.Is_Read && !(x.Use_Temp_Read && x.Is_Temp_Read)).length;\n },\n // Refetch when the page arg changes\n forceRefetch({ currentArg, previousArg }) {\n //console.log('forceRefetch', currentArg !== previousArg)\n return currentArg !== previousArg;\n }\n }),\n getFeedConfig: build.query<IFeedConfig, string>({\n query: (uid) => `User/${uid}/Feed/Config`,\n providesTags: [\"GetFeedConfig\"],\n }),\n saveFeedConfig: build.mutation<any, { uid: string, config: IFeedConfig }>({\n query: (info) => ({\n url: `User/${info.uid}/Feed/Config`,\n method: \"POST\",\n body: info.config\n }),\n async onQueryStarted(info, { dispatch, queryFulfilled }) {\n const postResult = dispatch(\n FeedApi.util.updateQueryData(\"getUserFeed\", undefined, (draft) => {\n draft.FeedItems.map(f => f.Is_Read = true);\n })\n );\n try {\n await queryFulfilled;\n } catch {\n postResult.undo();\n }\n },\n invalidatesTags: [\"GetFeedConfig\"]\n }),\n resetFeed: build.mutation<any, void>({\n query: () => null,\n async onQueryStarted(info, { dispatch, queryFulfilled }) {\n const postResult = dispatch(\n FeedApi.util.updateQueryData(\"getUserFeed\", undefined, (draft) => {\n draft.FeedItems.map(f => {\n f.Is_Read = f.Use_Temp_Read && f.Is_Temp_Read;\n f.Use_Temp_Read = false;\n f.Is_Temp_Read = false;\n return f;\n });\n })\n );\n try {\n await queryFulfilled;\n } catch {\n postResult.undo();\n }\n },\n invalidatesTags: [\"GetUserFeed\"]\n }),\n clearFeed: build.mutation<any, String>({\n query: (uid) => ({\n url: `User/${uid}/Feed/Clear`,\n method: \"POST\"\n }),\n async onQueryStarted(info, { dispatch, queryFulfilled }) {\n const postResult = dispatch(\n FeedApi.util.updateQueryData(\"getUserFeed\", undefined, (draft) => {\n draft.FeedItems.map(f => {\n f.Is_Read = true;\n return f;\n });\n })\n );\n try {\n await queryFulfilled;\n } catch {\n postResult.undo();\n }\n },\n invalidatesTags: [\"GetUserFeed\"]\n }),\n markAsRead: build.mutation<any, { id: number, uid: string }>({\n query: (data) => ({\n url: `User/${data.uid}/Feed/${data.id}/Read`,\n method: \"POST\"\n }),\n async onQueryStarted(info, { dispatch, queryFulfilled }) {\n const postResult = dispatch(\n FeedApi.util.updateQueryData(\"getUserFeed\", undefined, (draft) => {\n var foundIndex = draft.FeedItems.findIndex(f => f.Feed_Item_Id === info.id);\n\n console.log('markAsRead', foundIndex, info.id)\n\n if (foundIndex > -1) {\n draft.FeedItems[foundIndex] = { ...draft.FeedItems[foundIndex], Is_Temp_Read: true, Use_Temp_Read: true };\n draft.UnReadCount = draft.FeedItems?.filter(x => !x.Is_Read && !(x.Use_Temp_Read && x.Is_Temp_Read)).length;\n }\n })\n );\n try {\n await queryFulfilled;\n } catch {\n postResult.undo();\n }\n },\n invalidatesTags: [\"GetUserFeed\"]\n }),\n markAsUnRead: build.mutation<any, { id: number, uid: string }>({\n query: (data) => ({\n url: `User/${data.uid}/Feed/${data.id}/UnRead`,\n method: \"POST\"\n }),\n async onQueryStarted(info, { dispatch, queryFulfilled }) {\n const postResult = dispatch(\n FeedApi.util.updateQueryData(\"getUserFeed\", undefined, (draft) => {\n var foundIndex = draft.FeedItems.findIndex(f => f.Feed_Item_Id === info.id);\n\n console.log('markAsUnRead', foundIndex, info.id)\n\n if (foundIndex > -1) {\n draft.FeedItems[foundIndex] = { ...draft.FeedItems[foundIndex], Is_Read: false, Is_Temp_Read: false, Use_Temp_Read: false };\n draft.UnReadCount = draft.FeedItems?.filter(x => !x.Is_Read && !(x.Use_Temp_Read && x.Is_Temp_Read)).length;\n }\n })\n );\n try {\n await queryFulfilled;\n } catch {\n postResult.undo();\n }\n },\n invalidatesTags: [\"GetUserFeed\"]\n }),\n }),\n\n overrideExisting: true,\n})\n\nexport { FeedApi };","import React from 'react'\nimport { Offset, Popup } from '@progress/kendo-react-popup';\nimport { Menu, MenuItem, MenuSelectEvent } from '@progress/kendo-react-layout';\nimport { Link } from 'react-router-dom';\nimport { MenuProps } from '../Contacts/ContactsMenu';\nimport { HeaderOptions } from '../HeaderOptions';\n\nexport const HeaderMenu = (props: MenuProps<HeaderOptions>) => {\n //const { data: contact } = UserApi.useGetUserByIdQuery(props?.contactId, { skip: !props?.contactId });\n const menuItemSelected = (e: MenuSelectEvent) => {\n //Fire the click event for this option\n props.options.find(o => o.id === e.item.data)?.onclick()\n\n props.itemClicked();\n }\n\n return (\n <Popup show={props?.visible}\n offset={props?.offset}\n anchorAlign={{ horizontal: 'right', vertical: 'bottom' }} className='contacts-menu' collision={{ horizontal: 'fit', vertical: 'fit' }} >\n <Menu className='contacts-header-menu' vertical={true} style={{ display: \"inline-block\" }} onSelect={menuItemSelected} openOnClick={false} hoverCloseDelay={100} >\n {props.options.map(o => (\n <MenuItem render={() => {\n return o.link\n ? <Link target={'_blank'} to={o.link}>{o.element || <img src={o.image} className='tool-image' />} <span>{o.title}</span></Link>\n : <div>{o.element || <img src={o.image} className='tool-image' />} <span>{o.title}</span></div>\n }} icon={o.icon?.replace('k-i-', '')} text={o.title} data={o.id} />\n ))}\n </Menu>\n </Popup>\n\n )\n}","import { filterBy } from '@progress/kendo-data-query';\nimport { MultiSelect, MultiSelectChangeEvent, MultiSelectFilterChangeEvent } from '@progress/kendo-react-dropdowns';\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { UserApi } from '../../redux/api/UserApi';\n\nexport const TeamMultiSelect = (props: TeamListProps) => {\n const { data: teams, isFetching: teamsLoading } = UserApi.useGetTeamsQuery();\n const [teamsFiltered, setTeams] = useState([])\n const selectedTeams = useMemo(() => {\n return teams?.filter(t => props?.selectedTeamIds?.indexOf(t.ID) > -1);\n }, [teams, props?.selectedTeamIds]);\n\n useEffect(() => {\n console.log('Teams loading...', teams, selectedTeams)\n\n if (teams)\n setTeams(teams)\n }, [teams]);\n\n const onFilter = (event: MultiSelectFilterChangeEvent) => {\n console.log('Filter', event);\n setTeams(filterBy(teams?.slice(), event.filter));\n }\n if (!teamsFiltered)\n return <></>\n\n return (\n <>\n {/* selectedTeams:{JSON.stringify(selectedTeams)} / {teams.length} / {props.selectedTeamIds} */}\n <MultiSelect placeholder='Select multiple' filterable={true} popupSettings={{ className: 'z500' }} onFilterChange={onFilter} onChange={props.onChange} value={selectedTeams} data={teamsFiltered} dataItemKey=\"ID\" textField=\"Dept_Name\" loading={teamsLoading} />\n </>\n )\n}\n\nexport type TeamListProps = {\n selectedTeamIds?: number[],\n onChange?: (e: MultiSelectChangeEvent) => void\n}","import { DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns'\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport React, { FunctionComponent, useState } from 'react'\nimport {\n Label,\n Error,\n Hint,\n} from \"@progress/kendo-react-labels\";\nimport { toDigital } from '../../../utils/utils';\nimport { ProjectApi } from '../../../redux/api/ProjectApi';\nimport { IProjectType } from '../../../types/Project/IProjectType';\n\nexport const ProjectTypeList = (props) => {\n const {\n validationMessage,\n label,\n id,\n disabled,\n optional,\n onChange,\n multiSelect,\n placeholder,\n projectTypeIds,\n } = props;\n const isValid = !validationMessage;\n const showValidationMessage = validationMessage;\n const errorId = showValidationMessage ? `${id}_error` : \"\";\n const defaultValue = { ID: 0, Cost_Center: \"Select\" } as IProjectType\n const { data: projectTypes, isLoading: projectLoading } = ProjectApi.useGetProjectTypeListQuery()\n const selectProjectTypes = projectTypes?.filter(ct => projectTypeIds?.indexOf(ct.ID) > -1);\n const selectProjectType = projectTypes?.find(ct => projectTypeIds?.indexOf(ct.ID) > -1);\n const [opened, setOpened] = useState(false);\n return (\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label} {showValidationMessage && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n <div className={\"k-form-field-wrap\"} >\n {multiSelect ?\n <MultiSelect onChange={onChange}\n disabled={disabled}\n opened={opened}\n value={selectProjectTypes}\n onFocus={() => { setOpened(true) }}\n onBlur={() => { setOpened(false) }}\n placeholder={placeholder || 'Filter...'}\n data={projectTypes}\n textField=\"Cost_Center\"\n />\n :\n <DropDownList valid={isValid} defaultItem={defaultValue} popupSettings={{ className: 'z500' }} onChange={(e) => props.onSelect(e.value)} value={selectProjectType} data={projectTypes} dataItemKey=\"ID\" textField=\"Cost_Center\" loading={projectLoading} required={true} />\n }\n </div>\n </FieldWrapper>\n )\n}\n","import { DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns';\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport { Label } from \"@progress/kendo-react-labels\";\nimport React, { FunctionComponent, useState } from 'react'\nimport { ClientApi } from '../../../redux/api/ClientApi';\n\nconst ClientList: FunctionComponent<FieldRenderProps> = props => {\n const {\n validationMessage,\n touched,\n label,\n id,\n valid,\n disabled,\n hint,\n type,\n optional,\n value,\n data,\n multiSelect,\n clientIds,\n clientTypeId,\n ...others\n } = props;\n //const values = Array.isArray(field?.VALUES) ? field?.VALUES?.map(v => toInteger(v)) : [];\n const [opened, setOpened] = useState(false);\n const { data: clients } = ClientApi.useGetClientListQuery(clientTypeId);\n const currentValues = clientIds?.length > 0 ? clients?.filter(i => clientIds?.indexOf(i.ID) > -1) : undefined;\n const fieldChanged = (e) => {\n props.onChange(e);\n }\n const multiFieldChanged = (e) => {\n props.onChange(e);\n }\n\n return (\n <>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}\n >\n {label}\n </Label>\n {\n multiSelect\n ? <MultiSelect {...others} popupSettings={{ className: \"z500\" }} placeholder='Select multiple' onChange={multiFieldChanged} value={currentValues} data={clients} textField=\"Company_Name\" dataItemKey='ID'\n opened={opened}\n onFocus={() => { setOpened(true) }}\n onBlur={() => { setOpened(false) }} />\n : <DropDownList {...others} popupSettings={{ className: \"z500\" }} defaultItem={{ Company_Name: \"Select\" }} onChange={fieldChanged} value={currentValues?.length > 0 ? currentValues[0] : undefined} data={clients} dataItemKey=\"ID\" textField=\"Company_Name\" />\n }\n </>\n )\n}\n\nexport default ClientList;","import React, { useContext, useEffect, useState } from 'react'\nimport { Checkbox, RadioButton } from '@progress/kendo-react-inputs';\nimport { PanelBar, PanelBarItem } from '@progress/kendo-react-layout';\nimport { DropDownList, DropDownListChangeEvent, MultiSelect, MultiSelectChangeEvent, MultiSelectFilterChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { FeedApi } from '../../../redux/api/FeedApi';\nimport { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs';\nimport { PartialSpinny } from '../../Nav/Spinny';\nimport { IFeedConfig } from '../../../types/Feed/IFeedConfig';\nimport { TeamMultiSelect } from '../../Team/TeamMultiSelect';\nimport { FieldRenderProps, Form, FormElement } from '@progress/kendo-react-form';\nimport StaffList from '../../User/ListControls/StaffList';\nimport ClientTypeList from '../../ClientType/ClientTypeList';\nimport { ProjectTypeList } from '../../Project/ListControls/ProjectTypeList';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport ClientList from '../../Client/ListControls/ClientList';\nimport { RevUserContext } from '../../../context/UserContext';\n\nexport const SettingsDialog = (props: FeedDialogProps) => {\n const profile = useContext(RevUserContext)\n const { data: apiConfig, isFetching } = FeedApi.useGetFeedConfigQuery(profile.Uid)\n const [settings, setSettings] = useState<IFeedConfig>({} as IFeedConfig)\n const [saveFeedSettings, { isLoading: savingConfig }] = FeedApi.useSaveFeedConfigMutation();\n\n const saveClicked = async () => {\n //Save the feed config\n await saveFeedSettings({ config: settings, uid: profile.Uid });\n\n props.onSaved();\n }\n\n //put the API data in state\n useEffect(() => {\n console.log('put the API data in state', apiConfig)\n if (apiConfig)\n setSettings(apiConfig);\n }, [apiConfig]);\n\n const activityValues = [\n {\n text: `My ${profile?.Phrases.CallPhrase}s`,\n id: 0\n },\n {\n text: `My ${profile?.Phrases.CallPhrase} Monitor`,\n id: 1\n },\n {\n text: `All ${profile?.Phrases.CallPhrase}s`,\n id: 2\n }\n ]\n\n //Team filter changed\n const teamChanged = (e: MultiSelectChangeEvent) => {\n console.log('team changed', e)\n\n setSettings((oldval) => {\n return { ...oldval, Filter_Team_Ids: e.value?.map(v => v?.ID).join(',') }\n });\n }\n //Staff changed\n const staffChanged = (e: MultiSelectChangeEvent) => {\n console.log('staff changed', e)\n\n setSettings((oldval) => {\n return { ...oldval, Filter_Staff_Ids: e.value?.join(',') }\n });\n }\n const clientTypeChanged = (e) => {\n //console.log('client Type changed', e)\n setSettings((oldval) => {\n return { ...oldval, Filter_Client_Type_Ids: e.value?.map(v => v?.ID).join(',') }\n });\n }\n\n const clientChanged = (e) => {\n setSettings((oldval) => {\n return { ...oldval, Filter_Client_Ids: e.value?.map(v => v?.ID).join(',') }\n });\n }\n\n const projectTypeChanged = (e) => {\n //console.log('project Type changed', e)\n setSettings((oldval) => {\n return { ...oldval, Filter_Project_Type_Ids: e.value?.map(v => v?.ID).join(',') }\n });\n }\n\n const emptyProps = {} as FieldRenderProps\n\n return (\n <Dialog title={\"Activity feed settings\"} onClose={props.onClose} width={700} className={'feed-settings'}>\n\n {(!apiConfig || isFetching || !settings || savingConfig) &&\n <PartialSpinny />\n }\n <Scrollbars style={{ height: '500px' }} >\n <PanelBar style={{ marginRight: '8px' }}>\n <PanelBarItem expanded={true} title=\"Display settings\">\n <div className='flex flex-wrap'>\n <div className='k-form-field w-1/2 p-2'>\n <label>Activity for</label>\n <DropDownList dataItemKey='id' textField='text' value={activityValues.find(a => a.id === settings.Activity_For)} onChange={(e: DropDownListChangeEvent) => { setSettings((oldVal) => oldVal = { ...oldVal, Activity_For: e.value.id }) }} data={activityValues} />\n </div>\n <div className='k-form-field w-1/2 p-2'>\n <label>Display most recent</label>\n <DropDownList value={settings.Recent_Item_Count} onChange={(e: DropDownListChangeEvent) => { setSettings((oldVal) => oldVal = { ...oldVal, Recent_Item_Count: e.value }) }} data={[50, 100, 200]} />\n </div>\n <div className='k-form-field w-1/2 p-2'>\n <label>Initial visibility</label>\n <DropDownList dataItemKey='id' textField='text' value={settings.Initial_State ? { id: '1', text: 'Visible' } : { id: '0', text: 'Hidden' }} data={[\n {\n text: 'Hidden',\n id: '0'\n },\n {\n text: 'Visible',\n id: '1'\n }\n ]}\n onChange={(v) => setSettings((oldVal) => { return { ...oldVal, Initial_State: (v.value.id === '1') } })} />\n </div>\n <div className='k-form-field w-1/2 p-2'>\n <label>Remember visibility</label>\n <div>\n <div className='m-2 inline-block'>\n <RadioButton label='Yes' radioGroup='vis' checked={settings.Remember_State === 1} onChange={(v) => setSettings((oldVal) => { return { ...oldVal, Remember_State: 1 } })} />\n </div><div className='m-2 inline-block'>\n <RadioButton label='No' radioGroup='vis' checked={settings.Remember_State === 0} onChange={(v) => setSettings((oldVal) => { return { ...oldVal, Remember_State: 0 } })} />\n </div>\n </div>\n </div>\n </div>\n </PanelBarItem>\n <PanelBarItem expanded={true} title={`Track these changes ${settings.Options?.filter(o => o.Is_Checked).length}/${settings.Options?.length}`}>\n <div className='flex flex-wrap'>\n {settings.Options?.map((o, i) => {\n return (\n <div className='w-1/3 p-1'>\n <Checkbox label={o.Display} disabled={o.Visibility !== 1} checked={o.Is_Checked} onChange={(e) => {\n setSettings((oldVal) => {\n let newState = [...oldVal.Options]\n newState[i] = { ...newState[i], Is_Checked: e.value }\n return { ...oldVal, Options: newState }\n })\n }} />\n </div>\n )\n })}\n </div>\n </PanelBarItem>\n <PanelBarItem expanded={true} title=\"Filter By\">\n <div className='flex flex-wrap '>\n <div className='w-full flex flex-wrap'>\n <div className='w-1/6 flex flex-col-reverse pb-1'>\n <label>{profile?.Phrases.Team}/s</label>\n </div>\n <div className='w-4/6'>\n <div className='w-full'>\n <div className='p-2 inline-block' ><RadioButton label='Assigned To' checked={settings.Team_Filter_Option === 0} radioGroup=\"team-filter\" onChange={(v) => setSettings((oldVal) => { return { ...oldVal, Team_Filter_Option: 0 } })} /></div>\n <div className='p-2 inline-block' ><RadioButton label='Performed By' checked={settings.Team_Filter_Option === 1} radioGroup=\"team-filter\" onChange={(v) => setSettings((oldVal) => { return { ...oldVal, Team_Filter_Option: 1 } })} /></div>\n </div>\n <TeamMultiSelect selectedTeamIds={settings.Filter_Team_Ids?.split(',').map(t => parseInt(t))} onChange={teamChanged} />\n </div>\n </div>\n <div className='w-full flex flex-wrap mt-2'>\n <div className='w-1/6 flex flex-col-reverse pb-1'>\n <label>{profile?.Phrases.SupportStaff}</label>\n </div>\n <div className='w-4/6'>\n <div className='w-full'>\n <div className='p-2 inline-block' ><RadioButton label='Assigned To' checked={settings.Staff_Filter_Option === 0} radioGroup=\"staff-filter\" onChange={(v) => setSettings((oldVal) => { return { ...oldVal, Staff_Filter_Option: 0 } })} /></div>\n <div className='p-2 inline-block' ><RadioButton label='Performed By' checked={settings.Staff_Filter_Option === 1} radioGroup=\"staff-filter\" onChange={(v) => setSettings((oldVal) => { return { ...oldVal, Staff_Filter_Option: 1 } })} /></div>\n </div>\n <StaffList multiSelect={true} {...emptyProps} id='staff-list' values={settings.Filter_Staff_Ids?.split(',').map(t => parseInt(t))} onChange={staffChanged} />\n </div>\n </div>\n <div className='w-full flex flex-wrap mt-2'>\n <div className='w-1/6 flex flex-col-reverse pb-1'>\n <label>{profile?.Phrases.Client} Type</label>\n </div>\n <div className='w-4/6'>\n <ClientTypeList {...emptyProps} placeholder='Select multiple' onChange={clientTypeChanged} clientTypeIds={settings.Filter_Client_Type_Ids?.split(',').map(t => parseInt(t))} />\n </div>\n </div>\n <div className='w-full flex flex-wrap mt-2'>\n <div className='w-1/6 flex flex-col-reverse pb-1'>\n <label>{profile?.Phrases.Client}</label>\n </div>\n <div className='w-4/6'>\n <ClientList multiSelect={true} {...emptyProps} placeholder='Select multiple' onChange={clientChanged} clientIds={settings.Filter_Client_Ids?.split(',').map(t => parseInt(t))} />\n </div>\n </div>\n <div className='w-full flex flex-wrap mt-2'>\n <div className='w-1/6 flex flex-col-reverse pb-1'>\n <label>{profile?.Phrases.Project} Type</label>\n </div>\n <div className='w-4/6'>\n <ProjectTypeList multiSelect={true} {...emptyProps} placeholder='Select multiple' onChange={projectTypeChanged} projectTypeIds={settings.Filter_Project_Type_Ids?.split(',').map(t => parseInt(t))} />\n </div>\n </div>\n </div>\n </PanelBarItem>\n {/* <PanelBarItem expanded={false} title=\"Debug\">\n <div style={{ wordBreak: 'break-word' }}>\n {JSON.stringify(settings)}\n </div>\n </PanelBarItem> */}\n </PanelBar>\n </Scrollbars>\n <DialogActionsBar layout={'end'}>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-primary\" style={{ color: '#fff', background: profile?.Nav_Hex_Color }}\n onClick={saveClicked}>\n Save\n </button>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base\"\n onClick={props.onClose}>\n Cancel\n </button>\n </DialogActionsBar>\n\n </Dialog >\n )\n}\n\nexport type FeedDialogProps = {\n onClose: () => void\n onSaved: () => void\n}","import React, { Component, ReactNode } from \"react\";\n\ninterface Props {\n errorMessage?: string | ReactNode;\n children: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n}\n\nexport class ErrorBoundary extends Component<Props, State> {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError(error) {\n return { hasError: true };\n }\n\n render() {\n if (this.state.hasError) {\n return <p>{this.props.errorMessage}</p>;\n }\n\n return this.props.children;\n }\n}","import React, { useContext, useEffect } from 'react'\nimport { FeedApi } from '../../../redux/api/FeedApi'\nimport ReactTimeAgo from 'react-timeago'\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport './ActivityFeed.scss'\nimport { trimChar } from '../../../utils/utils';\nimport { Link } from 'react-router-dom';\nimport { useReduxDispatch, useReduxSelector } from '../../../redux/hooks';\nimport { PartialSpinny } from '../../Nav/Spinny';\nimport { IFeedItem } from '../../../types/Feed/IFeedItem';\nimport { Icon } from '@progress/kendo-react-common';\nimport { Offset, Popup } from '@progress/kendo-react-popup';\nimport { Menu, MenuItem, MenuSelectEvent } from '@progress/kendo-react-layout';\nimport { IUserProfile } from '../../../types/User/IUserProfile';\nimport { RevUserContext } from '../../../context/UserContext';\nimport * as RevelationSlice from '../../../slices/RevelationSlice';\nimport { HeaderOptions } from '../HeaderOptions';\nimport HTMLEllipsis from 'react-lines-ellipsis/lib/html'\nimport { MenuProps } from '../Contacts/ContactsMenu';\nimport { HeaderMenu } from './HeaderMenu';\nimport { Switch } from '@progress/kendo-react-inputs';\nimport { SettingsDialog } from './SettingsDialog';\nimport { ErrorBoundary } from '../../Common/ErrorBoundry';\nimport { IFeedResult } from '../../../types/Feed/IFeedResult';\n\nexport const ActivityFeed = (props: ToolProps) => {\n const profile = useContext<IUserProfile>(RevUserContext)\n const dispatch = useReduxDispatch();\n //const { FeedItems, LastId } = useReduxSelector(rev => rev.feed.feedItems)\n const [lastFeedId, setLastFeedId] = React.useState<number>();\n const { data } = FeedApi.useGetUserFeedQuery({ uid: profile.Uid, lastId: lastFeedId ? lastFeedId?.toString() : '' }, { pollingInterval: 20000, skip: !props.fullScreen });\n const [resetFeed] = FeedApi.useResetFeedMutation();\n //const [trigger, result] = FeedApi.useLazyGetUserFeedQuery({ pollingInterval: 20000 });\n const feedResult = props.feedResults || data;\n const [postAllAsRead, { isLoading }] = FeedApi.useClearFeedMutation();\n const [markAsRead, { isLoading: markingAsRead }] = FeedApi.useMarkAsReadMutation();\n const [markAsUnRead, { isLoading: markingAsUnRead }] = FeedApi.useMarkAsUnReadMutation();\n const [unreadOnly, setUnreadonly] = React.useState<boolean>(true);\n //const [autoRefresh, setAutoRefresh] = React.useState<boolean>(true);\n const [menuProps, setMenuProps] = React.useState<ItemMenuProps>();\n const [headerMenu, setHeaderMenu] = React.useState<MenuProps<HeaderOptions>>()\n const [settingsVisible, setSettingsVisible] = React.useState(false);\n //const [itemsToRender, setItemsToRender] = React.useState<IFeedItem[]>([]);\n // useEffect(() => {\n // setLastFeedId(LastId)\n // }, [LastId])\n\n // useEffect(() => {\n // console.log('run once');\n // trigger({ uid: profile.Uid, lastId: lastFeedId ? lastFeedId?.toString() : '' })\n // }, [])\n\n //console.log('lastFeedId', lastFeedId, LastId)\n\n //Update the feed items in reduc state\n useEffect(() => {\n console.log('ActivityFeed useEffect', feedResult)\n if (feedResult && feedResult.LastId > 0 && feedResult.LastId !== lastFeedId)\n setLastFeedId(feedResult.LastId);\n //dispatch(FeedSlice.SetFeedItems(feedResult));\n\n }, [feedResult, dispatch])\n\n const markAllRead = async () => {\n await postAllAsRead(profile.Uid);\n }\n\n const feedItemClicked = async (f: IFeedItem) => {\n if (!f.Is_Read) {\n //setAutoRefresh(false);\n await markAsRead({ id: f.Feed_Item_Id, uid: profile.Uid });\n }\n }\n\n const handleContextMenu = (e, f: IFeedItem) => {\n e.preventDefault();\n\n setMenuProps({ offset: { left: e.clientX, top: e.clientY }, visible: true, isread: f.Is_Read || (f.Use_Temp_Read && f.Is_Temp_Read), id: f.Feed_Item_Id });\n };\n\n const menuItemSelected = async (e: MenuSelectEvent) => {\n //Mark the item as read / unread\n e.item.text.indexOf('Unread') > -1\n ? await markAsUnRead({ id: menuProps.id, uid: profile.Uid })\n : await markAsRead({ id: menuProps.id, uid: profile.Uid })\n\n setMenuProps(oldProps => { return { ...oldProps, visible: false } })\n }\n //Close the menu\n const feedClicked = () => setMenuProps(oldProps => { return { ...oldProps, visible: false } })\n\n const HeaderOptions = [\n {\n id: \"settings\",\n title: `Settings`,\n element: <button className='icon settings k-font-icon k-i-gear' title='Settings'></button>,\n onclick: () => setSettingsVisible(true),\n visible: true\n },\n {\n id: \"read\",\n title: `Mark all as Read`,\n //image: './images/clear_button_grey.png',\n element: <button className='icon settings k-font-icon k-i-eye' title='Open in New Window'></button>,\n onclick: markAllRead,\n visible: true\n },\n {\n id: \"win\",\n title: `Open in New Window`,\n //image: 'images/ibutton_revelations_popout_black.png',\n element: <button className='icon settings k-font-icon k-i-hyperlink-open' title='Open in New Window'></button>,\n link: '/Feed',\n visible: !props.fullScreen\n }, {\n id: \"unread\",\n title: ``,\n onclick: () => {\n setUnreadonly((u) => {\n return !u\n });\n\n console.log('reset the feed Read state')\n //reset the feed Read state\n dispatch(\n FeedApi.util.updateQueryData(\"getUserFeed\", undefined, (draft) => {\n console.log('updateQueryData', draft.FeedItems?.length)\n draft.FeedItems.filter(f => f.Use_Temp_Read).map(f => {\n console.log('reset the feed Read state', f)\n f.Is_Read = f.Use_Temp_Read && f.Is_Temp_Read;\n f.Use_Temp_Read = false;\n f.Is_Temp_Read = false;\n });\n })\n );\n },\n element: <>Unread only <Switch defaultChecked={unreadOnly} /></>,\n visible: true\n },\n ] as HeaderOptions[]\n\n function rightBarMouseOut(e) {\n //console.log('Mouse out', e);\n\n props.itemSelected && props.itemSelected(e);\n }\n\n const headerRef = React.useRef<HTMLButtonElement>();\n\n const itemsToRender = feedResult?.FeedItems?.filter(f => !unreadOnly || !f.Is_Read);\n\n if (!feedResult?.FeedItems)\n return <></>\n\n return (\n <ErrorBoundary errorMessage='Error: Failed to load component.'>\n <section className='feed' onClick={feedClicked} onMouseLeave={props.onMouseLeave}>\n\n <header className='right-bar-header'>\n <img alt='feed' className='icon' src='./images/Activity-Feed-Dark.png' width='25' height='25' style={{ alignContent: 'center' }} />\n <span className='text'>Activity Feed</span>\n {/* <span className='s'>{UnReadCount}/{FeedItems.length}</span> */}\n {/* <button className='icon clear' onClick={markAllRead}><img src='./images/clear_button.png' style={{ alignContent: 'center' }} title='Mark all items as read' /></button>\n {!props.fullScreen && <a className='icon window' href='/Feed' target={'_blank'}><img src='./images/contacts-pop-out.png' style={{ alignContent: 'center' }} title='Open in new window' /></a>} */}\n <button ref={headerRef} className='icon k-font-icon k-i-more-horizontal' title='More options' onClick={(e) => {\n setHeaderMenu((m) => {\n //console.log('headerRef.current', headerRef.current);\n return { ...m, visible: !m?.visible, offset: { top: e.clientY + 30, left: e.clientX - 170 } }\n })\n }} />\n {!props.fullScreen && <button className='icon lock' onClick={props.unlocked} title='Unlock side-bar' ><img src='./images/Lock.png' alt='lock contacts' style={{ alignContent: 'center' }} /></button>}\n {!props.fullScreen && <button className='icon unlock' onClick={props.locked} title='Lock side-bar' ><img src='./images/Unlock.png' alt='unlock contacts' style={{ alignContent: 'center' }} /></button>}\n </header>\n {settingsVisible && <SettingsDialog onSaved={() => { setSettingsVisible(false) }} onClose={() => { setSettingsVisible(false) }} />}\n <HeaderMenu {...headerMenu} options={HeaderOptions.filter(o => o.visible)} itemClicked={() => setHeaderMenu(null)} />\n <Scrollbars autoHeight={false} autoHide={true}>\n {(isLoading) && <PartialSpinny />}\n <ul className='activityFeed'>\n {itemsToRender?.map((f) => {\n if (unreadOnly && f.Is_Read)\n return <></>\n\n var itemClass = f.Is_Read || (f.Use_Temp_Read && f.Is_Temp_Read) ? 'fi' : 'fi unReadFeedItem'\n return (\n <li className={itemClass} key={f.ID} onClick={() => feedItemClicked(f)} onContextMenu={(e) => handleContextMenu(e, f)}>\n <table className={`ft ${f.Call_State_CSS}`}>\n <tbody>\n {/* <tr style={{ verticalAlign: 'top' }}>\n <td></td>\n <td colSpan={2}><span className=\"feedName\"><span className=\"feedTL\">{f.Header}</span></span></td>\n <td className=\"tdFH\"></td>\n <td align=\"right\"><ReactTimeAgo date={new Date(f.Action_Date + 'Z')}></ReactTimeAgo>\n </td>\n </tr> */}\n <tr style={{ verticalAlign: 'top' }}>\n <td className=\"stateCell\"><div></div></td>\n {/* {f.ShowProfileIMages && <td className=\"profileCell\"><img className=\"feedImage\" src={trimChar(f.ImageUrl, '~')} style={{ borderWidth: '0' }} /></td>} */}\n {/* always show profile image */}\n <td className=\"profileCell\">\n <img className=\"feedImage\" src={trimChar(f.ImageUrl ? f.ImageUrl : './images/placeholder.png', '~')} style={{ borderWidth: '0' }} alt='profile' />\n {f.Activity_Image_Url && <img className=\"activity-image\" src={'.' + trimChar(f.Activity_Image_Url, '~')} title={f.Header} style={{ borderWidth: '0' }} alt='activity type' />}\n </td>\n <td colSpan={4}>\n <table style={{ borderCollapse: 'separate' }} >\n <tbody>\n <tr style={{ verticalAlign: 'top' }}>\n <td className='n'>{f.Action_Contact_Name}</td>\n <td align=\"right\" className='nw'>\n {/* timeStyle={{ labels: 'short', steps: null, round: 'round' }} */}\n <div><ReactTimeAgo date={new Date(f.Action_Date + 'Z')} ></ReactTimeAgo></div>\n <Link title={`Add ${profile?.Phrases.Action}`} className='action-link' to={`/ticket/${f.Call_Id}/action`} target={props.fullScreen ? '_blank' : '_self'}><Icon name='plus'></Icon></Link>\n <Link title='View details' to={`#`} target={props.fullScreen ? '_blank' : '_self'} onClick={() => {\n dispatch(RevelationSlice.updateIframeSrc(`/calls/callhistory.aspx?call_id=${f.Call_Id}`));\n props.itemSelected();\n }}>#{f.Call_Id}</Link>\n </td>\n </tr>\n <tr>\n <td colSpan={2}>\n {/* lines: {f.Text.indexOf('feedDesc1lines') > -1 ? 3 : f.Text.indexOf('feedDesc2lines') > -1 ? 4 : f.Text.indexOf('feedDesc3lines') > -1 ? 5 : 5} */}\n <HTMLEllipsis\n unsafeHTML={f.Text}\n maxLine={f.Text.indexOf('feedDesc1lines') > -1 ? 3 : f.Text.indexOf('feedDesc2lines') > -1 ? 4 : f.Text.indexOf('feedDesc3lines') > -1 ? 5 : 5}\n ellipsis='...'\n basedOn=''\n />\n </td>\n </tr>\n {f.From_String && f.To_String &&\n <>\n <tr style={{ verticalAlign: 'top' }}>\n <td colSpan={2}><span className=\"feedTL\">{f.Header}</span></td>\n </tr>\n <tr style={{ verticalAlign: 'top' }}>\n <td colSpan={2}><span dangerouslySetInnerHTML={{ __html: f.From_String }}></span> <span className='k-font-icon k-i-arrow-right'></span> <span dangerouslySetInnerHTML={{ __html: f.To_String }}></span></td>\n </tr>\n </>\n }\n\n\n </tbody></table>\n </td>\n\n </tr>\n <tr className=\"trAP\">\n <td></td>\n <td className=\"r\" colSpan={2}>\n </td>\n </tr>\n </tbody></table>\n\n </li>\n )\n })}\n {!feedResult?.FeedItems?.length\n ? <li className='no-fi'>{!feedResult?.FeedItems ? 'Loading...' : `No activity to display`}</li>\n : itemsToRender.length === 0 && <li className='no-read'><b>You don't have any unread activity</b>\n <p className='mt-5'>You can us this toggle (also in the menu options) to toggle between read and unread items.</p>\n <div className='mt-3'>Unread only <Switch defaultChecked={unreadOnly} onChange={() => setUnreadonly(u => !u)} /></div>\n </li>}\n </ul>\n </Scrollbars>\n {menuProps?.visible &&\n <Popup show={menuProps?.visible} offset={menuProps?.offset} className='feed-menu' collision={{ horizontal: 'fit', vertical: 'fit' }} >\n <Menu vertical={true} style={{ display: \"inline-block\" }} onSelect={menuItemSelected} openOnClick={false} hoverCloseDelay={100} >\n {menuProps?.isread\n ? <MenuItem text=\"Mark as Unread\" />\n : <MenuItem text=\"Mark as Read\" />\n }\n </Menu>\n </Popup>\n }\n </section>\n </ErrorBoundary>\n )\n}\n\nexport type ItemMenuProps = {\n id: number\n visible: boolean\n offset: Offset\n isread: boolean\n}\n\nexport type ToolProps = {\n feedResults?: IFeedResult\n fullScreen: boolean\n unlocked?: () => void\n locked?: () => void\n itemSelected?: (e?: any) => void\n onMouseLeave?: (e?: any) => void\n}","import { Loader } from '@progress/kendo-react-indicators'\nimport React, { useState } from 'react'\nimport { RevUserContext } from '../../context/UserContext'\nimport { FavoriteApi } from '../../redux/api/FavoriteApi'\nimport { IFavorite } from '../../types/Favorites/IFavorite'\nimport { IUserProfile } from '../../types/User/IUserProfile'\n\nexport const Fav = (props: FavProps) => {\n const profile = React.useContext<IUserProfile>(RevUserContext)\n const [postFavorite, { isLoading: saving }] = FavoriteApi.useSaveFavoriteMutation()\n const [deleteFavorite,] = FavoriteApi.useDeleteFavoriteMutation()\n const [favId] = useState(props.favId)\n const icon = favId ? './images/Fav_Color.png' : './images/Fav_Grey.png'\n\n const saveFavorite = async (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => {\n event.stopPropagation();\n event.preventDefault();\n if (favId) {\n await deleteFavorite({ favId: favId, uid: profile.Uid });\n } else {\n let newFav = {} as IFavorite\n newFav.Name = props.name\n newFav.Category_Id = 7\n newFav.Key_Value_1 = props.contactId.toString()\n await postFavorite({ fav: newFav, uid: profile.Uid });\n }\n }\n if (saving)\n return <Loader />\n if (!profile?.Features.Revelations)\n return <></>\n\n\n return (\n <button className='icon contact-fav' onClick={saveFavorite} title='Toggle favorite' > <img alt='Favorites icon' src={icon} style={{ alignContent: 'center' }} /></button >\n )\n}\n\nexport type FavProps = {\n favId: number,\n name: string,\n contactId: number,\n toggleFavorite?: () => void\n}","import React from 'react'\nimport { Offset, Popup } from '@progress/kendo-react-popup';\nimport { Menu, MenuItem, MenuSelectEvent } from '@progress/kendo-react-layout';\nimport { UserApi } from '../../../redux/api/UserApi';\nimport { ContactOptions } from './ContactOptions';\n\nexport const ContactsMenu = (props: MenuProps<ContactOptions>) => {\n const { data: contact } = UserApi.useGetUserByIdQuery(props?.contactId, { skip: !props?.contactId });\n const menuItemSelected = (e: MenuSelectEvent) => {\n //console.log('menuItemSelected', e)\n\n //Fire the click event for this option\n props.options.find(o => o.id === e.item.data)?.onclick(contact)\n\n props.itemClicked();\n }\n\n return (\n <Popup show={props?.visible}\n offset={props?.offset}\n anchorAlign={{ horizontal: 'right', vertical: 'bottom' }} className='contacts-menu' collision={{ horizontal: 'fit', vertical: 'fit' }} >\n <Menu vertical={true} style={{ display: \"inline-block\" }} onSelect={menuItemSelected} openOnClick={false} hoverCloseDelay={100} >\n {props.options.map(o => (\n <MenuItem render={() => {\n return <div><img src={o.image} className='tool-image' /> <span>{o.title}</span></div>\n }} icon={o.icon?.replace('k-i-', '')} text={o.title} data={o.id} />\n ))}\n </Menu>\n </Popup>\n\n )\n}\n\nexport type MenuProps<T> = {\n itemClicked: () => void\n contactId: number\n visible: boolean\n offset: Offset,\n options: T[]\n}\n","import { Avatar, Card, CardBody, CardFooter, CardHeader, CardSubtitle, CardTitle } from '@progress/kendo-react-layout'\nimport React from 'react'\nimport { RevUserContext } from '../../../context/UserContext'\nimport { UserApi } from '../../../redux/api/UserApi'\nimport { useReduxDispatch, useReduxSelector } from '../../../redux/hooks'\nimport { IUserProfile } from '../../../types/User/IUserProfile'\nimport { PartialSpinny } from '../../Nav/Spinny'\nimport { ContactOptions } from './ContactOptions'\n\n\nexport const ContactCard: React.FC<ContactCardProps> = (props) => {\n const dispatch = useReduxDispatch();\n const { currentIframeSrc } = useReduxSelector(state => state.revI)\n const profile = React.useContext<IUserProfile>(RevUserContext)\n const { data: contact, isFetching } = UserApi.useGetUserByIdQuery(props.id)\n const buttonClass = 'k-button k-button-md k-rounded-md k-button-flat k-button-flat-base contacts-tool-button';\n\n if (!contact || isFetching)\n return <PartialSpinny />\n\n const fieldsToRender = props.fieldsCSV.split(\",\").map(f => {\n const l = props.fieldLabels.find(fl => fl.split(',')[0].toLocaleLowerCase() === f.toLocaleLowerCase())?.split(',')\n let icon = l && l[0] === 'PrimaryEmail' && <div className='k-font-icon k-i-email mr-1'></div>\n icon = icon || (l && l[0] === 'Full_Address' && <div className='k-font-icon k-i-marker-pin mr-1'></div>)\n\n let text = contact[f]?.replaceAll('<br/>', '\\n').toString()\n let display = l[0] === 'PrimaryEmail'\n ? <a className='mail' href={`mailto:${text}`}>{text}</a>\n : text\n display = l[0] === 'Mobile' || l[0] === 'Bus_Phone'\n ? <a className='tel' href={`tel:${text}`}>{text}</a>\n : display\n\n return contact && contact[f] && (\n <div className='data'><label>{l && l[1]}:</label>{icon}{display}</div>\n )\n\n })\n\n return (\n <div className='contact-card'>\n <CardHeader\n className=\"k-hbox\"\n style={{\n background: \"transparent\",\n }}\n >\n {profile?.Features.Profile_Images &&\n <Avatar type=\"image\" size='large' >\n <img className='profile-image2'\n alt={`Profile image for ${contact.FullName}`}\n src={contact.Profile_Image_Path ? contact.Profile_Image_Path : './images/placeholder.png'}\n />\n </Avatar>}\n\n <div style={{ marginLeft: \"10px\", }} >\n <CardTitle>\n {contact.FullName}\n </CardTitle>\n <CardSubtitle>\n <p><div>{contact.Company_Name}</div>{contact.Address_Name}</p>\n </CardSubtitle>\n </div>\n </CardHeader>\n <CardBody className=\"contact-details\">\n {fieldsToRender}\n </CardBody>\n <CardFooter>\n {props.options.map(a => {\n const iconOrImage = a.icon\n ? <span className={`k-font-icon ${a.icon}`} />\n : <img alt={a.title} src={a.image} className={'k-i-plus'} />\n\n return (<button className={buttonClass} title={a.title} onClick={() => a.onclick(contact)}>\n {iconOrImage}\n </button>)\n })}\n </CardFooter>\n </div>\n )\n}\n\nexport type ContactCardProps = {\n id: number,\n fieldsCSV: string,\n fieldLabels: string[],\n options: ContactOptions[]\n}","import React, { useContext, useEffect, useState } from 'react'\nimport { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs';\nimport { PartialSpinny } from '../../Nav/Spinny';\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport ClientTypeList from '../../ClientType/ClientTypeList';\nimport { RevUserContext } from '../../../context/UserContext';\nimport { FavoriteApi } from '../../../redux/api/FavoriteApi';\nimport { IFavoriteConfig } from '../../../types/Favorites/IFavoriteConfig';\n\nexport const SettingsDialog = (props: FeedDialogProps) => {\n const profile = useContext(RevUserContext)\n const { data: apiConfig, isFetching } = FavoriteApi.useGetFavoriteConfigQuery(profile.Uid, { skip: !profile?.Features?.Revelations });\n const [settings, setSettings] = useState<IFavoriteConfig>({} as IFavoriteConfig)\n const [saveFavSettings, { isLoading: savingConfig }] = FavoriteApi.useSaveFavoriteConfigMutation();\n\n const saveClicked = async () => {\n //Save the feed config\n await saveFavSettings({ config: settings, uid: profile.Uid });\n\n props.onSaved();\n }\n\n //put the API data in state\n useEffect(() => {\n console.log('put the API data in state', apiConfig)\n if (apiConfig)\n setSettings(apiConfig);\n }, [apiConfig]);\n\n\n const clientTypeChanged = (e) => {\n console.log('client Type changed', e)\n setSettings((oldval) => {\n return { ...oldval, Client_Type_Ids: e.value.map(ct => ct.ID)?.join(',') }\n });\n }\n\n const emptyProps = {} as FieldRenderProps\n\n return (\n <Dialog title={\"Contacts settings\"} onClose={props.onClose} width={700} className={'feed-settings'}>\n {(!apiConfig || isFetching || !settings || savingConfig) &&\n <PartialSpinny />\n }\n <div className='flex flex-wrap m-3'>\n <div className='w-full flex flex-wrap'>\n <div className='w-1/6 flex flex-col-reverse pb-1'>\n <label>{profile?.Phrases.Client} Type/s</label>\n </div>\n <div className='w-4/6'>\n\n <ClientTypeList {...emptyProps} clientTypeIds={settings.Client_Type_Ids?.split(',').map(t => parseInt(t))} onChange={clientTypeChanged} />\n </div>\n </div>\n </div>\n <DialogActionsBar layout={'end'}>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-primary\" style={{ color: '#fff', background: profile?.Nav_Hex_Color }}\n onClick={saveClicked}>\n Save\n </button>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base\"\n onClick={props.onClose}>\n Cancel\n </button>\n </DialogActionsBar>\n\n </Dialog >\n )\n}\n\nexport type FeedDialogProps = {\n onClose: () => void\n onSaved: () => void\n}","import React from 'react'\nimport { SettingsDialog } from './SettingsDialog';\n\nexport const Settings: React.FC<SettingProps> = (props) => {\n\n return (\n <>\n {\n props.showPopup && <SettingsDialog onSaved={() => { props.popupToggled(false) }} onClose={() => { props.popupToggled(false) }} />\n }\n\n </>)\n}\n\nexport type SettingProps = {\n popupToggled: (visible) => void\n showPopup: boolean\n badgeCount: number\n}","import { PanelBar, PanelBarItem, PanelBarSelectEventArguments } from '@progress/kendo-react-layout'\nimport React, { useContext, useEffect, useMemo, useRef, useState } from 'react'\nimport { UserApi } from '../../../redux/api/UserApi'\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport './Contacts.scss'\nimport { InputClearValue, InputPrefix, TextBox } from '@progress/kendo-react-inputs';\nimport { Icon } from \"@progress/kendo-react-common\";\nimport { IContact, IContactSearchProps } from '../../../types/User/IContact';\nimport { Badge, BadgeContainer, Loader } from '@progress/kendo-react-indicators';\nimport { Fav } from '../../User/Fav';\nimport { ContactsMenu, MenuProps } from './ContactsMenu';\nimport { RevUserContext } from '../../../context/UserContext';\nimport { FavoriteApi } from '../../../redux/api/FavoriteApi';\nimport { ContactCard } from './ContactCard';\nimport { IUser } from '../../../types/User/IUser';\nimport { useReduxDispatch, useReduxSelector } from '../../../redux/hooks';\nimport * as RevelationSlice from '../../../slices/RevelationSlice';\nimport { useNavigate } from 'react-router-dom';\nimport { IUserProfile } from '../../../types/User/IUserProfile';\nimport { ToolProps } from '../ActivityFeed/ActivityFeed';\nimport { useDebounce } from 'use-debounce';\nimport { Setting } from '../../../types/Setting/Setting';\nimport { Settings } from './Settings';\nimport { ContactOptions } from './ContactOptions';\nimport { HeaderOptions } from '../HeaderOptions';\nimport { HeaderMenu } from './HeaderMenu';\n\nexport type ContactsProps = ToolProps & {\n selectedContact?: IContact\n}\n\nexport const Contacts = (props: ContactsProps) => {\n const navigate = useNavigate()\n const profile = useContext<IUserProfile>(RevUserContext)\n const dispatch = useReduxDispatch()\n const { currentIframeSrc } = useReduxSelector(state => state.revI)\n const [filter, setFilter] = useState<string>('')\n const [filterText, setFilterText] = useState<string>('')\n const debouncedSearchTerm = useDebounce(filterText, 500);\n const [page, gotoPage] = useState<string>('')\n const [menu, setMenu] = useState<MenuProps<ContactOptions>>()\n const [popupSettingsVisible, setPopupSettingsVisible] = useState(false);\n const [headerMenu, setHeaderMenu] = useState<MenuProps<HeaderOptions>>()\n const { data: config } = FavoriteApi.useGetFavoriteConfigQuery(profile.Uid, { skip: !profile?.Features?.Revelations });\n const [favOnly, setFavOnly] = useState<boolean>(profile?.Features.Revelations && config?.Contacts_Search_Favs_Only)\n const [saveFavConfig] = FavoriteApi.useSaveFavoriteConfigMutation();\n const { data: contacts, isFetching } = UserApi.useGetContactsQuery({ uid: profile.Uid, filter: filter, favsOnly: favOnly, pageLetter: page, groupByOffice: !config?.Contacts_Search_By_Name } as IContactSearchProps)\n const [expanded, setExpanded] = useState<string[]>() //all groups expanded by default\n const [contactSelected, setContactSelected] = useState<IContact>() //all groups expanded by default\n const { data: mimicSetting } = UserApi.useGetSettingQuery(Setting.Mimic);\n\n useEffect(() => {\n console.log('props.selectedContact', props.selectedContact)\n setFavOnly(false)\n setContactSelected(props.selectedContact)\n setFilterText(props.selectedContact?.FullName)\n setFilter(props.selectedContact?.FullName) //Will cause fetch\n }, [props.selectedContact])\n\n //Change favorites when mimicing an account\n useEffect(() => {\n setFavOnly(profile?.Features.Revelations && config?.Contacts_Search_Favs_Only)\n }, [profile, config])\n\n\n useEffect(() => {\n //console.log('debouncedSearchTerm', debouncedSearchTerm[0])\n setFilter(debouncedSearchTerm[0])\n }, [debouncedSearchTerm])\n\n const handleSelect = async (event: PanelBarSelectEventArguments) => {\n setExpanded(event.expandedItems);\n //event.target.props.id && setExpandedContactId(event.target.props.id)\n setMenu(null);\n }\n\n const toggleFavorites = () => {\n //let newFavs = !favOnly;\n setFavOnly(f => !f)\n saveFavConfig({ uid: profile.Uid, config: { ...config, Contacts_Search_Favs_Only: !config?.Contacts_Search_Favs_Only } });\n }\n\n const toggleByOffice = () => {\n saveFavConfig({ uid: profile.Uid, config: { ...config, Contacts_Search_By_Name: !config?.Contacts_Search_By_Name } });\n }\n\n const itemsToRender = useMemo(() => {\n //console.log('itemsToRender')\n const groups = [...new Set(contacts?.ReturnValue.map(g => g.Group_Value))]\n\n //console.log('setExpanded', groups, expanded, contacts?.ReturnValue.length)\n if (contactSelected) {\n let newExpanded = [...groups, contactSelected.ID.toString()];\n //console.log('setExpanded', newExpanded)\n setExpanded(newExpanded)\n setContactSelected(null)\n }\n else {\n setExpanded(groups)\n }\n\n return groups.map(g => {\n let _children = contacts?.ReturnValue.filter(c => c.Group_Value === g).map(c => {\n return {\n id: c.ID.toString(),\n title: c.FullName,\n favId: c.Fav_Id,\n contactId: c.ID,\n imageUrl: c.Profile_Image_Path,\n url: `/deeplink?url=/contacts/contactinfo.aspx?contact_id=${c.ID}`,\n }\n })\n return {\n id: g.toString(),\n title: `${g}`,\n //title: `${cid.toString()} ${favorites.find(f => f.Category_Id === cid).Category_Name} (${_children.length}) ${expanded.indexOf(cid.toString()) > -1}`,\n //imageUrl: favorites.find(f => f.Category_Id === cid).Category_Image_Url,\n children: _children\n }\n });\n }, [contacts]);\n\n const addNewContact = () => {\n dispatch(RevelationSlice.updateIframeSrc(`/contacts/contactinfo.aspx`))\n }\n\n const HeaderOptions = [\n {\n id: \"filter\",\n title: `Filter`,\n image: './images/Dock/Edit.png',\n onclick: () => {\n setPopupSettingsVisible(true);\n },\n element:\n <BadgeContainer>\n {config?.Client_Type_Ids?.split(',').length &&\n <Badge align={{ horizontal: 'start', vertical: 'top' }}>\n {config?.Client_Type_Ids?.split(',').length}\n </Badge>\n }\n <button className='icon settings k-font-icon k-i-filter' title='Filter Settings'></button>\n </BadgeContainer>,\n visible: true\n },\n {\n id: \"new\",\n title: `Add New ${profile?.Phrases.Contact}`,\n //image: './images/Add-Contact.png',\n element: <button className='icon settings k-font-icon k-i-add' title='Add new'></button>,\n onclick: addNewContact,\n visible: profile?.Features.Add_Edit_EndUSer_From_LogACall\n },\n {\n id: \"toggle\",\n title: `Group by Name or Address`,\n //image: config?.Contacts_Search_By_Name ? './images/contacts-by-person-icon-dark.png' : './images/contacts-by-company-icon.png',\n element: config?.Contacts_Search_By_Name\n ? <button className='icon settings k-font-icon k-i-group' title='Grouped by Name'></button>\n : <button className='icon settings k-font-icon k-i-ungroup' title='Grouped by Address'></button>,\n onclick: toggleByOffice,\n visible: true\n },\n {\n id: \"fav\",\n title: `Toggle favorites`,\n image: favOnly ? './images/Fav_Color.png' : './images/Fav_Grey.png',\n onclick: toggleFavorites,\n visible: profile?.Features.Revelations\n },\n {\n id: \"win\",\n title: `Open in New Window`,\n //image: 'images/ibutton_revelations_popout_black.png',\n element: <button className='icon settings k-font-icon k-i-hyperlink-open' title='Open in New Window'></button>,\n link: '/Contacts',\n visible: !props.fullScreen\n }\n ] as HeaderOptions[]\n\n const ContactOptions = [\n {\n id: \"edit\",\n title: `Edit ${profile.Phrases.Contact}`,\n image: './images/Dock/Edit.png',\n onclick: (user: IUser) => {\n dispatch(RevelationSlice.updateIframeSrc(`/contacts/contactinfo.aspx?contact_Id=${user.ID}`))\n props.itemSelected();\n },\n visible: true\n },\n {\n id: \"log\",\n title: `New ${profile?.Phrases.CallPhrase}`,\n //icon: 'k-i-plus-outline',\n image: './images/Dock/New-Ticket.png',\n //link: `/ticket/details?endUserId=${contact?.UId}`,\n onclick: (user: IUser) => {\n navigate(`/ticket/details?endUserId=${user?.UId}`)\n props.itemSelected();\n },\n visible: true\n },\n {\n id: \"find\",\n title: `Find open ${profile?.Phrases.CallPhrase}s`,\n //icon: 'k-i-search',\n image: './images/Dock/Find-Open-Ticket.png',\n onclick: (user: IUser) => {\n dispatch(RevelationSlice.updateIframeSrc(`/Search/Default.aspx?RunSearch=True&SearchTypes=1&Filters=End_User=${user.ID}~!~Ticket_Status_Type=1;2;4`))\n props.itemSelected();\n },\n visible: true\n },\n {\n id: \"add_asset\",\n title: `Add ${profile?.Phrases.Asset}s`,\n //icon: 'k-i-plus',\n image: './images/Dock/Add-Assets.png',\n onclick: (user: IUser) => {\n navigate('/asset');\n props.itemSelected();\n },\n visible: profile.Features.Add_Asset\n },\n {\n id: \"find_asset\",\n title: `Find ${profile?.Phrases.Asset}s`,\n //icon: 'k-i-search',\n image: './images/Dock/Find-Assets.png',\n onclick: (user: IUser) => {\n dispatch(RevelationSlice.updateIframeSrc(`/Search/Default.aspx?RunSearch=True&SearchTypes=7&Filters=End_User=${user.ID}`))\n props.itemSelected();\n },\n visible: profile.Features.View_Assets\n },\n {\n id: \"mimic\",\n title: `Mimic user account`,\n //icon: 'k-i-eye',\n image: './images/Dock/Mimic-User-Account.png',\n onclick: (user: IUser) => {\n dispatch(RevelationSlice.mimicUser(user?.UId))\n\n navigate('/')\n\n props.itemSelected();\n },\n visible: profile.Features.Super_Admin && mimicSetting?.Bool_Value\n }\n ] as ContactOptions[]\n\n\n const headerRef = useRef<HTMLButtonElement>();\n return (\n <section className='contacts' onMouseLeave={props.onMouseLeave}>\n <header className='right-bar-header' >\n <img alt='contacts' className='icon' src='./images/Contacts-Dark.png' width='25' height='25' style={{ alignContent: 'center' }} /><span className='text'>Contacts</span>\n {/* {profile?.Features.Add_Edit_EndUSer_From_LogACall && <button className='icon add' onClick={addNewContact} title='Add new Contact' ><img alt='Add new contact' src='./images/Add-Contact.png' style={{ alignContent: 'center' }} /></button>}\n <button className='icon contact-group' onClick={toggleByOffice} title='Group by name or address' ><img alt='Group by name or address' src={config?.Contacts_Search_By_Name ? './images/contacts-by-person-icon.png' : './images/contacts-by-company-icon.png'} style={{ alignContent: 'center' }} /></button>\n {profile?.Features.Revelations && <button className='icon contact-fav' onClick={toggleFavorites} title='Toggle favorites' ><img alt='toggle contact favorites' src={favOnly ? './images/Fav_Color.png' : './images/Fav_White.png'} style={{ alignContent: 'center' }} /></button>}\n {!props.fullScreen && <a className='icon window' href='/Contacts' target={'_blank'}><img alt='pop out contacts bar' src='./images/contacts-pop-out.png' style={{ alignContent: 'center' }} title='Open in new window' /></a>} */}\n <button ref={headerRef} className='icon k-font-icon k-i-more-horizontal' title='More options' onClick={(e) => {\n console.log('top', headerRef.current.offsetTop, 'left', headerRef.current.offsetLeft);\n\n setHeaderMenu((m) => { return { ...m, visible: !m?.visible, offset: { top: e.clientY + 30, left: e.clientX - 170 } } })\n }} />\n {!props.fullScreen && <button className='icon lock' onClick={props.unlocked} title='Unlock side-bar' ><img alt='lock contacts bar' src='./images/Lock.png' style={{ alignContent: 'center' }} /></button>}\n {!props.fullScreen && <button className='icon unlock' onClick={props.locked} title='Lock side-bar' ><img alt='unlock contacts bar' src='./images/Unlock.png' style={{ alignContent: 'center' }} /></button>}\n </header>\n <Settings popupToggled={(v) => setPopupSettingsVisible(v)} showPopup={popupSettingsVisible} badgeCount={config?.Client_Type_Ids?.split(',').length} />\n <HeaderMenu {...headerMenu} options={HeaderOptions.filter(o => o.visible)} itemClicked={() => setHeaderMenu(null)} />\n <ContactsMenu {...menu} options={ContactOptions.filter(o => o.visible)} itemClicked={() => setMenu(null)} />\n <div className='contact-search-wrapper'>\n <TextBox className='contact-search'\n value={filterText}\n onChange={(e) => {\n console.log('onChange')\n //setSomething(true);\n setFilterText(e.value.toString())\n gotoPage(null);\n }}\n placeholder=\"Search...\"\n prefix={() => (\n <InputPrefix>\n <Icon name=\"search\" />\n </InputPrefix>)\n }\n suffix={() => (\n <>\n {filterText && (\n <InputClearValue onClick={() => {\n setFilterText('')\n setFilter('')\n }}>\n <Icon name=\"x\" />\n </InputClearValue>\n )}\n {isFetching && <Loader type='pulsing' themeColor='secondary' />}\n </>\n )}\n />\n </div>\n <p className='pager'>\n {\n contacts?.Pages?.map(p => {\n return <button className={itemsToRender.find(i => i.title === p.Letter) ? 'selected' : ''} disabled={p.RecordCount === 0} key={p.Letter} title={`${p.RecordCount} items`} onClick={(e) => { gotoPage(p.Letter); }}>{p.Letter}</button>\n })}\n </p>\n {contacts && itemsToRender.length === 0 && <div className='no-found'>No contacts found </div>}\n <Scrollbars autoHeight={false}>\n <PanelBar\n animation={false}\n isControlled={true}\n className='contact-list'\n expanded={expanded}\n onSelect={handleSelect}\n >\n {itemsToRender.map(c => {\n // Header\n return <PanelBarItem key={c.id.toString()} id={c.id.toString()} title={`${c.title}`} className=\"category-item\">\n {c.children.map(i => {\n // Contacts\n return <PanelBarItem title={\n <>\n <Fav name={i.title} favId={i.favId} contactId={i.contactId} />\n <button title='Click for more options' className='contact-name' onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n setMenu((menu) => { return { visible: !menu?.visible, offset: { top: e.clientY, left: e.clientX }, contactId: i.contactId } as MenuProps<ContactOptions> })\n\n }}>{i.title}</button>\n </>\n } id={i.id.toString()} key={`c-${i.id.toString()}-${i.favId}`} >\n <ContactCard options={ContactOptions.filter(o => o.visible)} id={parseInt(i.id)} fieldsCSV={contacts.ContactsDockFields} fieldLabels={contacts.FieldLabels} />\n </PanelBarItem>\n })}\n </PanelBarItem>\n })}\n </PanelBar>\n </Scrollbars>\n </section >\n )\n}\n\n\n\n","import { Badge, BadgeContainer } from '@progress/kendo-react-indicators'\nimport { nanoid } from 'nanoid'\nimport React from 'react'\nexport const ToolButton = (props: ToolButtonProps) => {\n return (\n <div key={nanoid()}>\n {props.badge\n ?\n <div key={nanoid()} title={props.title}>\n <BadgeContainer >\n <button title={props.title} className={`tool-button ${props.class} ${props.selected ? '' : 'tool-button-disabled'}`} onClick={() => props.onClick(props.id)}><img src={props.imageUrl}></img></button>\n\n <Badge rounded='medium' className='mr-3 mt-3' size='small' align={{ horizontal: \"end\", vertical: \"top\" }}>{props.badge}</Badge>\n </BadgeContainer>\n </div>\n :\n <button key={nanoid()} title={props.title} className={`tool-button ${props.class} ${props.selected ? '' : 'tool-button-disabled'}`} onClick={() => props.onClick(props.id)}><img src={props.imageUrl}></img></button>\n\n }\n\n\n </div>\n )\n}\n\nexport type ToolButtonProps = {\n id: string\n imageUrl: string\n onClick: (id) => void\n class?: string\n title: string\n selected: boolean\n badge?: string | JSX.Element\n} ","import React, { Suspense, useRef, } from 'react'\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport './Chat.scss'\nimport { ErrorBoundary } from '../../Common/ErrorBoundry';\nimport { MenuProps } from '../Contacts/ContactsMenu';\nimport { HeaderOptions } from '../HeaderOptions';\n\n//@ts-expect-error\nconst ChatList = React.lazy(() => import(\"chat/ChatList\"));\n\n//const ChatCount = React.lazy(() => import(\"chat/ChatCount\"));\n\n//const PinnedChatModule = React.lazy(() => import(\"chat/PinnedChats\"));\n//@ts-expect-error\nconst ChatMenuModule = React.lazy(() => import(\"chat/ChatVisibilityMenu\"));\n\n\nexport const ChatBar = (props) => {\n const ChatHeaderOptions = [\n {\n id: \"settings\",\n title: `Settings`,\n element: <button className='icon settings k-font-icon k-i-gear' title='Settings'></button>,\n onclick: () => { },\n visible: true\n },\n {\n id: \"win\",\n title: `Fullscreen`,\n element: <button className='icon settings k-font-icon k-i-hyperlink-open' title='Open in New Window'></button>,\n link: '/Chat',\n visible: true\n }] as HeaderOptions[]\n\n return (\n <section className='chat' onMouseLeave={props.onMouseLeave} >\n <ErrorBoundary errorMessage={<div className='m-5'><span className='k-font-icon k-i-close-circle' />Error: Failed to connect to chat service.</div>}>\n <Scrollbars autoHeight={false}>\n <Suspense fallback={'Loading...'}>\n <header className='right-bar-header' >\n <img alt='chat' className='icon' src='./images/Chat.png' width='25' height='25' style={{ alignContent: 'center' }} />\n <span className='text'>Chat</span>\n {/* <button ref={headerRef} className='icon k-font-icon k-i-more-horizontal' title='More options' onClick={(e) => {\n setHeaderMenu((m) => { return { ...m, visible: !m?.visible, offset: { top: headerRef.current.offsetTop + 40, left: headerRef.current.offsetLeft - 150 } } })\n }} /> */}\n <ChatMenuModule />\n {!props.fullScreen && <button className='icon lock' onClick={props.unlocked} title='Unlock side-bar' ><img alt='lock contacts bar' src='./images/contacts-lock.png' style={{ alignContent: 'center' }} /></button>}\n {!props.fullScreen && <button className='icon unlock' onClick={props.locked} title='Lock side-bar' ><img alt='unlock contacts bar' src='./images/contacts-unlock.png' style={{ alignContent: 'center' }} /></button>}\n </header>\n {/* <HeaderMenu {...headerMenu} options={ChatHeaderOptions.filter(o => o.visible)} itemClicked={() => setHeaderMenu(null)} /> */}\n\n\n <ChatList showHeader={false} pinChatOnClick={true} />\n </Suspense>\n </Scrollbars>\n </ErrorBoundary>\n </section >\n )\n}\n","import React, { useContext } from \"react\";\nimport { Suspense } from \"react\";\nimport { store } from \"../../redux/store\";\nimport { useParams } from \"react-router-dom\";\nimport './Chat.scss'\nimport { ErrorBoundary } from \"../Common/ErrorBoundry\";\nimport { IUserProfile } from \"../../types/User/IUserProfile\";\nimport { RevUserContext } from \"../../context/UserContext\";\n\n//@ts-expect-error\nconst ChatRequestModule = React.lazy(() => import(\"chat/ChatRequest\"));\n\nexport default function ChatRequest() {\n const profile = useContext<IUserProfile>(RevUserContext)\n //Chat request is for external people only\n if (!profile?.Features?.SSIChat)\n return <></>\n\n return (\n <ErrorBoundary>\n <div className=\"chat-request\">\n <Suspense fallback={'Loading...'}>\n <ChatRequestModule />\n </Suspense>\n </div>\n </ErrorBoundary>\n )\n}\n","import { nanoid } from \"nanoid\";\nimport React, { ReactNode, Suspense, useContext, useEffect, useMemo } from \"react\";\nimport { RevUserContext } from \"../../context/UserContext\";\nimport { FavoriteApi } from \"../../redux/api/FavoriteApi\";\nimport { FeedApi } from \"../../redux/api/FeedApi\";\nimport { useReduxDispatch, useReduxSelector } from \"../../redux/hooks\";\nimport { IUserProfile } from \"../../types/User/IUserProfile\";\nimport { ActivityFeed, ToolProps } from \"./ActivityFeed/ActivityFeed\";\nimport { Contacts } from \"./Contacts/Contacts\";\nimport { Revelations } from \"./Revelations/Revelations\";\nimport \"./RightBar.scss\";\nimport { ToolButton } from \"./ToolButton\";\nimport XMLParser from \"react-xml-parser\";\nimport { IContact } from \"../../types/User/IContact\";\nimport { updateToggleState } from \"../../slices/RightBarSlice\";\nimport { ChatBar } from \"./Chat/ChatBar\";\nimport ChatRequest from \"../Chat/ChatRequest\";\nimport { ErrorBoundary } from \"../Common/ErrorBoundry\";\n\n//@ts-expect-error\nconst ChatCount = React.lazy(() => import(\"chat/ChatCount\"));\n//@ts-expect-error\nconst PinnedChatModule = React.lazy(() => import(\"chat/PinnedChats\"));\n//@ts-expect-error\nconst ChatNotificationModule = React.lazy(() => import(\"chat/ChatNotification\"));\n\nexport enum ToggleState {\n Uninitialized = 0,\n Collapsed = 1,\n Expanded = 2,\n Free = 3,\n}\n\nexport const RightBar = ({ children }: { children: ReactNode }) => {\n const profile = useContext<IUserProfile>(RevUserContext);\n const locked = useReduxSelector((state) => state.rightBar.toggleState);\n //const { FeedItems, LastId } = useReduxSelector(rev => rev.feed.feedItems)\n const [lastId, setLastId] = React.useState<number>();\n //const [isLocked, setIsLocked] = React.useState<number>(locked);\n const dispatch = useReduxDispatch();\n const [selectedId, setSelectedId] = React.useState<string>();\n const [dockOrder, setDockOrder] = React.useState<string[]>();\n const { data: feedResult } = FeedApi.useGetUserFeedQuery({ uid: profile.Uid, lastId: lastId ? lastId.toString() : '' }, {\n pollingInterval: 20000,\n skip: !profile?.Features.Activity_Feed,\n });\n const { data: config } = FavoriteApi.useGetFavoriteConfigQuery(profile.Uid, { skip: profile?.Features.External_Interface });\n const [saveFavConfig] = FavoriteApi.useSaveFavoriteConfigMutation();\n const [selectedContact, setSelectedContact] = React.useState<IContact>();\n\n //const halfNavcolor = pSBC(0.5, profile?.Nav_Hex_Color) || '#dddddd';\n\n //Update the feed items in reduc state\n useEffect(() => {\n //console.log('RightBar.tsx', feedResult)\n //if (feedResult tId)\n //dispatch(FeedSlice.SetFeedItems(feedResult));\n if (feedResult && feedResult.LastId > 0 && feedResult.LastId !== lastId)\n setLastId(feedResult?.LastId)\n }, [feedResult, dispatch]);\n\n useEffect(() => {\n if (\n config &&\n (locked === ToggleState.Uninitialized ||\n config?.Contact_Id !== profile.Id)\n ) {\n let foundINdex = config.Page_State_Xml.indexOf(\n '<item key=\"0\" value=\"True\" />'\n );\n //console.log('foundINdex', foundINdex, config)\n dispatch(\n updateToggleState(\n foundINdex > -1 ? ToggleState.Expanded : ToggleState.Collapsed\n )\n );\n var dockOrder = new XMLParser().parseFromString(config.Dock_Order);\n var dockArr = dockOrder?.children?.map((c) => c?.attributes[\"value\"])\n setDockOrder(dockArr);\n console.log('setDockOrder', dockArr)\n }\n }, [config, locked, profile.Uid, dispatch]);\n\n ///Listen for contact name click from CallHistory.aspx page in the IFrame\n useEffect(() => {\n //Add event listener for Events that get posted as messages in the IFrame so we can trigger things like updating the banner\n const messageListener = (e) => {\n try {\n if (e.data?.indexOf && e.data?.indexOf(\"{\") === 0) {\n var messageObj = JSON.parse(e.data);\n //console.log('messageObj', messageObj)\n if (\"message\" in messageObj && messageObj.message === \"ShowContact\") {\n if (\n \"contactId\" in messageObj &&\n messageObj.contactId &&\n !isNaN(messageObj.contactId)\n ) {\n console.log(\"setting expanded\", locked);\n //Expand contacts\n setSelectedId(\"contacts\");\n\n setSelectedContact({\n ID: messageObj.contactId,\n FullName: messageObj.contactName,\n } as IContact);\n if (locked === ToggleState.Collapsed) {\n dispatch(updateToggleState(ToggleState.Free));\n }\n //setFavOnly(false);\n //setContactIdSelected(messageObj.contactId)\n //setFilter(messageObj.contactName)\n }\n }\n }\n } finally {\n }\n };\n\n var ev = window.addEventListener(\"message\", messageListener, false);\n return () => {\n window.removeEventListener(\"message\", messageListener);\n };\n }, [locked, dispatch]);\n\n const buttonClicked = async (id) => {\n if (locked === ToggleState.Collapsed) {\n // let newConfig = { ...config, Page_State_Xml: '<DictionaryOfStringBoolean><item key=\"0\" value=\"True\" /></DictionaryOfStringBoolean>' }\n // await saveFavConfig(newConfig);\n\n dispatch(updateToggleState(ToggleState.Free));\n } else if (locked === ToggleState.Free && selectedId === id)\n dispatch(updateToggleState(ToggleState.Collapsed));\n\n if (selectedId !== id) {\n //let newOrder = tools.map(t => t.id);\n //console.log('dockOrder', dockOrder)\n let newOrder = tools.map(t => t.id)\n newOrder.splice(newOrder.indexOf(id), 1);\n newOrder.unshift(id);\n console.log('newOrder', newOrder)\n //Update the order via the API\n let newOrderXML = `<DictionaryOfInt32String><item key=\"0\" value=\"${newOrder[0]}\" /><item key=\"1\" value=\"${newOrder[1]}\" /><item key=\"2\" value=\"${newOrder[2]}\" /><item key=\"3\" value=\"${newOrder[3]}\" /></DictionaryOfInt32String>`;\n\n setSelectedId(id);\n let newConfig = { ...config, Dock_Order: newOrderXML };\n await saveFavConfig({ config: newConfig, uid: profile.Uid });\n }\n };\n\n const unlockTools = async () => {\n console.log(\"unlockTools\", config);\n\n dispatch(updateToggleState(ToggleState.Collapsed));\n //setIsLocked(ToggleState.Collapsed);\n\n let newConfig = {\n ...config,\n Page_State_Xml:\n '<DictionaryOfStringBoolean><item key=\"0\" value=\"False\" /></DictionaryOfStringBoolean>',\n };\n await saveFavConfig({ config: newConfig, uid: profile.Uid });\n };\n let lockingTools = false;\n const lockTools = async () => {\n lockingTools = true;\n console.log(\"lockTools\", config);\n dispatch(updateToggleState(ToggleState.Expanded));\n //setIsLocked(ToggleState.Expanded);\n\n let newConfig = {\n ...config,\n Page_State_Xml:\n '<DictionaryOfStringBoolean><item key=\"0\" value=\"True\" /></DictionaryOfStringBoolean>',\n };\n await saveFavConfig({ config: newConfig, uid: profile.Uid });\n };\n\n useEffect(() => {\n console.log('useEffect locked', locked)\n //setIsLocked(locked)\n }, [locked])\n\n const handleMouseLeave = (e) => {\n //e.stopPropagation();\n //e.preventDefault();\n console.log('handleMouseLeave locked=', locked, lockingTools)\n if (locked === ToggleState.Free && !lockingTools) {\n dispatch(updateToggleState(ToggleState.Collapsed));\n //setIsLocked(ToggleState.Collapsed)\n }\n };\n\n const handleClick = (e) => {\n e && e.stopPropagation();\n e && e.preventDefault();\n console.log('handleClick locked=', locked)\n if (locked === ToggleState.Free) {\n dispatch(updateToggleState(ToggleState.Collapsed));\n //setIsLocked(ToggleState.Collapsed)\n }\n };\n\n const toolProps: ToolProps = {\n fullScreen: false,\n unlocked: unlockTools,\n locked: lockTools,\n itemSelected: handleClick,\n onMouseLeave: handleMouseLeave\n };\n const tools = useMemo(\n () =>\n [\n {\n id: \"chat\",\n imageUrl: \"./images/Chat.png\",\n class: \"chat-button\",\n element: <ChatBar {...toolProps} itemSelected={handleClick} />,\n title: \"Chat\",\n badge:\n <ErrorBoundary errorMessage=\"?\">\n <ChatCount />\n </ErrorBoundary>,\n visible: profile?.Features.Chat,\n order: dockOrder?.indexOf(\"chat\"),\n },\n {\n id: \"activity\",\n imageUrl: \"./images/Activity-Feed-Dark.png\",\n class: \"feed-button\",\n element: <ActivityFeed {...toolProps} feedResults={feedResult} />,\n title: \"Activity feed\",\n badge:\n feedResult?.UnReadCount > 0\n ? feedResult?.UnReadCount.toString()\n : null,\n visible: profile?.Features.Activity_Feed,\n order: dockOrder?.indexOf(\"activity\"),\n },\n {\n id: \"contacts\",\n imageUrl: \"./images/Contacts-Dark.png\",\n class: \"contacts-button\",\n element: (\n <Contacts\n {...toolProps}\n selectedContact={selectedContact}\n />\n ),\n title: \"Contacts\",\n badge: null,\n visible: profile?.Features.Contacts_Dock,\n order: dockOrder?.indexOf(\"contacts\"),\n },\n {\n id: \"favorites\",\n imageUrl: \"./images/Revelations-Dark.png\",\n class: \"revelations-button\",\n element: <Revelations {...toolProps} />,\n title: \"Revelations\",\n badge: null,\n visible: profile?.Features.Revelations,\n order: dockOrder?.indexOf(\"favorites\"),\n },\n ].sort((x, y) => x.order - y.order),\n [feedResult, profile, dockOrder, config, selectedContact, dispatch]\n );\n\n //console.log('tools', tools);\n\n const toolsClass = `right-bar ${tools.filter((t) => t.visible).length === 1 ? \"one-tool\" : \"\"\n }`;\n\n //SSI\n if (profile?.Features.External_Interface)\n return (\n <section\n className={toolsClass}\n style={{ backgroundColor: profile.Body_Hex_Color }}\n >\n <main>{children}</main>\n <Suspense fallback={<></>}>\n <ChatRequest />\n </Suspense>\n </section>)\n\n //Support staff\n return (\n <section\n className={toolsClass}\n // style={{ backgroundColor: halfNavcolor }}\n >\n {tools.find((t) => t.visible) && (\n <div\n className={\n locked === ToggleState.Expanded\n ? \"tools\"\n : locked === ToggleState.Free\n ? \"tools-free\"\n : \"tools-hidden\"\n }\n >\n <div\n className=\"menu\"\n // style={{ backgroundColor: profile.Body_Hex_Color }}\n >\n {tools\n .filter((t) => t.visible)\n .map((t, i) => {\n return (\n <ToolButton\n {...t}\n onClick={buttonClicked}\n selected={selectedId === t.id || (!selectedId && i === 0)}\n key={nanoid()}\n />\n );\n })}\n </div>\n <ErrorBoundary>\n <Suspense fallback={''}>\n <ChatNotificationModule pinChatOnClick={true} />\n <PinnedChatModule />\n </Suspense>\n </ErrorBoundary>\n {locked !== ToggleState.Collapsed &&\n tools.find((t) => t.visible && (!selectedId || selectedId === t.id))\n .element}\n </div>\n )}\n <main>{children}</main>\n </section>\n );\n};\n\n","import React, { useContext, useEffect } from 'react'\nimport { IUserProfile } from '../../types/User/IUserProfile';\nimport { RevUserContext } from '../../context/UserContext';\nimport { trimChar } from '../../utils/utils';\nimport { nanoid } from 'nanoid';\nimport { useGetTenantQuery } from '../../redux/api/BaseApi';\n\nconst SessionKeepAlive = () => {\n const [random, setRandom] = React.useState<string>()\n const profile = useContext<IUserProfile>(RevUserContext);\n const { data: tenant } = useGetTenantQuery();\n const pingUrl = trimChar(tenant?.Tenant_Url, '/') + \"/account/sessionkeepalive?r=\" + random;\n\n useEffect(() => {\n //console.log('SessionKeepAlive setup ping', pingUrl)\n var ping = window.setInterval(() => {\n //console.log('ping', pingUrl)\n setRandom(nanoid())\n }, 60000)\n\n return () => {\n ping && window.clearInterval(ping);\n }\n }, [])\n\n return !profile || !random || !tenant\n ? <></>\n : (\n <iframe title='SessionKeepAlive' name='SessionKeepAlive' src={pingUrl} width={'0px'} height={'0px'} className='display-none hidden'></iframe>\n )\n}\n\nexport default SessionKeepAlive","import React, { useEffect, useMemo, useState } from \"react\";\nimport { Outlet, useNavigate } from \"react-router-dom\";\nimport { useGetTenantQuery, useGetUserProfileQuery } from \"../../redux/api/BaseApi\";\nimport { useReduxDispatch, useReduxSelector } from \"../../redux/hooks\";\nimport { REVELATION_IFRAME } from \"../../Variables/StaticVariables\";\nimport { updateIframeSrc, setIframeLoaded, mimicUser, setFirstIframeRequest } from \"../../slices/RevelationSlice\";\nimport { RightBar } from \"../RightBar/RightBar\";\nimport { FavoriteApi } from \"../../redux/api/FavoriteApi\";\nimport { PartialSpinny, Spinny } from \"../Nav/Spinny\";\nimport { UserApi } from \"../../redux/api/UserApi\";\nimport { trimChar } from \"../../utils/utils\";\nimport { createUserManager } from \"redux-oidc\";\nimport { oAuthSettings } from \"../Auth/AuthSettings\";\nimport SessionKeepAlive from \"./SessionKeepAlive\";\n\n//const ChatRequestModule = React.lazy(() => import(\"chat/ChatRequest\"));\n\nconst RevelationIframe = () => {\n\n const navigate = useNavigate();\n const dispatch = useReduxDispatch()\n const mimicUid = useReduxSelector((state) => state.revI.mimicUid)\n const { data, error } = useGetUserProfileQuery(mimicUid)\n const { data: tenant } = useGetTenantQuery()\n const [invalidateProfile] = UserApi.useInvalidateProfileMutation()\n //const [iframeLoaded, setIFrameLoaded] = useState(false)\n\n // Redux Selectors\n const revI = useReduxSelector((state) => state.revI);\n const user = useReduxSelector((state) => state.auth.user);\n const iframeRef = React.useRef<HTMLIFrameElement>()\n //Only update the IFrame landing page if the mimic user id changes, NOT when the access token is updated by a silent renew.\n const hasAccessToken = !user?.access_token;\n const homeLandingPage = useMemo(() => {\n //console.log('hasAccessToken', hasAccessToken)\n return `/OAuth/SignInWithJwt?redirectToHomepage=true&jwt=${user?.access_token}&n=${revI.uniqueId}&mimicUid=${mimicUid}${revI.currentIframeSrc ? `&redirectUrl=${encodeURIComponent(revI.currentIframeSrc)}` : ''}`\n }, [revI.uniqueId, mimicUid, hasAccessToken, revI.currentIframeSrc]);\n\n const isFirstIframeRequest = useMemo(() => revI.isFirstIframeRequest, [revI.currentIframeSrc]);\n\n // Constants\n const iframeClass = \"grow\";\n useEffect(() => {\n\n //Add event listener for Events that get posted as messages in the IFrame so we can trigger things like updating the banner\n\n const messageListener = (e) => {\n //console.log('Message Recieved', e.data);\n try {\n if (e.data?.indexOf && e.data?.indexOf('{') === 0) {\n console.log('JSON Message Recieved', e.data);\n var messageObj = JSON.parse(e.data);\n if ('message' in messageObj && messageObj.message === 'mimic') {\n dispatch(mimicUser(messageObj.uid))\n //Go to homepage\n dispatch(updateIframeSrc(null));\n } else if ('message' in messageObj && messageObj.message === 'log_a_ticket') {\n navigate(`/ticket/details?parentCallId=${messageObj?.parentCallId || \"\"}&splitActionIds=${messageObj?.splitActionIds || \"\"}&splitTicketId=${messageObj?.splitTicketId || \"\"}`)\n }\n }\n } catch (err) {\n console.error('ouch in window.addEventListener', err);\n }\n\n if (e.data === \"RefreshNav\") {\n //Re-freth the user's profile \n console.log('RefreshNa - v Re-freth the users profile');\n invalidateProfile();\n };\n\n //The webforms app will post this message when the user's session has expired\n if (e.data === 'SessionExpired') {\n console.log('SessionExpired')\n let userManager = createUserManager(oAuthSettings)\n userManager.signoutRedirect({\n extraQueryParams: { logoutMessage: 'Session has expired.' },\n });\n }\n\n if (e.data === 'RefreshFav') {\n //reload favorites (not cached)\n console.log('invalidateFavorites');\n dispatch(FavoriteApi.util.invalidateTags(['GetUserFavs']))\n }\n };\n\n var ev = window.addEventListener(\"message\", messageListener, false)\n return () => { window.removeEventListener(\"message\", messageListener) }\n }, []);\n if (!user?.access_token || !data || !tenant) return (<></>);\n //console.log(encodeURIComponent(revI.currentIframeSrc));\n // Error Handling\n\n const iFrameLoaded = (e) => {\n //console.log('iFrameLoaded', e)\n dispatch(setIframeLoaded(true));\n dispatch(setFirstIframeRequest(false));\n //setIFrameLoaded(true);\n }\n\n\n if (error) {\n return <div>iframe failed to load because of a query error</div>;\n }\n\n\n if (isFirstIframeRequest || revI.currentIframeSrc === null || revI.currentIframeSrc?.length === 0) {\n return (\n <>\n <RightBar>\n {revI.iFrameLoading && <Spinny />}\n <iframe ref={iframeRef}\n onLoad={iFrameLoaded}\n className={iframeClass}\n name={REVELATION_IFRAME}\n title={REVELATION_IFRAME}\n src={`${tenant?.Tenant_Url}${homeLandingPage}`}\n />\n <Outlet />\n </RightBar>\n <SessionKeepAlive />\n </>\n );\n }\n\n var src = (revI.currentIframeSrc?.toLowerCase().startsWith('http://') || revI.currentIframeSrc?.toLowerCase().startsWith('https://'))\n ? revI.currentIframeSrc\n : `${trimChar(tenant?.Tenant_Url, '/')}${revI.currentIframeSrc}`;\n\n\n return (\n <>\n <RightBar>\n {revI.iFrameLoading && <PartialSpinny z={98} />}\n <iframe ref={iframeRef}\n className={iframeClass}\n name={REVELATION_IFRAME}\n title={REVELATION_IFRAME}\n onLoad={iFrameLoaded}\n src={src}\n />\n <Outlet />\n </RightBar>\n <SessionKeepAlive />\n </>\n );\n};\nexport default RevelationIframe;\n","import { useEffect } from \"react\";\nimport { useReduxDispatch, useReduxSelector } from \"../../redux/hooks\";\nimport { useLocation, useNavigate, useSearchParams } from \"react-router-dom\";\nimport RevelationIframe from \"../Revelation/RevelationIframe\";\nimport { updateIframeSrc } from \"../../slices/RevelationSlice\";\nimport { Api } from \"../../redux/api/BaseApi\";\nimport { Spinny } from \"./Spinny\";\n\nconst Deeplink = () => {\n const [searchParams] = useSearchParams();\n const navigate = useNavigate();\n const location = useLocation();\n const lowerParams = new URLSearchParams(\n [...searchParams].map(([key, value]) => [key.toLowerCase(), value])\n );\n const dispatch = useReduxDispatch();\n const { data } = Api.useGetUserProfileQuery();\n\n // Redux Selectors\n const revI = useReduxSelector((state) => state.revI);\n\n\n useEffect(() => {\n if (data) {\n\n //Make sure that /deeplink isn't being opened inside the iframe\n console.log('Top check', window.top, 'equal', window.top === window.self);\n if (window.top !== window.self) {\n window.top.location = window.self.location;\n return;\n }\n\n var redirect = lowerParams.get(\"url\") || lowerParams.get(\"returnurl\");\n\n if (redirect) {\n navigate('/');\n dispatch(\n updateIframeSrc(redirect)\n );\n } else {\n console.log('window.history.replaceState', location.pathname + location.search)\n dispatch(updateIframeSrc(location.pathname + location.search))\n\n window.history.replaceState(null, '', '.');\n }\n }\n }, [data]);\n\n if (!revI?.currentIframeSrc) return <Spinny />\n\n return <RevelationIframe />;\n};\n\nexport default Deeplink;\n","import { useEffect } from \"react\";\nimport { createUserManager } from \"redux-oidc\";\nimport { useGetTenantQuery, useRenewlicenseMutation } from \"../../redux/api/BaseApi\";\nimport { oAuthSettings } from \"../Auth/AuthSettings\";\n\nconst LicenseManager = () => {\n const { data: tenant } = useGetTenantQuery();\n\n const [\n renewLicense,\n //{ error }\n ] = useRenewlicenseMutation();\n\n\n useEffect(() => {\n\n //if (loop === null)\n //setLoop(\n let thisLoop = window.setInterval(async () => {\n try {\n await renewLicense(null).unwrap();\n } catch (err) {\n console.log('ooof', err);\n if (\"status\" in err) {\n if (err.status === 401) {\n //Token expired go to login page\n console.log('Token expired go to login page');\n let settings = oAuthSettings;\n if (tenant?.Authority)\n settings.authority = tenant?.Authority\n\n console.log('Redirecting to signin page', settings);\n let userManager = createUserManager(settings)\n await userManager.signinRedirect();\n }\n if (err.status === 403) {\n console.log('Auto logout', err.data);\n let settings = oAuthSettings;\n if (tenant?.Authority)\n settings.authority = tenant?.Authority\n\n let userManager = createUserManager(settings)\n //Kill the loop\n //setLoop(null);\n await userManager.signoutRedirect({\n extraQueryParams: { logoutMessage: err.data?.message },\n });\n }\n }\n }\n }, 30000);\n\n console.log('useEffect in LicenseManager.tsx', thisLoop);\n //);\n return () => {\n console.log('Cleanup Licensemanager', thisLoop)\n window.clearInterval(thisLoop);\n }\n }, []);\n return <></>;\n};\n\nexport default LicenseManager;\n","import React, { useContext } from 'react'\nimport { RevUserContext } from '../../context/UserContext';\nimport { useReduxDispatch, useReduxSelector } from '../../redux/hooks';\nimport { cancelMimic } from '../../slices/RevelationSlice';\nimport { IUserProfile } from '../../types/User/IUserProfile';\n\nexport const MimicBar = () => {\n const profile = useContext<IUserProfile>(RevUserContext)\n const mimicUid = useReduxSelector((state) => state.revI.mimicUid);\n const dispatch = useReduxDispatch();\n const cancelMimicSession = () => {\n dispatch(cancelMimic());\n };\n if (!mimicUid)\n return <></>\n\n return (\n <>\n <div className='mimic-bar'>You are currently mimicing user account <u>{profile.F_Name} {profile.L_Name}</u>. Press X to cancel this mimic session.\n <button className=\"k-font-icon k-i-close\" title='Cancel mimic session' onClick={cancelMimicSession}>\n </button></div></>\n )\n}\n","import { AppBarSection } from \"@progress/kendo-react-layout\";\nimport { updateIframeSrc } from \"../../slices/RevelationSlice\";\nimport { useReduxDispatch } from \"../../redux/hooks\";\n// import testImage from \"./images/Host_Images/Login/revelationLogo_login_Syn.gif\"\n\n/** For testing purposes only.\n * In order to manually test styles by manually changing numbers the\n * following must occur:\n * 1. export the navStyle below.\n * 2. Uncomment the SetLogoNavStyle(navStyle) and comment out the one with props.navStyleNavButton.tsx\n * 3. In NavButton.tsx, uncomment out the navStyle import.\n * 4. In NavButton.tsx, comment out navStyle.*/\n// export let navStyle = 0;\n\nexport type NavLogoProps = {\n imgUrl: string;\n navStyle?: number;\n};\nconst NavLogo = ({ props }: { props: NavLogoProps }) => {\n // Left here for testing purposes\n // const maxHeight = SetLogoNavStyle(navStyle);\n const maxHeight = SetLogoNavStyle(props.navStyle);\n const imgClass = \"w-auto \" + maxHeight;\n const dispatch = useReduxDispatch();\n return (\n\n <AppBarSection\n style={{\n // width: 128,\n display: \"grid\",\n justifyContent: \"center\",\n }}\n >\n <div className=\"flex justify-center\">\n <a href=\"#\" title=\"Home\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n e.nativeEvent.stopImmediatePropagation()\n e.nativeEvent.preventDefault()\n\n dispatch(updateIframeSrc(\"/Calls/OpenCalls.aspx\"))\n }\n }>\n <img\n className={imgClass} src={`${props.imgUrl}`} alt=\"Site logo\"\n /></a>\n </div>\n </AppBarSection>\n );\n};\nexport default NavLogo;\n\nfunction SetLogoNavStyle(navStyle: number): string {\n const normalSize = \"h-[70px]\";\n const halfSize = \"h-[43px]\";\n switch (navStyle) {\n case 1:\n return normalSize;\n case 2:\n return halfSize;\n case 3:\n return halfSize;\n default:\n return normalSize;\n }\n}\n","import { IAlertConfig } from '../../types/Alert/IAlertConfig';\nimport { Api } from './BaseApi'\n\nconst AlertApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getAlertConfig: build.query<IAlertConfig, void>({\n query: () => ({\n url: \"Alert/Config\",\n method: \"GET\"\n }),\n providesTags: [\"GetAlertConfig\"]\n }),\n }),\n overrideExisting: false,\n})\n\nexport { AlertApi };","import { CSSProperties, MouseEvent, useContext, useEffect, useState } from \"react\";\nimport { AlertApi } from \"../../../redux/api/AlertApi\";\nimport { IAlert } from \"../../../types/Alert/IAlert\";\nimport { IUserProfile } from \"../../../types/User/IUserProfile\";\nimport { RevUserContext } from \"../../../context/UserContext\";\n\n// const sampleNotifications = [\n// \"notification 1\",\n// \"notification 2 medium medium medium medium medium medium medium medium medium medium medium medium length notification\",\n// \"notification 3 very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long notification\",\n// ];\n\nexport interface INotificationsProps {\n navColor: string;\n}\n\nexport const Notifications = ({ props }: { props: INotificationsProps }) => {\n const profile = useContext<IUserProfile>(RevUserContext);\n const { navColor } = props;\n const [notifications, setNotifications] = useState<IAlert[]>([]);\n const [showNotification, setShowNotification] = useState(0);\n const { data: alertConfig } = AlertApi.useGetAlertConfigQuery(undefined, { skip: profile.Features?.External_Interface });\n\n useEffect(() => {\n //Fetch alerts from webservice\n if (alertConfig) {\n fetch(alertConfig.Alerts_Get_Url).then((data) => {\n if (data.ok)\n return data.json()\n }).catch((err) => console.warn(err)).then((data) => {\n console.log('data', data);\n setNotifications(data)\n\n //Mark the first message as seen\n if (data?.length > 0) {\n seen(data.at(0).uid);\n }\n });\n }\n return () => {\n\n }\n }, [alertConfig])\n\n\n const notificationStyle: CSSProperties = {\n backgroundColor: navColor,\n borderTop: \"solid 2px white\",\n borderRight: \"solid 2px white\",\n borderLeft: \"solid 2px white\",\n display: \"flex\",\n placeContent: \"space-between\",\n color: \"white\",\n boxShadow: \"5px 5px 4px 0px rgba(0,0,0,0.03)\",\n };\n function handleRemoveNotification(event: MouseEvent<HTMLButtonElement>) {\n //Post to the API that the message has been closed.\n if (alertConfig) {\n var messageId = event.currentTarget.getAttribute(\"data-uid\")\n fetch(alertConfig.Read_Post_Url.replace('{AlertUid}', messageId), {\n method: 'post',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n \"ClientInfoEncrypted\": alertConfig.ClientInfoEncrypted\n })\n }).then(() => {\n //Remove the message\n setNotifications((note) => note.filter((f) => f.uid !== messageId))\n\n //Back to message 1\n setShowNotification(0);\n });\n }\n }\n //Marks the notifcation as 'Seen'\n async function seen(messageId) {\n return fetch(alertConfig.Seen_Post_Url.replace('{AlertUid}', messageId), {\n method: 'post',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n \"ClientInfoEncrypted\": alertConfig.ClientInfoEncrypted\n })\n });\n }\n function handleNotificationIteration(event: MouseEvent<HTMLButtonElement>) {\n const workingIndex = parseInt(\n event.currentTarget.getAttribute(\"data-index\")\n );\n const calculatedIndex = workingIndex % notifications.length;\n console.log(\"calculatedIndex\", calculatedIndex);\n setShowNotification(calculatedIndex);\n\n //Mark the message as seen\n if (notifications.length > calculatedIndex) {\n var messageId = notifications.at(calculatedIndex).uid\n seen(messageId);\n }\n }\n\n\n return (\n <>\n {notifications?.length > 0 && (\n <ul className=\"relative z-[100]\">\n <li style={notificationStyle} className=\"alert-item\">\n <div className=\"flex\">\n <div className=\"bg-black w-[50px] min-w-[50px] mr-2\">\n <span className=\"flex place-content-center text-xs pt-1\">\n {showNotification >= 0\n ? Math.abs(showNotification) + 1\n : showNotification + notifications.length + 1}{\" \"}\n of {notifications.length}\n </span>\n <div className=\"flex place-content-center h-full\">\n <button\n className=\"flex flex-grow place-content-end pr-2 pt-2 pb-1 hover:animate-pulse\"\n onClick={handleNotificationIteration}\n data-index={showNotification - 1}\n >\n <img\n src=\"./images/img_arrow_left.png\"\n alt=\"previous notification\"\n />\n </button>\n <button\n className=\"flex flex-grow pl-2 pt-2 pb-2 hover:animate-pulse\"\n onClick={handleNotificationIteration}\n data-index={showNotification + 1}\n >\n <img\n src=\"./images/img_arrow_right.png\"\n alt=\"next notification\"\n />\n </button>\n </div>\n </div>\n <span className=\"grid place-content-center\">\n {notifications.length >= showNotification && <div dangerouslySetInnerHTML={{ __html: notifications.at(showNotification).message }} ></div>}\n </span>\n </div>\n <button\n className=\"pl-1 pr-5 hover:animate-pulse\"\n data-uid={notifications.at(showNotification).uid}\n onClick={handleRemoveNotification}\n >\n <img\n className=\"w-[15px] min-w-[15px]\"\n src={\"./images/img-cancel.png\"}\n alt=\"close\"\n />\n </button>\n </li>\n </ul>\n )}\n </>\n );\n};\n","import { Drawer, DrawerItem, DrawerItemProps, Menu } from \"@progress/kendo-react-layout\";\nimport { Popup } from \"@progress/kendo-react-popup\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { nanoid } from \"nanoid\";\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { useReduxDispatch } from \"../../../../redux/hooks\";\nimport { updateIframeSrc } from \"../../../../slices/RevelationSlice\";\nimport { INavTransform } from \"../../../../types/INavTransform\";\nimport { NavItems } from \"../../../../types/User/IUserProfile\";\nimport {\n AddTextAndItemsAttrToHamburgerItems,\n trimChar,\n} from \"../../../../utils/utils\";\nimport { TicketLocationState } from \"../../../Ticket/TicketRoute\";\n\nexport interface IHamburgerMenuProps {\n navItems: NavItems[];\n baseUrl: string;\n}\n\nexport const HamburgerMenu = ({ props }: { props: IHamburgerMenuProps }) => {\n // console.log(props);\n let location = useLocation();\n let navigate = useNavigate();\n const anchor = useRef<HTMLButtonElement | null>(null);\n const menu = useRef<Menu>(null);\n const [show, setShow] = useState(false);\n const dispatch = useReduxDispatch();\n //const [menuExpanded, setMenuExpanded] = React.useState(false);\n\n function handleItemRender(navItems: INavTransform) {\n return (\n <button\n className=\"flex nav-menu-button\"\n key={navItems.itemId}\n >\n {navItems.item.Image_Url && <img className=\"w-[28px] pr-3\" src={'.' + trimChar(navItems.item.Image_Url, '.')} alt={navItems.item.Text}></img>}\n {navItems.item.Text}\n </button>\n );\n }\n\n function handleOnClick(url: string) {\n //console.log(\"click\", url);\n if (url) {\n if (url.indexOf(\"./\") === 0) {\n //internal URL, not IFrame\n const ticketState = {\n background: location,\n } as unknown as TicketLocationState;\n navigate(url, { state: ticketState });\n } else {\n navigate(\"/\");\n //console.log(\"dispatch\", `${trimChar(props.baseUrl, \"/\")}${url}`);\n dispatch(\n updateIframeSrc(\n `${trimChar(props.baseUrl, \"/\")}${url}${url.indexOf(\"?\") > -1 ? \"&\" : \"?\"\n }d=${nanoid()}`\n )\n );\n }\n }\n setShow(false);\n }\n\n const addTextAndItemsToProps = useMemo(\n () => AddTextAndItemsAttrToHamburgerItems(props.navItems),\n [props]\n );\n\n //Problematic in Safari\n useEventListener(\"click\", (e: MouseEvent) => {\n //console.log('useEventListener2', e.target, (e.target as HTMLElement).className, menu?.current.element.contains(e.target as Node));\n\n //If anything is clicked thats not a menu item then close the menu\n if (!menu?.current?.element?.contains(e.target as Node) && (e.target as HTMLElement).className?.indexOf && (e.target as HTMLElement).className?.indexOf('burger-menu-icon') == -1 && show !== false) {\n console.log('closing menu')\n setShow(false);\n }\n });\n\n const RenderItem = (props: DrawerItemProps) => {\n return (\n <DrawerItem {...props} title={props.text} style={{ background: '#868586', color: '#fff' }}>\n <div className=\"flex\">\n {props.image\n ? <img alt=\"Tool\" src={props.image} style={{ maxHeight: 20, marginLeft: 7, marginRight: 3 }} />\n : <span className={\"k-font-icon \" + props.icon} />\n }\n <div className=\"k-item-text\">\n {props.text}\n </div>\n <span\n className={\"k-font-icon k-i-arrow-chevron-right flex-grow\"}\n style={{\n position: \"absolute\",\n right: 0,\n\n }}\n />\n\n </div>\n </DrawerItem>\n );\n };\n\n\n\n return (\n <>\n <div className=\"relative\" title=\"Navigation\">\n <button\n className=\"bg-[#868586] grid place-content-center z-50 w-[30px] h-[30px]\"\n onClick={() => {\n setShow(!show)\n menu?.current?.element.focus();\n console.log('focused', menu, menu?.current);\n }}\n onBlur={e => {\n console.log('Blur', e);\n //if (e.relatedTarget.className.indexOf(\"nav-menu-button\") == -1)\n //setShow(false);\n }}\n ref={anchor}\n >\n <img\n className=\"p-1 burger-menu-icon\"\n src={\"./images/Hamburger_icon.png\"}\n alt=\"menu button\"\n width={23}\n />\n </button>\n </div>\n\n <Popup\n className=\"nav-burger-popup\"\n anchor={anchor.current}\n show={show}\n style={{ position: \"absolute\", zIndex: 120 }}\n anchorAlign={{ horizontal: \"right\", vertical: \"bottom\" }}\n popupAlign={{ horizontal: \"right\", vertical: \"top\" }}\n >\n <Menu ref={menu}\n className=\"nav-burger-menu\"\n vertical\n itemRender={(item: INavTransform) => handleItemRender(item)}\n items={addTextAndItemsToProps}\n onSelect={(e) => {\n const navItem: NavItems = e.item as NavItems;\n handleOnClick(navItem.Url);\n }}\n hoverCloseDelay={2000}\n // For Debugging\n // hoverCloseDelay={1000 * 60 * 60}\n />\n </Popup>\n {/* Experimental */}\n {/* <Drawer\n expanded={false}\n position=\"end\"\n mode=\"overlay\"\n mini={false}\n width={200}\n items={props.navItems.map(n => {\n return {\n text: n.Text,\n image: n.Image_Url,\n selected: true,\n route: \"/\",\n }\n })}\n item={RenderItem}\n ></Drawer> */}\n </>\n );\n};\n","import { Window } from \"@progress/kendo-react-dialogs\";\n\nexport interface ProductTourProps {\n url: string;\n onClose: () => void;\n width?: number;\n height?: number;\n}\n\nconst ProductTour = ({ props }: { props: ProductTourProps }) => {\n const { onClose, url } = props;\n return (\n <>\n <Window\n modal\n draggable={false}\n resizable={false}\n className=\"product-tour\"\n // title=\"Product Tour\"\n width={props.width || 987}\n height={props.height || 574}\n onClose={onClose}\n style={{ padding: \"0\" }}\n overlayStyle={{ padding: \"0\", display: \"relative\" }}\n >\n <iframe\n name=\"product-tour-iframe\"\n height={props.height - 4 || 570}\n width={props.width - 4 || 985}\n className=\"flex grow\"\n src={url}\n />\n </Window>\n </>\n );\n};\n\nexport default ProductTour;\n","import { Window } from \"@progress/kendo-react-dialogs\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { useState } from \"react\";\n\nexport interface TrialTourProps {\n url: string;\n onClose: () => void;\n}\n\nconst TrialTour = ({ props }: { props: TrialTourProps }) => {\n const { onClose, url } = props;\n const exitButton = document\n .getElementsByClassName(\n \"k-button k-button-md k-button-flat k-button-flat-base k-rounded-md k-icon-button k-window-action\"\n )\n .item(2);\n const [exitVisibility] = useState(\"hidden\");\n if (exitVisibility === \"visible\") {\n exitButton?.setAttribute(\"style\", `visibility: ${exitVisibility};`);\n }\n const listenForMessage = (ev) => {\n console.log(\"trial tour ev:\", ev);\n if (ev.data === \"TourComplete\") {\n //setExitVisibility(\"visible\");\n } else if (ev.data === \"CloseTour\") {\n onClose();\n }\n };\n\n useEventListener(\"message\", listenForMessage);\n return (\n <>\n <Window\n modal\n draggable={false}\n resizable={false}\n className=\"trial-tour\"\n // title=\"Product Tour\"\n height={window.innerHeight}\n width={window.innerWidth}\n onClose={onClose}\n style={{ padding: \"0\", overflow: \"hidden\" }}\n overlayStyle={{ padding: \"0\", display: \"relative\" }}\n >\n <iframe\n title=\"Trial tour\"\n name=\"trial-tour-iframe\"\n height={window.innerHeight - 4}\n width={window.innerWidth - 3}\n className=\"flex grow\"\n src={url}\n style={{ padding: \"0\", overflow: \"hidden\" }}\n />\n </Window>\n </>\n );\n};\n\nexport default TrialTour;\n","import { Menu } from \"@progress/kendo-react-layout\";\nimport { Popup } from \"@progress/kendo-react-popup\";\nimport { CSSProperties, useContext, useMemo, useRef, useState } from \"react\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../../redux/hooks\";\nimport { updateIframeSrc } from \"../../../../slices/RevelationSlice\";\nimport { setContextMenuOpen } from \"../../NavSlice\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { IProfileTransform } from \"../../../../types/INavTransform\";\nimport { IUserProfile, NavItems } from \"../../../../types/User/IUserProfile\";\nimport { AddTextAndItemsAttrToHamburgerItems } from \"../../../../utils/utils\";\nimport { TicketLocationState } from \"../../../Ticket/TicketRoute\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { nanoid } from \"nanoid\";\nimport ProductTour, { ProductTourProps } from \"./ProductTour\";\nimport TrialTour, { TrialTourProps } from \"./TrialTour\";\nimport { RevUserContext } from \"../../../../context/UserContext\";\nimport {\n useGetTenantQuery,\n useReleaselicenseMutation,\n} from \"../../../../redux/api/BaseApi\";\nimport { oAuthSettings } from \"../../../Auth/AuthSettings\";\nimport { createUserManager } from \"redux-oidc\";\nimport { SplitButton } from \"@progress/kendo-react-buttons\";\nimport { ProfileNavProps } from \"../ProfileNav\";\nimport { UserApi } from \"../../../../redux/api/UserApi\";\n\nconst PROFILE = \"Profile\";\nconst LOG_OUT = \"Log Out\";\nconst HELP = \"Help\";\n\nconst ProfileDropdown = (props: ProfileNavProps) => {\n // console.log(props);\n const data = useContext<IUserProfile>(RevUserContext);\n const user = useReduxSelector((state) => state.auth.user);\n const { data: tenant } = useGetTenantQuery();\n const [dismissFeature] = UserApi.useDismissIntroMutation();\n const {\n Profile_Menu_Items,\n Id,\n Features,\n Profile_Image_Url,\n Help_Url,\n Whats_New_Tour_Url,\n Show_Tour,\n Show_Trial_Tour\n } = data;\n const { Profile_Images } = Features;\n let location = useLocation();\n let navigate = useNavigate();\n const anchor = useRef<HTMLButtonElement | null>(null);\n const contextMenuOpen = useReduxSelector(\n (state) => state.nav.contextMenuOpen\n );\n const [productTourPopupVisible, setProductTourPopupVisible] = useState<boolean>(false);\n const [trialTourPopupVisible, setTrialTourPopupVisible] = useState<boolean>(Show_Trial_Tour);\n const [whatsNewTourPopupVisible, setWhatsNewTourPopupVisible] = useState<boolean>(Show_Tour);\n const dispatch = useReduxDispatch();\n\n const productTourProps: ProductTourProps = {\n width: 989,\n url: Profile_Menu_Items.find((item) => item.Name === \"ProductTour\")?.Url,\n onClose: () => setProductTourPopupVisible(false),\n };\n const trialTourProps: TrialTourProps = {\n url: Profile_Menu_Items.find((item) => item.Name === \"TrialTour\")?.Url,\n onClose: () => {\n setTrialTourPopupVisible(false)\n //Update user settings via API\n dismissFeature(99).unwrap();\n },\n };\n\n const whatsNewTourProps: ProductTourProps = {\n width: 992,\n height: 576,\n url: Whats_New_Tour_Url,\n onClose: () => {\n setWhatsNewTourPopupVisible(false);\n\n //Update user settings via API\n dismissFeature(101).unwrap();\n }\n };\n\n // Additional Items\n const buildItemList = (items: NavItems[]) => {\n const additionalItems = [\n // {\n // text: \"Admin\",\n // Url: \"/adminUX/DynamicUI/Default.aspx?PageName=HelpdeskSetup\",\n // access: Admin_Area,\n // },\n // { text: \"Numbers\", Url: \"/Numbers/Default.aspx\", access: Numbers },\n { text: HELP, Url: Help_Url, access: true },\n //{ text: LOG_OUT, Url: LOG_OUT, access: true },\n ];\n const regularItems = AddTextAndItemsAttrToHamburgerItems(items);\n additionalItems.forEach((item) => {\n // @ts-ignore\n if (item.access) regularItems.push(item);\n });\n return regularItems;\n };\n const addTextAndItemsToProps = useMemo(\n () => buildItemList(Profile_Menu_Items),\n [Profile_Menu_Items]\n );\n\n // logout button\n\n const [releaseLicense] = useReleaselicenseMutation();\n const logMeOut = async () => {\n console.log(\"sign out\");\n await releaseLicense(null);\n console.log(\"user.id_token=\", user.id_token);\n let settings = oAuthSettings;\n if (tenant?.Authority) settings.authority = tenant?.Authority;\n //First release the current license, THEN release the token and redirect to the logout page.\n const userManager = createUserManager(settings);\n await userManager.signoutRedirect({ id_token_hint: user.id_token });\n };\n\n function handleItemRender(menuItem: IProfileTransform) {\n const { item, itemId } = menuItem;\n const buttonStyle: CSSProperties = {\n color: \"black\",\n fontSize: \"small\",\n };\n return (\n <button key={itemId} style={buttonStyle}>\n {item.text}\n </button>\n );\n }\n\n function handleProfileClick() {\n dispatch(updateIframeSrc(`/contacts/contactinfo.aspx?contact_id=${Id}`));\n }\n useEventListener(\"click\", () => {\n if (document.activeElement !== anchor.current && contextMenuOpen !== \"\")\n dispatch(setContextMenuOpen(\"\"));\n });\n\n function handleOnClick(url: string) {\n console.log(\"click\", url);\n if (url) {\n if (url === LOG_OUT) {\n logMeOut();\n } else if (url === Help_Url) {\n window.open(Help_Url, \"_blank\", \"noopener,noreferrer\");\n } else if (url.indexOf(\"./\") === 0) {\n //internal URL, not IFrame\n const ticketState = {\n background: location,\n } as unknown as TicketLocationState;\n navigate(url, { state: ticketState });\n } else if (url.toLowerCase() === productTourProps?.url?.toLowerCase())\n setProductTourPopupVisible(true);\n else if (url.toLowerCase().includes(\"free-trial\"))\n setTrialTourPopupVisible(true);\n else if (url.indexOf(\"http\") === 0)\n window.location = url as unknown as Location;\n else {\n navigate(\"/\");\n //console.log(\"dispatch\", `${trimChar(siteBaseUrl, \"/\")}${url}`);\n dispatch(\n updateIframeSrc(\n `${url}${url.indexOf(\"?\") > -1 ? \"&\" : \"?\"}d=${nanoid()}`\n )\n );\n }\n }\n }\n\n return (\n <>\n {Profile_Images ? (\n <>\n <SplitButton title=\"View profile\" className={(props.navStyle === 0 || props.navStyle === 1) ? \"profile-image-button\" : \"profile-image-button-small\"} imageUrl={\n !Profile_Image_Url ? './images/placeholder.png' :\n Profile_Image_Url?.indexOf(\"/images\") === 0\n ? process.env.PUBLIC_URL + Profile_Image_Url\n : Profile_Image_Url\n } items={addTextAndItemsToProps} fillMode={\"flat\"} onButtonClick={(e) => {\n handleProfileClick()\n //unfocus\n e.target.setState(s => {\n return { ...s, focused: false }\n });\n }}\n onItemClick={(e) => {\n console.log('handleOnClick', e.target.state);\n //unfocus\n e.target.setState(s => {\n return { ...s, focused: false }\n });\n //const navItem: NavItems = e.item as NavItems;\n handleOnClick(e.item?.Url);\n }} />\n </>\n ) : (\n <button\n ref={anchor}\n title=\"Edit Profile\"\n onClick={handleProfileClick}\n onContextMenu={(e) => {\n e.preventDefault();\n dispatch(setContextMenuOpen(PROFILE));\n }}\n className={!Profile_Images ? \"secondary-nav\" : \"\"}\n >\n <div className=\"relative\">\n <img\n className=\"indicator\"\n src=\"./images/context-menu-indicator.png\"\n alt=\"context menu indicator\"\n ></img>\n <span className=\"k-font-icon k-i-user\"></span>\n </div>\n </button>\n\n )}\n <Popup\n anchor={anchor.current}\n show={contextMenuOpen === PROFILE}\n anchorAlign={{ horizontal: \"right\", vertical: \"bottom\" }}\n popupAlign={{ horizontal: \"right\", vertical: \"top\" }}\n >\n <Menu\n className=\"profile-dropdown-menu\"\n vertical\n style={{\n backgroundColor: \"#e5e5e4\",\n border: \"solid 1px #73a942\",\n }}\n itemRender={(item: IProfileTransform) => handleItemRender(item)}\n items={addTextAndItemsToProps}\n onSelect={(e) => {\n const navItem: NavItems = e.item as NavItems;\n handleOnClick(navItem.Url);\n }}\n // For Debugging\n // hoverCloseDelay={1000 * 60 * 60}\n />\n </Popup>\n {productTourPopupVisible ? (\n <ProductTour props={productTourProps} />\n ) : null}\n {trialTourPopupVisible ? <TrialTour props={trialTourProps} /> : null}\n {whatsNewTourPopupVisible && <ProductTour props={whatsNewTourProps} />}\n {/* Left here for Testing Purposes */}\n {/* <ProductTour props={productTourProps} /> */}\n {/* <TrialTour props={trialTourProps} /> */}\n\n </>\n );\n};\nexport default ProfileDropdown;\n","export const IGNORE_CLASS = 'ignore-click-outside';\nexport const DROPDOWN_CLASS = 'rss-dropdown';\nexport const SELECT_CLASS = 'smart-select';\nexport const OPTION_CLASS = 'rss-option';\nexport const LABEL_CLASS = 'rss-label';\nexport const MOBILE_BREAKPOINT = 375;\n","import { MOBILE_BREAKPOINT } from \"../constants\";\nimport type { StyleProps } from \"../typings\";\nimport styled from \"styled-components\";\n\n// ---------------------------------------------------------------------\n\nexport default styled.div<StyleProps>`\n display: none;\n\n @media (max-width: ${MOBILE_BREAKPOINT}px) {\n display: ${({ open }) => (open ? \"block\" : \"none\")};\n background: rgba(0, 0, 0, 0.5);\n position: fixed;\n z-index: 999;\n bottom: 0;\n right: 0;\n left: 0;\n top: 0;\n }\n`;\n","import { MOBILE_BREAKPOINT } from '../constants';\nimport styled from 'styled-components';\n\n// ---------------------------------------------------------------------\n\nexport default styled.ul`\nbox-shadow: 0 5px 5px -3px rgb(0 0 0 / 20%),\n 0 8px 10px 1px rgb(0 0 0 / 14%),\n 0 3px 14px 2px rgb(0 0 0 / 12%);\n\ndisplay: none;\n\nborder-radius: 0 0 4px 4px;\nmin-width: 100%;\nz-index: 1000;\nborder: 0;\n\nlist-style: none;\npadding: 0;\nmargin: 0;\n\nbackground: inherit;\nfont-family: inherit;\ntext-align: inherit;\nfont-size: inherit;\ncolor: inherit;\n\n@media (max-width: ${MOBILE_BREAKPOINT}px) {\n inset: 50% 1rem auto 1rem !important;\n transform: translateY(-50%) !important;\n position: fixed !important;\n\n max-height: calc(85% - 1rem);\n min-width: unset;\n min-height: 50%;\n height: auto;\n width: auto;\n\n border-radius: 4px;\n overflow: auto;\n}\n`;\n","import styled from 'styled-components';\n\n// ---------------------------------------------------------------------\n\nexport default styled.div`\nborder-radius: 4px 4px 0 0;\nbox-sizing: border-box;\ndisplay: inline-block;\nposition: relative;\n/* min-width: 8rem; */\n\nbackground: #f5f5f5;\nfont-family: Roboto,sans-serif;\ntext-align: left;\nfont-size: 1rem;\ncolor: rgba(0,0,0,.87);\n`;\n","import type { StyleProps } from \"../typings\";\nimport styled from \"styled-components\";\n\n// ---------------------------------------------------------------------\n\nexport default styled.button<StyleProps>`\n transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out,\n border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n\n border-bottom-color: ${({ open }) => (open ? \"#6200ee\" : \"rgba(0,0,0,.4)\")};\n border-width: 0 0 2px;\n\n justify-content: space-between;\n cursor: pointer;\n display: flex;\n width: 100%;\n\n letter-spacing: 0.009375em;\n /* padding: 0.375rem 0.75rem; */\n line-height: 1.75rem;\n white-space: nowrap;\n margin: 0;\n\n background: inherit;\n border-radius: inherit;\n font-family: inherit;\n text-align: inherit;\n font-size: inherit;\n color: inherit;\n\n &:hover {\n background: rgba(0, 0, 0, 0.15);\n }\n\n /* &:after {\n transform: ${({ open }) => (open ? \"scale(1, -1)\" : \"none\")};\n font-weight: normal;\n font-style: normal;\n content: \"\\\\25BE\";\n text-align: right;\n margin-left: 1em;\n flex-grow: 1;\n } */\n`;\n","import styled from \"styled-components\";\n\n// ---------------------------------------------------------------------\n\nexport default styled.li`\n background: inherit;\n padding: 0;\n margin: 0;\n\n > input {\n pointer-events: none;\n position: absolute;\n z-index: -9999;\n opacity: 0;\n }\n\n input:focus-visible + label {\n outline: auto;\n }\n\n > label {\n cursor: pointer;\n display: block;\n\n padding: 0.75rem 1rem;\n white-space: nowrap;\n text-align: inherit;\n font-size: inherit;\n margin: 0;\n\n background: transparent;\n font-family: inherit;\n text-align: inherit;\n font-size: inherit;\n color: inherit;\n\n &.selected:hover {\n background: rgba(98, 0, 238, 0.16);\n }\n\n &.selected {\n background: rgba(98, 0, 238, 0.08);\n }\n\n &:hover {\n background: rgba(0, 0, 0, 0.05);\n }\n }\n`;\n","import styled from 'styled-components';\nimport Option from './option';\n\n// ---------------------------------------------------------------------\n\nexport default styled(Option)`\ninput[type=checkbox] + label .check {\n display: none;\n}\n`;\n","import styled from \"styled-components\";\nimport Option from \"./option\";\n\n// ---------------------------------------------------------------------\n\nexport default styled(Option)`\n input[type=\"checkbox\"] + label .check {\n display: inline-block;\n position: relative;\n height: 1rem;\n width: 1rem;\n top: 0.3rem;\n\n border-radius: 2px;\n background-color: white;\n margin-right: 8px;\n }\n\n input[type=\"checkbox\"]:checked + label .check {\n background: #b0b0b0;\n padding-top: 0.1rem;\n\n &:after {\n position: absolute;\n height: 0.6rem;\n width: 0.3rem;\n left: 0.34rem;\n content: \"\";\n\n border-bottom: 3px solid white;\n border-right: 3px solid white;\n transform: rotate(45deg);\n border-left: none;\n border-top: none;\n }\n }\n`;\n","import { IGNORE_CLASS } from './constants';\nimport { EvtHandler } from './typings';\nimport {\n useEffect, useCallback, useState, useMemo,\n RefObject, SyntheticEvent\n} from 'react';\n\n// ---------------------------------------------------------------------\n\nexport function useClickOutside(ref: RefObject<HTMLElement>, onClick?: EvtHandler): void {\n useEffect(() => {\n if (typeof onClick !== 'function') {\n return undefined;\n }\n\n const handler = (evt: MouseEvent) => {\n let source = evt.target as HTMLElement;\n let check;\n let found;\n\n if (ref.current === null) {\n return;\n }\n\n while (source && source.parentNode) {\n check = source.classList.contains(IGNORE_CLASS);\n found = source === ref.current || check === true;\n source = source.parentNode as HTMLElement;\n\n if (found === true) {\n return;\n }\n }\n\n evt.stopPropagation();\n evt.preventDefault();\n onClick(evt);\n };\n\n document.addEventListener('mousedown', handler, true);\n\n return () => {\n document.removeEventListener('mousedown', handler, true);\n };\n }, [ ref, onClick ]);\n}\n\nexport function useToggle(initialValue = false): [ boolean, EvtHandler ] {\n const [ value, setValue ] = useState(initialValue);\n\n const onToggle = useCallback((evt?: Event | SyntheticEvent) => {\n if (evt) {\n evt.preventDefault();\n }\n setValue(!value);\n }, [ value ]);\n\n return [ value, onToggle ];\n}\n\nexport function useRandomId(): string {\n return useMemo(() => Math.random().toString(36).substring(2, 6) || '-', []);\n}\n","import React, {\n CSSProperties, FunctionComponent, ChangeEventHandler\n} from 'react';\nimport type {\n RSSOption, RSSOptions, RSSValue, FormatOption\n} from './typings';\nimport Single from './styled/single';\nimport Multi from './styled/multi';\n\n// ---------------------------------------------------------------------\n\nimport { OPTION_CLASS } from './constants';\nimport { useRandomId } from './hooks';\n\nfunction formatSimple(option: RSSOption) {\n return option.label;\n}\n\ntype OptionProps = {\n onClick: ChangeEventHandler<HTMLInputElement>;\n option: RSSOption;\n index: number;\n value?: RSSValue;\n style?: CSSProperties;\n formatOption?: FormatOption;\n multi?: boolean;\n};\n\n// ---------------------------------------------------------------------\n\nconst CustomSmartOption: FunctionComponent<OptionProps> = (props) => {\n const {\n option, index, value, multi, style, onClick,\n formatOption = formatSimple\n } = props;\n\n const Styled = multi ? Multi : Single;\n const _values = value as RSSOptions;\n const _value = value as RSSOption;\n const current = option.value;\n let selected;\n\n if (multi === true) {\n selected = _values.some((v) => v.value === current);\n } else {\n selected = value ? _value.value === current : false;\n }\n\n const className = selected ? `${OPTION_CLASS} selected` : OPTION_CLASS;\n const formatted = formatOption(option, selected);\n const id = useRandomId();\n\n return (\n <Styled key={current} role=\"menuitem\">\n <input type=\"checkbox\" id={id} name={current} checked={selected}\n data-index={index} onChange={onClick} />\n <label htmlFor={id} className={className} style={style}>\n <span className=\"check\" />\n {formatted}\n </label>\n </Styled>\n );\n};\n\nexport default React.memo(CustomSmartOption);\n","import type { RSSOption, RSSOptions, RSSLabel, FormatLabel } from './typings';\n\n// ---------------------------------------------------------------------\n\ntype UpdateFn = (\n values: RSSOptions,\n selected: RSSOption,\n index: string,\n options: RSSOptions\n) => RSSOptions;\n\n// ---------------------------------------------------------------------\n\nexport const toggle: UpdateFn = (values, selected, index, options) => {\n const uncheck = values.some((item) => item.value === selected.value);\n const value = selected.value;\n\n if (index === '0') {\n return uncheck ? [] : options;\n }\n\n if (options.length === values.length) {\n return options.slice(1).filter((item) => item.value !== value);\n }\n\n if (uncheck) {\n return values.filter((item) => item.value !== value);\n }\n\n if (options.length !== values.length + 2) {\n return values.concat(selected);\n }\n\n return options;\n};\n\nexport const multi: UpdateFn = (values, selected) => {\n const uncheck = values.some((item) => item.value === selected.value);\n const value = selected.value;\n let updated;\n\n if (uncheck) {\n updated = values.filter((item) => item.value !== value);\n } else {\n updated = values.concat(selected);\n }\n\n return updated;\n};\n\nexport const formatLabel = (placeholder?: RSSLabel): FormatLabel => {\n const empty = placeholder || ' ';\n\n return (value, options) => {\n if (Array.isArray(value)) {\n // we want to preserve options order\n\n if (value.length === 0) {\n return empty;\n }\n\n return options\n .filter((o) => value.some((v) => v.value === o.value))\n .map((o) => o.label)\n .join(', ');\n }\n\n return value ? value.label : empty;\n };\n};\n","import type { RSSOption, RSSOptions, SelectProps } from \"./typings\";\nimport Background from \"./styled/background\";\nimport Dropdown from \"./styled/dropdown\";\nimport Wrapper from \"./styled/wrapper\";\nimport Label from \"./styled/label\";\nimport Option from \"./CustomSmartOption\";\nimport React, {\n useLayoutEffect,\n useCallback,\n FunctionComponent,\n ChangeEvent,\n} from \"react\";\n\n// ---------------------------------------------------------------------\n\nimport { useFloating, shift, Placement } from \"@floating-ui/react-dom\";\nimport { useToggle, useRandomId, useClickOutside } from \"./hooks\";\nimport * as constants from \"./constants\";\nimport * as utils from \"./utils\";\nimport { nanoid } from \"nanoid\";\n\nconst DROPDOWN_CLASS = constants.DROPDOWN_CLASS;\nconst SELECT_CLASS = constants.SELECT_CLASS;\nconst IGNORE_CLASS = constants.IGNORE_CLASS;\nconst LABEL_CLASS = constants.LABEL_CLASS;\n\nconst placement = \"bottom-end\" as Placement;\nconst OPTIONS = {\n middleware: [shift()],\n placement,\n};\n\n// ---------------------------------------------------------------------\n/* eslint-disable react/jsx-props-no-spreading */\n\nconst CustomSmartSelect: FunctionComponent<SelectProps> = (props) => {\n const {\n disabled = false,\n placeholder,\n className,\n onChange,\n options,\n toggle = false,\n multi = toggle || false,\n value = multi ? [] : null,\n } = props;\n\n const { x, y, refs, reference, floating, strategy, update } =\n useFloating(OPTIONS);\n\n const formatLabel = props.formatLabel || utils.formatLabel(placeholder);\n\n const [open, onToggle] = useToggle();\n\n const btnId = useRandomId();\n\n const onClick = useCallback(\n (evt: ChangeEvent<HTMLInputElement>) => {\n const index = evt.currentTarget.dataset.index || \"0\";\n const num = parseInt(index, 10);\n const selected = options[num];\n\n // if \"toggle\" is true, the first element of the list selects\n // and deselects the whole list. if any other element of the\n // list is deselected, the first element is deselected too\n\n if (multi === true) {\n const values = value as RSSOptions;\n const updater = toggle ? utils.toggle : utils.multi;\n const updated = updater(values, selected, index, options);\n\n onChange(updated, selected, options);\n return;\n }\n\n onChange(selected, selected, options);\n onToggle();\n },\n [options, value, multi, toggle, onToggle, onChange]\n );\n\n // -------------------------------------------------------------------\n\n useClickOutside(refs.floating, open ? onToggle : undefined);\n\n useLayoutEffect(() => {\n if (open === true) {\n update();\n }\n }, [open, update]);\n\n // -------------------------------------------------------------------\n\n const wrapClass = className ? `${SELECT_CLASS} ${className}` : SELECT_CLASS;\n const labelClass = open ? `${LABEL_CLASS} ${IGNORE_CLASS}` : LABEL_CLASS;\n const label = formatLabel(value, options);\n const hidden = !open;\n\n const renderOption = (option: RSSOption, index: number) => {\n const formatOption = props.formatOption;\n const style = props.optionStyle;\n const key = option.value;\n // Custom Forms\n if (option.value === -1) {\n return (\n <div\n className=\"grid place-content-center bg-rev-gray text-base text-[#868586]\"\n key={key}\n >\n Custom Forms\n </div>\n );\n } else {\n return (\n <Option\n option={option}\n index={index}\n value={value}\n multi={multi}\n key={key}\n style={style}\n formatOption={formatOption}\n onClick={onClick}\n />\n );\n }\n };\n\n const roundX = x === null ? 0 : Math.round(x);\n const roundY = y === null ? 0 : Math.round(y);\n const dropdown = {\n ...props.dropdownStyle,\n display: open ? \"block\" : undefined,\n position: strategy,\n left: roundX,\n top: roundY,\n };\n\n return (\n <Wrapper className={wrapClass} style={props.style}>\n <Label\n type=\"button\"\n ref={reference}\n id={btnId}\n className={labelClass}\n aria-haspopup={true}\n aria-expanded={open}\n style={props.labelStyle}\n open={open}\n disabled={disabled}\n onClick={onToggle}\n >\n {/* {label} */}\n <img\n src=\"./images/arrow_down.png\"\n alt=\"search options arrow\"\n width={7}\n height={7}\n />\n </Label>\n <Background open={open} />\n <Dropdown\n role=\"menu\"\n ref={floating}\n className={DROPDOWN_CLASS}\n aria-labelledby={btnId}\n aria-hidden={hidden}\n style={dropdown}\n >\n {options.map(renderOption)}\n <div className=\"grid\" key={nanoid()}>\n <button\n className=\"bg-rev-gray p-1 hover:bg-white shadow-lg hover:underline hover:underline-offset-2 text-sm\"\n onClick={() =>\n // I implemented optimistic updates instead of this Set Default button because it makes the most sense from a User perspective.\n // From a technical perspective, it was just way easier for me to trick people into thinking this button actually does anything.\n console.log(\"Your default search filters have been set.\")\n }\n >\n Set Default\n </button>\n </div>\n </Dropdown>\n </Wrapper>\n );\n};\n\nexport default React.memo(CustomSmartSelect);\n","import {\n useGetSearchTypeQuery,\n useUpdateSearchTypeMutation,\n} from \"../../../../redux/api/BaseApi\";\nimport { RSSValue } from \"react-smart-select\";\nimport { ISearchType } from \"../../../../types/ISearch\";\nimport CustomSmartSelect from \"../../../DropdownCheckbox/CustomSmartSelect\";\nimport { CSSProperties } from \"react\";\nconst countItems = (valueCount: number, optionCount: number): string => {\n switch (valueCount) {\n case 0:\n return \"No items checked\";\n case 1:\n return \"1 item checked\";\n case optionCount:\n return \"All items checked\";\n default:\n return `${valueCount} items checked`;\n }\n};\n\nconst CheckBoxDropdownFilter = () => {\n const { data, isLoading, error } = useGetSearchTypeQuery();\n const [updateSearchTypeMutation] = useUpdateSearchTypeMutation();\n if (error) {\n console.log(error);\n return <div>Error</div>;\n }\n const allOptions = isLoading\n ? []\n : data\n .filter((item) => {\n return item.ID !== 28;\n })\n .map((item) => {\n return { ...item, label: item.Display, value: item.ID };\n });\n const CheckAll = { label: \"Check All Filters\", value: 1000 };\n allOptions.unshift({\n ID: CheckAll.value,\n label: CheckAll.label,\n Display: CheckAll.label,\n value: CheckAll.value,\n Order: -100,\n Checked: false,\n });\n const checkedOptions: RSSValue = allOptions.filter((item) => {\n return item.Checked;\n });\n allOptions[0].Checked = allOptions.length - 1 === checkedOptions.length;\n const finalOptions = allOptions.filter((item) => {\n return item.Checked;\n });\n const customSmartSelectStyle: CSSProperties = {\n fontSize: \".7rem\",\n borderRadius: \"0px\",\n width: \"24px\",\n };\n const customSmartSelectLabelStyle: CSSProperties = {\n height: \"30px\",\n backgroundColor: \"#868586\",\n color: \"#f0f0f0\",\n border: \"none\",\n display: \"grid\",\n placeContent: \"center\",\n };\n const divWrapperStyle = \"w-[24px] relative\";\n if (isLoading) {\n return (\n <div className={divWrapperStyle}>\n <CustomSmartSelect\n toggle\n value={finalOptions}\n style={customSmartSelectStyle}\n labelStyle={customSmartSelectLabelStyle}\n onChange={() => console.log(\"Loading values\")}\n options={allOptions}\n />\n </div>\n );\n }\n return (\n <div className={divWrapperStyle}>\n <CustomSmartSelect\n toggle\n value={finalOptions}\n style={customSmartSelectStyle}\n labelStyle={customSmartSelectLabelStyle}\n optionStyle={{\n border: \"none\",\n height: \"30px\",\n width: \"220px\",\n paddingTop: \"2px\",\n paddingLeft: \"4px\",\n fontWeight: \"normal\",\n backgroundColor: \"#868586\",\n color: \"#f0f0f0\",\n fontSize: \".85rem\",\n }}\n formatLabel={(value, options) =>\n countItems(value.length, options.length)\n }\n options={allOptions}\n onChange={(value, selected, options) => {\n if (selected.value === CheckAll.value) {\n const checkAllOptions = data.map((item) => {\n return { ...item, Checked: !allOptions[0].Checked };\n });\n updateSearchTypeMutation(checkAllOptions);\n } else {\n const update: ISearchType = {\n ID: selected.ID,\n Display: selected.Display,\n Checked: !selected.Checked,\n Order: selected.Order,\n };\n updateSearchTypeMutation([update]);\n }\n }}\n />\n </div>\n );\n};\nexport default CheckBoxDropdownFilter;\n","import {\n useGetSearchTypeQuery,\n usePostSearchQuickMutation,\n} from \"../../../../redux/api/BaseApi\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../../redux/hooks\";\nimport {\n toggleQuickSearchingFlag,\n updateQuickSearchInput,\n updateQuickSearchResults,\n} from \"../../NavSlice\";\nimport {\n AutoComplete,\n AutoCompleteChangeEvent,\n AutoCompleteCloseEvent,\n ListItemProps,\n} from \"@progress/kendo-react-dropdowns\";\nimport React, {\n cloneElement,\n CSSProperties,\n ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { FlattenAndAddCategoryObjectsToQuickSearchResults } from \"../../../../utils/utils\";\nimport {\n ISearchQuickPost,\n ISearchQuickResults,\n} from \"../../../../types/ISearch\";\nimport \"./QuickSearch.css\";\nimport { updateIframeSrc } from \"../../../../slices/RevelationSlice\";\nimport { debounce } from \"lodash\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { TicketApi } from \"../../../../redux/api/TicketApi\";\n\nconst QuickSearch = () => {\n const { data, isLoading, error } = useGetSearchTypeQuery();\n const getSearchTypeQuery = useGetSearchTypeQuery();\n const nv = useReduxSelector((state) => state.nav);\n const dispatch = useReduxDispatch();\n const [PostSearchQuickMutation] = usePostSearchQuickMutation();\n const [windowWidth, setWindowWidth] = useState(window.innerWidth);\n const [findTicketId, setFindTicketId] = useState<number>();\n const { data: foundTicket, error: fetchTicketError } = TicketApi.useGetTicketQuery({ ticketId: findTicketId }, { skip: !findTicketId })\n\n // performs the mutation\n async function postSearch(\n input: string,\n results: ISearchQuickResults[],\n filters: number[]\n ) {\n //console.log(\"made it to postSearch\");\n if (\n !results.map((item) => item.Display).includes(input) &&\n input.length > 2\n ) {\n const post: ISearchQuickPost = {\n SearchTerm: input,\n SearchTypes: filters,\n };\n dispatch(toggleQuickSearchingFlag(true));\n //console.log(\"searching for \", input);\n await PostSearchQuickMutation(post)\n .unwrap()\n .then((payload) => {\n dispatch(\n updateQuickSearchResults(\n FlattenAndAddCategoryObjectsToQuickSearchResults(payload)\n )\n );\n })\n .catch((e) => {\n console.log(e);\n });\n dispatch(toggleQuickSearchingFlag(false));\n //.then(() => console.log(\"search complete\"));\n }\n }\n /** handles Change event */\n const handleOnChange = (\n event: AutoCompleteChangeEvent | AutoCompleteCloseEvent\n ) => {\n //console.log('handleOnChange', typeof event.target.value, event.target.value?.trim());\n if (\n typeof event.target.value === \"string\" &&\n event.target.value.trim() !== \"\"\n ) {\n dispatch(updateQuickSearchInput(event.target.value));\n dispatch(updateQuickSearchResults([]));\n // checks for undefined due to clear all button\n } else if (!event.target.value) {\n dispatch(updateQuickSearchInput(\"\"));\n } else {\n // should be object\n const chosen = event.target.value as unknown as ISearchQuickResults;\n if (!chosen.isCategory) {\n dispatch(updateQuickSearchInput(chosen.Display));\n }\n }\n };\n /** handle Item rendering */\n const handleItemRender = (\n li: ReactElement<HTMLLIElement>,\n itemProps: ListItemProps\n ) => {\n const dataItem = itemProps.dataItem as ISearchQuickResults;\n const SharedStyles: CSSProperties = {\n marginLeft: \"8px\",\n textAlign: \"left\",\n };\n let itemChildren: JSX.Element;\n let liStyle: Partial<CSSStyleDeclaration>;\n if (dataItem.isCategory) {\n itemChildren = (\n <span\n style={{\n ...SharedStyles,\n fontSize: \"1rem\",\n }}\n >\n {dataItem.Display} ({dataItem.ResultCount})\n </span>\n );\n liStyle = { backgroundColor: \"#ebebeb\", border: \"2px solid #469b42\" };\n } else {\n itemChildren = (\n <button\n onClick={() =>\n dispatch(\n updateIframeSrc(\n `${dataItem.Url_Format.replace(\"={0}\", `=${dataItem.Id}`)}`\n )\n )\n }\n style={{ ...SharedStyles, fontSize: \".8rem\" }}\n >\n {dataItem.Display.length > 70\n ? dataItem.Display.slice(0, 70) + \"...\"\n : dataItem.Display}\n {/*dataItem.Display*/}\n </button>\n );\n liStyle = { border: \"1px solid #868586\" };\n }\n const liProps = {\n ...li.props,\n style: {\n ...li.props.style,\n ...liStyle,\n },\n };\n return cloneElement(li, liProps, itemChildren);\n };\n /** handle search icon click */\n function handleSearchIconClick(searchPhrase: string, searchTypes: number[]) {\n console.log('handleSearchIconClick', encodeURIComponent(searchPhrase), 'searchTypes', searchTypes, 'selectedTypes', selectedTypes)\n\n const ticketStatusTypes = searchTypes.indexOf(-2) > -1 ? 'Ticket_Status_Type=0,1,2,4;0;1;2;3;4' : 'Ticket_Status_Type=1,2;1;2';\n const searchDefault = `/Search/Default.aspx?RunSearch=True&SearchTypes=${searchTypes}&Filters=Asset_Active=1~!~User_Status=1~!~Client_Status=2~!~Project_Status=1;3,1;3~!~${ticketStatusTypes}&SearchPhrase=${encodeURIComponent(searchPhrase)}`;\n dispatch(updateIframeSrc(`${searchDefault}`));\n }\n /** Optimize searching with filters. Filters are much less likely to change and thus don't need to be recomputed unless the filters change. */\n const searchFilters = useMemo(() => {\n if (data) {\n return data\n .filter((item) => {\n return item.Checked;\n })\n .map((item) => {\n return item.ID;\n });\n }\n }, [data]);\n /** Don't make a POST mutation until the user stops typing after x amount of milliseconds */\n const debouncePostSearch = useCallback(debounce(postSearch, 300), []);\n /** useEffect responsible for debouncing user input and then calling the Post mutation */\n useEffect(() => {\n debouncePostSearch(\n nv.quickSearchInput,\n nv.quickSearchResults,\n searchFilters\n );\n }, [nv.quickSearchInput]);\n\n ///Attach an event handler to the input field to listen for ENTER\n const autocomplete = useRef<any>();\n useEffect(() => {\n if (autocomplete && autocomplete?.current) {\n let input = autocomplete?.current?.element.querySelector('.k-input-inner')\n console.log('autocomplete input', input)\n if (input)\n input.addEventListener('keydown', handleKeyDown)\n }\n }, [autocomplete?.current])\n\n const selectedTypes = useMemo(() => getSearchTypeQuery.data && getSearchTypeQuery.data\n .filter((item) => item.Checked === true && item.ID !== 0)\n .map((item) => item.ID), [getSearchTypeQuery.data]);\n\n //Go directly to the ticket if you paste in the ticket number and press enter.\n function handleKeyDown(e) {\n if (e.keyCode === 13 && e.target.value) {\n //console.log('handleKeyDown', e.target.value, getSearchTypeQuery.data)\n let tid = parseInt(e.target.value.trim());\n Number.isNaN(tid) ? handleSearchIconClick(e.target.value, selectedTypes) : setFindTicketId(tid);\n }\n }\n useEffect(() => {\n //Go to the ticket if found\n console.log('Go to the ticket if found', findTicketId, foundTicket, fetchTicketError)\n if (findTicketId && foundTicket?.ID === findTicketId) {\n dispatch(updateIframeSrc(`/Calls/CallHistory.aspx?Call_Id=${foundTicket.ID}`));\n setFindTicketId(null);\n }\n else if (fetchTicketError)\n handleSearchIconClick(nv.quickSearchInput, selectedTypes)\n }, [findTicketId, foundTicket, fetchTicketError])\n\n useEventListener(\"resize\", () => setWindowWidth(window.innerWidth));\n let searchBarWidth = windowWidth > 768 ? \"256px\" : \"128px\";\n const autoCompleteStyle: CSSProperties = {\n width: searchBarWidth,\n border: \"1px solid #868586\",\n borderRadius: \"0px\",\n borderBottom: \"2px solid #868586\",\n height: \"30px\",\n backgroundColor: \"#868586\",\n color: \"#f0f0f0\",\n };\n\n if (error) return <div>Error</div>;\n\n if (isLoading) {\n return (\n <>\n <button onClick={() => console.log(\"Loading\")}>\n <img\n className=\"bg-[#868586] grid place-content-center p-1\"\n src={process.env.PUBLIC_URL + \"/images/Nav/search.png\"}\n width={30}\n alt=\"search bar\"\n />\n </button>\n <AutoComplete style={autoCompleteStyle} />\n </>\n );\n }\n\n return (\n <>\n <button\n onClick={() =>\n handleSearchIconClick(\n nv.quickSearchInput,\n getSearchTypeQuery.data\n .filter((item) => item.Checked === true && item.ID !== 0)\n .map((item) => item.ID)\n )\n }\n >\n <img\n className=\"bg-[#868586] grid place-content-center p-1\"\n src={process.env.PUBLIC_URL + \"/images/Nav/search.png\"}\n width={30}\n alt=\"search bar\"\n />\n </button>\n <AutoComplete\n ref={autocomplete}\n style={autoCompleteStyle}\n data={nv.quickSearchResults}\n onChange={handleOnChange}\n itemRender={handleItemRender}\n loading={nv.quickSearchingFlag}\n value={nv.quickSearchInput}\n suggest={false}\n listNoDataRender={() => cloneElement(<div></div>)}\n popupSettings={{\n width: \"500px\",\n height: \"500px\",\n popupClass: \"quickSearch\",\n }}\n onClose={handleOnChange}\n footer={<AutoCompleteFooter props={nv.quickSearchResults} />}\n />\n </>\n );\n};\n\n/** Footer for Auto Complete */\nconst AutoCompleteFooter = ({ props }: { props: ISearchQuickResults[] }) => {\n const noCategoriesArrayLength = props.filter((res) => !res.isCategory).length;\n return (\n <span className=\"grid place-content-center bg-rev-green text-white\">\n {noCategoriesArrayLength} Items Found\n </span>\n );\n};\n\nexport default QuickSearch;\n","import CheckBoxDropdownFilter from \"../CheckBoxDropdownFilter/CheckBoxDropdownFilter\";\nimport QuickSearch from \"./QuickSearch\";\n\nconst QuickSearchWrapper = ({ accessible }: { accessible: boolean }) => {\n return (\n <>\n {accessible ? (\n <>\n <QuickSearch />\n <CheckBoxDropdownFilter />\n </>\n ) : null}\n </>\n );\n};\nexport default QuickSearchWrapper;\n","import { useContext } from \"react\";\nimport {\n useGetUserProfileQuery,\n useUpdateFocusedViewToggleMutation,\n} from \"../../../redux/api/BaseApi\";\nimport { IUserProfile } from \"../../../types/User/IUserProfile\";\nimport { RevUserContext } from \"../../../context/UserContext\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../redux/hooks\";\nimport { updateToggleState } from \"../../../slices/RightBarSlice\";\nimport { ToggleState } from \"../../RightBar/RightBar\";\nimport { setIframeLoaded, updateIframeSrc } from \"../../../slices/RevelationSlice\";\nimport { nanoid } from \"nanoid\";\nimport RevelationIframe from \"../../Revelation/RevelationIframe\";\nimport { FavoriteApi } from \"../../../redux/api/FavoriteApi\";\n\ninterface IIconImg {\n src: string;\n alt: string;\n title: string;\n}\n\nconst FocusedViewToggle = () => {\n const preData = useContext<IUserProfile>(RevUserContext);\n const { data } = useGetUserProfileQuery();\n const src = useReduxSelector(s => s.revI.currentIframeSrc);\n const postData = data ? data : preData;\n const [updateFocusedViewToggle] = useUpdateFocusedViewToggleMutation();\n const dispatch = useReduxDispatch();\n const profile = useContext<IUserProfile>(RevUserContext);\n const { data: config } = FavoriteApi.useGetFavoriteConfigQuery(data?.Uid, { skip: !profile?.Features?.Revelations });\n const sendMessageToIframe = (collapse: boolean) => {\n console.log('sendMessageToIframe', collapse, window[\"RevelationIframe\"])\n window[\"RevelationIframe\"].postMessage(collapse ? 'FocusMode_On' : 'FocusMode_Off', '*');\n }\n const maximize: IIconImg = {\n src: \"./images/button_maximize.png\",\n alt: \"maximize\",\n title: \"Expanded View\",\n };\n const minimize: IIconImg = {\n src: \"./images/button_minimize.png\",\n alt: \"minimize\",\n title: \"Focused View\",\n };\n const iconImg: IIconImg = postData.Nav_Collapsed ? maximize : minimize;\n return (\n <button\n className=\"bg-[#868586] grid place-content-center z-50 w-[30px] h-[30px]\"\n onClick={async () => {\n try {\n // let foundINdex = config.Page_State_Xml.indexOf(\n // '<item key=\"0\" value=\"True\" />'\n // );\n // let currentState = ToggleState.Uninitialized;\n\n !postData.Nav_Collapsed\n ? dispatch(updateToggleState(ToggleState.Collapsed))\n : dispatch(updateToggleState(ToggleState.Uninitialized));\n // const payload = await updateFocusedViewToggle(!data.Nav_Collapsed).unwrap();\n await updateFocusedViewToggle(!postData.Nav_Collapsed);\n // console.log(\"fulfilled\", payload);\n\n //Just send a message to the homepage, no need to reload.\n sendMessageToIframe(!postData.Nav_Collapsed);\n\n //Refresh current page in IFrame because the left bar may have collapsed\n //dispatch(updateIframeSrc(null));\n } catch (error) {\n console.log(\"error\", error);\n }\n }}\n title={iconImg.title}\n >\n <img\n className=\"p-1\"\n src={iconImg.src}\n alt={iconImg.alt}\n width={23}\n title={iconImg.title}\n />\n </button>\n );\n};\nexport default FocusedViewToggle;\n","import { useNavigate } from \"react-router-dom\";\nimport { useReleaselicenseMutation } from \"../../../redux/api/BaseApi\";\nimport { Spinny } from \"../Spinny\";\n\nconst Logout = () => {\n const navigate = useNavigate();\n const logMeOut = async (params: any) => {\n navigate('/signout');\n };\n\n return (\n <>\n <button\n className=\"bg-[#d44133] grid place-content-center h-[30px] w-[30px]\"\n onClick={logMeOut}\n >\n <img\n title=\"Logout\"\n src={\"./images/logout.png\"}\n alt=\"signout button\"\n />\n </button>\n </>\n );\n};\n\nexport default Logout;\n","import { nanoid } from \"nanoid\";\nimport { useReduxDispatch } from \"../../../redux/hooks\";\nimport { updateIframeSrc } from \"../../../slices/RevelationSlice\";\n\nexport interface IAdminAreaProps {\n access: boolean;\n}\n\nexport const AdminArea = ({ props }: { props: IAdminAreaProps }) => {\n const { access } = props;\n const AdminAreaPath =\n \"/adminUX/DynamicUI/Default.aspx?PageName=HelpdeskSetup\";\n const dispatch = useReduxDispatch();\n\n const handleOnClick = (e) => {\n e.preventDefault();\n e.stopPropagation();\n //navigate(\"/\");\n dispatch(\n updateIframeSrc(\n `${AdminAreaPath}${AdminAreaPath.indexOf(\"?\") > -1 ? \"&\" : \"?\"\n }d=${nanoid()}`\n )\n );\n };\n\n if (access) {\n return (\n <a\n onClick={handleOnClick}\n className=\"grid place-content-center\"\n title=\"Admin settings\"\n href={'./deeplink?url=' + AdminAreaPath}\n >\n <img\n src=\"./images/img_gear.jpg\"\n alt=\"admin settings\"\n title=\"Admin settings\"\n />\n </a>\n );\n }\n return null;\n // left here for testing\n // return (\n // <button\n // onClick={handleOnClick}\n // className=\"grid place-content-center h-[30px] w-[30px]\"\n // title=\"Admin Area\"\n // >\n // <img src=\"./images/img_gear.jpg\" alt=\"admin area\" title=\"Admin Area\" />\n // </button>\n // );\n};\n","import React from 'react'\n\nexport default function CoreIcon() {\n return (\n <a href='https://revelationhelpdesk.com/Pricing' target='_blank'><img src='./images/but_cloud.png' className='pr-6' /></a>\n )\n}\n","import { AppBarSection } from \"@progress/kendo-react-layout\";\nimport { IUserProfile } from \"../../../types/User/IUserProfile\";\nimport {\n HamburgerMenu,\n IHamburgerMenuProps,\n} from \"./HamburgerMenu/HamburgerMenu\";\nimport ProfileDropdown from \"./ProfileDropdown/ProfileDropdown\";\nimport QuickSearchWrapper from \"./QuickSearch/QuickSearchWrapper\";\nimport FocusedViewToggle from \"./FocusedViewToggle\";\nimport { PROFILE_NAV_CONTAINER_CLASS_NAME } from \"../NavWrapper\";\nimport Logout from \"./Logout\";\nimport { AdminArea } from \"./AdminAreaButton\";\nimport CoreIcon from \"./CoreIcon\";\nimport { useGetTenantQuery } from \"../../../redux/api/BaseApi\";\nimport { trimChar } from \"../../../utils/utils\";\n\nexport type ProfileNavProps = {\n data: IUserProfile;\n mimicUid: string;\n navStyle?: number\n};\n\nconst ProfileNav = ({ props }: { props: ProfileNavProps }) => {\n const { data } = props;\n const { data: tenant } = useGetTenantQuery();\n const hamburgerMenuProps: IHamburgerMenuProps = {\n navItems: [...data.Nav_Items,\n ...(data.Features.Admin_Area ? [{\n Name: \"Admin\",\n Image_Url: \"./images/Revelations_admin.png\",\n Text: \"Admin\",\n Order: 0,\n Selected: false,\n Url: \"/adminUX/DynamicUI/Default.aspx?PageName=HelpdeskSetup\",\n Nav_Items: []\n }] : []),\n ...(data.Features.Numbers ? [{\n Name: \"Numbers\",\n Image_Url: \"\",\n Text: \"Numbers\",\n Order: 0,\n Selected: false,\n Url: \"/Numbers/Default.aspx\",\n Nav_Items: []\n }] : []),\n ],\n baseUrl: trimChar(tenant?.Tenant_Url, '/'),\n };\n return (\n <AppBarSection\n className={PROFILE_NAV_CONTAINER_CLASS_NAME}\n style={{\n maxWidth: \"100%\",\n gap: \"1px\",\n }}\n >\n {data.Is_Core_Site && <CoreIcon />}\n <ProfileDropdown {...props} />\n <QuickSearchWrapper accessible={data.Features.Quick_Search} />\n <FocusedViewToggle />\n <HamburgerMenu props={hamburgerMenuProps} />\n <AdminArea props={{ access: data.Features.Admin_Area }} />\n <Logout />\n </AppBarSection>\n );\n};\nexport default ProfileNav;\n","import { useMemo, useRef, MouseEvent } from \"react\";\nimport { NavItems } from \"../../../types/User/IUserProfile\";\nimport cx from \"classnames\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../redux/hooks\";\nimport { updateIframeSrc } from \"../../../slices/RevelationSlice\";\nimport { INavTransform } from \"../../../types/INavTransform\";\nimport { AddTextAndItemsAttrToNavItems } from \"../../../utils/utils\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { setContextMenuOpen } from \"../NavSlice\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { TicketLocationState } from \"../../Ticket/TicketRoute\";\nimport { nanoid } from \"nanoid\";\n// Below is for testing purposes\n// import { navStyle } from \"../NavLogo\";\n\nexport const NAV_BUTTON_CLASS_NAME = \"nav-button\";\n\nexport interface INavButtonProps extends NavItems {\n baseUrl: string;\n disabled?: boolean;\n buttonColor?: string;\n navStyle: number;\n onContextMenu?: (e: MouseEvent) => void;\n isMoreItems?: boolean;\n}\n\nconst NavButton = ({ props }: { props: INavButtonProps }) => {\n let location = useLocation();\n let navigate = useNavigate();\n const contextMenuOpen = useReduxSelector(\n (state) => state.nav.contextMenuOpen\n );\n const anchor = useRef<HTMLDivElement | null>(null);\n /** handles how context menu items are rendered */\n const dispatch = useReduxDispatch();\n /** updates iframe. I should move this to utils so that all apps can use this. */\n function handleOnClick(item: INavButtonProps) {\n if (item.Url) {\n if (item.Url.indexOf(\"./\") === 0) {\n //internal URL, not IFrame\n const ticketState = {\n background: location,\n } as unknown as TicketLocationState;\n navigate(item.Url, { state: ticketState });\n //navigate(item.Url);\n } else {\n navigate(\"/\");\n //console.log('item.Url', item.Url)\n dispatch(\n updateIframeSrc(\n `${item.Url}${item.Url.indexOf(\"?\") > -1 ? \"&\" : \"?\"}d=${nanoid()}`\n )\n );\n }\n }\n dispatch(setContextMenuOpen(\"\"));\n }\n /** handles right-click */\n const handleContextMenu = (e: MouseEvent) => {\n e.preventDefault();\n dispatch(setContextMenuOpen(props.Text));\n props.onContextMenu?.(e);\n };\n /** closes the menu upon the user clicking anywhere */\n useEventListener(\"click\", () => {\n if (document.activeElement !== anchor.current && contextMenuOpen !== \"\")\n dispatch(setContextMenuOpen(\"\"));\n });\n /** Apply styles depending on navStyle. Comment out navStyle when testing.*/\n const {\n navStyle,\n disabled,\n buttonColor,\n Text,\n //Url,\n Image_Url,\n Tooltip,\n } = props;\n const { navTextSize, buttonStyle, symbolSize } = ApplyCustomStyles(navStyle);\n /** Change div > button height and width depending navStyle */\n let divHeight: string;\n let buttonWidth: string = \"w-[70px]\";\n // @ts-ignore\n if (navStyle === 0 || navStyle === 1) {\n divHeight = \"h-[70px]\";\n } else if (navStyle === 2) {\n divHeight = \"h-11\";\n buttonWidth = \"w-[44px]\";\n } else {\n divHeight = \"h-11\";\n }\n return (\n <div\n onContextMenu={handleContextMenu}\n ref={anchor}\n // title={`${Text}: ${Tooltip}`}\n className={cx(\"relative\", NAV_BUTTON_CLASS_NAME)}\n title={`${Text}`}\n >\n {props.Nav_Items?.length > 0 && props.Name !== 'more-items' ? (\n <div className=\"context-icon\">\n <img\n src={\"./images/context-menu-indicator.png\"}\n alt=\"context menu indicator\"\n />\n </div>\n ) : null}\n <div className={cx({ \"opacity-75\": disabled }, divHeight)}>\n <div\n onClick={() => handleOnClick(props)}\n className={cx(\n \"md:px-1 shadow-lg grid place-content-center h-full\",\n buttonStyle,\n buttonWidth\n )}\n style={{ backgroundColor: `${buttonColor}` }}\n >\n {/* @ts-ignore */}\n {navStyle === 0 || navStyle === 1 || navStyle === 2 ? (\n <div className={cx(\"grid place-content-center\", props.isMoreItems ? \"mt-2\" : \"\")}>\n <img\n src={\n Image_Url?.indexOf(\"https://\") > -1\n ? Image_Url\n : process.env.PUBLIC_URL + Image_Url\n }\n alt={props.Text}\n width={symbolSize}\n />\n </div>\n ) : null}\n {/* @ts-ignore */}\n {navStyle === 0 || navStyle === 3 ? (\n <h1\n className={cx(\n \"text-white truncate max-w-full inline-block whitespace-normal\",\n navTextSize,\n props.isMoreItems ? \"mt-1\" : \"\"\n )}\n title={Tooltip}\n >\n {Text}\n </h1>\n ) : null}\n </div>\n </div>\n </div>\n );\n};\nexport default NavButton;\n\nfunction ApplyCustomStyles(navStyle: number) {\n let navTextSize = \"text-xs\";\n let buttonStyle = \"p-1\";\n let symbolSize = 30;\n\n switch (navStyle) {\n case 1:\n symbolSize = 40;\n break;\n case 2:\n buttonStyle = \"\";\n symbolSize = 25;\n break;\n default:\n break;\n }\n return { navTextSize, buttonStyle, symbolSize };\n}\n\nfunction handleItemRender(\n props: INavTransform,\n handleClickFunc: (arg: any) => void\n) {\n return (\n <button\n key={props.itemId}\n onClick={handleClickFunc}\n style={{\n color: \"black\",\n fontSize: \"small\",\n }}\n >\n {props.item.Text}\n </button>\n );\n}\n","import {\n makeStyles,\n shorthands,\n Menu,\n MenuTrigger,\n MenuPopover,\n MenuList,\n MenuItem,\n MenuButton,\n tokens,\n Overflow,\n OverflowItem,\n useIsOverflowItemVisible,\n useOverflowMenu,\n MenuProps,\n} from \"@fluentui/react-components\";\nimport * as React from \"react\";\nimport { IUserProfile, NavItems } from \"../../../types/User/IUserProfile\";\nimport { useContext } from \"react\";\nimport { RevUserContext } from \"../../../context/UserContext\";\nimport NavButton, { INavButtonProps } from \"./NavButton\";\nimport ProfileNav, { ProfileNavProps } from \"../ProfileNav/ProfileNav\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { NavLogoProps } from \"../NavLogo\";\nimport { TicketLocationState } from \"../../Ticket/TicketRoute\";\nimport { useReduxDispatch } from \"../../../redux/hooks\";\nimport { updateIframeSrc } from \"../../../slices/RevelationSlice\";\nimport { nanoid } from \"nanoid\";\nimport { trimChar } from \"../../../utils/utils\";\nimport { useGetTenantQuery } from \"../../../redux/api/BaseApi\";\n\n\nconst useStyles = makeStyles({\n container: {\n display: \"flex\",\n flexGrow: 1,\n flexWrap: \"nowrap\",\n minWidth: 0,\n\n ...shorthands.overflow(\"hidden\"),\n },\n\n farItems: {\n display: \"flex\",\n ...shorthands.gap(\"4px\"),\n flexWrap: \"nowrap\",\n // marginRight: \"10px\", //to allow the resize handle to be grabbed\n },\n\n resizableArea: {\n display: \"flex\",\n flexWrap: \"nowrap\",\n minWidth: \"200px\",\n ...shorthands.overflow(\"hidden\"),\n position: \"relative\",\n \"::after\": {\n position: \"absolute\",\n top: \"-2px\",\n left: \"-2px\",\n fontFamily: \"monospace\",\n fontSize: \"15px\",\n fontWeight: 900,\n lineHeight: 1,\n letterSpacing: \"1px\",\n color: tokens.colorNeutralForegroundOnBrand,\n backgroundColor: tokens.colorBrandBackground,\n },\n },\n});\n\nexport const FluentButtonBar = (props: NavLogoProps) => {\n const { data: tenant } = useGetTenantQuery();\n const data = useContext<IUserProfile>(RevUserContext);\n const { Nav_Items, Nav_Hex_Color } = data;\n const styles = useStyles();\n //const itemIds = Nav_Items?.map(n => n.Name)\n const [showNavMenu, setShowNavMenu] = React.useState<string>('false');\n //const itemIds = new Array(8).fill(0).map((_, i) => i.toString());\n const profileProps: ProfileNavProps = {\n data: data || {} as IUserProfile,\n mimicUid: null,\n navStyle: props.navStyle\n };\n return (\n <div className={styles.resizableArea + ' fluent-button-bar'}>\n <Overflow>\n <div className=\"nav-buttons-fluent hidden md:flex\">\n {\n Nav_Items?.map((i) => (\n\n <OverflowItem key={i.Name} id={i.Name}>\n <MenuButton key={'b_' + i.Name} >\n <NavMenu key={'nv_' + i.Name} props={{ ...i, baseUrl: trimChar(tenant?.Tenant_Url, '/'), buttonColor: Nav_Hex_Color, navStyle: props.navStyle }} isTopLevel={true} />\n </MenuButton>\n </OverflowItem>\n\n ))}\n {\n <NavMenu props={{ ...{ Nav_Items: Nav_Items, Image_Url: '/images/Nav/other.png', Name: 'more-items', isMoreItems: true } as INavButtonProps, baseUrl: trimChar(tenant?.Tenant_Url, '/'), buttonColor: Nav_Hex_Color, navStyle: props.navStyle }} isTopLevel={true} />\n\n }\n </div>\n </Overflow>\n <div className={styles.farItems}>\n <ProfileNav props={profileProps} />\n </div>\n\n </div>\n );\n};\n\nconst NavMenu: React.FC<{ props: INavButtonProps, isTopLevel: boolean }> = ({ props, isTopLevel }) => {\n const { ref, overflowCount, isOverflowing } = useOverflowMenu<HTMLButtonElement>();\n const navigate = useNavigate();\n const location = useLocation();\n const dispatch = useReduxDispatch();\n const [open, setOpen] = React.useState(false);\n const onOpenChange: MenuProps[\"onOpenChange\"] = (e, data) => {\n //console.log('onOpenChange', data, props.Name)\n // if (data.type === 'menuTriggerClick')\n // setOpen(false);\n // else\n if (props.Name === 'more-items' || data.type !== 'menuTriggerClick') {\n //console.log('setOpen = yes')\n setOpen(data.open);\n }\n };\n\n if (!isOverflowing && props.Name === 'more-items' && isTopLevel) {\n return null;\n }\n\n const text = props.isMoreItems ? `+${overflowCount} items` : props.Text;\n\n function handleOnClick(e) {\n if (props.Url) {\n e.preventDefault();\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n\n if (props.Url.indexOf(\"./\") === 0) {\n //internal URL, not IFrame\n const ticketState = {\n background: location,\n } as unknown as TicketLocationState;\n navigate(props.Url, { state: ticketState });\n //navigate(item.Url);\n } else {\n navigate(\"/\");\n\n dispatch(\n updateIframeSrc(\n `${props.Url}${props.Url.indexOf(\"?\") > -1 ? \"&\" : \"?\"}d=${nanoid()}`\n )\n );\n }\n }\n setTimeout(() => setOpen(false), 200);\n //setOpen(false);\n console.log('handleOnClick', open)\n }\n\n return (\n <Menu open={open} onOpenChange={onOpenChange}>\n <MenuTrigger>\n {props.isMoreItems ? <MenuButton ref={ref} className=\"top-level\" > <NavButton\n key={props.Name}\n props={{ ...props, Text: text, onContextMenu: (e) => setOpen(true) }}\n /> </MenuButton> :\n isTopLevel\n\n ? <div className=\"absolute-nope\"><NavButton\n key={props.Name}\n props={{ ...props, Text: text, onContextMenu: (e) => setOpen(true) }}\n /></div>\n\n : <MenuItem className=\"nav-overflow-item\" style={{ height: 'auto' }}><div className=\"inline-flex\" onClick={(e) => handleOnClick(e)} ><img className=\"mr-2\" src={props.Image_Url ? '.' + trimChar(props.Image_Url, '.') : ''} style={{ maxWidth: '25px' }} height={'auto'} />{props.Text}</div></MenuItem>\n\n }\n </MenuTrigger>\n\n\n <MenuPopover style={{ backgroundColor: props.buttonColor, color: '#fff' }}>\n <MenuList>\n <div className=\"nav-more-items-2\">\n {props.Nav_Items?.map((i) => {\n return <NavMenuItem key={i.Name} props={{ ...i, baseUrl: props.baseUrl, buttonColor: props.buttonColor, navStyle: props.navStyle }}>\n </NavMenuItem>\n })}\n </div>\n </MenuList>\n </MenuPopover>\n </Menu >\n );\n};\n\nconst NavMenuItem: React.FC<{ props: INavButtonProps }> = ({ props }) => {\n const navigate = useNavigate();\n const location = useLocation();\n const dispatch = useReduxDispatch();\n const data = useContext<IUserProfile>(RevUserContext);\n //const { id, children } = props;\n const isVisible = useIsOverflowItemVisible(props.Name);\n\n if (isVisible) {\n return null;\n }\n\n function handleOnClick(item: NavItems) {\n if (item.Url) {\n if (item.Url.indexOf(\"./\") === 0) {\n //internal URL, not IFrame\n const ticketState = {\n background: location,\n } as unknown as TicketLocationState;\n navigate(item.Url, { state: ticketState });\n //navigate(item.Url);\n } else {\n navigate(\"/\");\n //console.log('item.Url', item.Url)\n dispatch(\n updateIframeSrc(\n `${item.Url}${item.Url.indexOf(\"?\") > -1 ? \"&\" : \"?\"}d=${nanoid()}`\n )\n );\n }\n }\n }\n\n if (props.Nav_Items?.length > 0)\n return <NavMenu key={props.Name} props={props} isTopLevel={false} />\n\n return <MenuItem className=\"nav-overflow-item nav-overflow-border\">\n <div className=\"inline-flex\" onClick={() => handleOnClick(props)} ><img className=\"mr-2\" src={props.Image_Url && !props.Image_Url.startsWith('http') ? '.' + trimChar(props.Image_Url, '.') : props.Image_Url} style={{ maxWidth: '25px' }} height={'auto'} /><span dangerouslySetInnerHTML={{ __html: props.Text }}></span></div>\n </MenuItem>;\n};\n\n","import { AppBar } from \"@progress/kendo-react-layout\";\nimport { useContext } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { RevUserContext } from \"../../context/UserContext\";\nimport { useReduxSelector } from \"../../redux/hooks\";\nimport { IUserProfile } from \"../../types/User/IUserProfile\";\nimport { MimicBar } from \"./MimicBar\";\nimport { INavButtonsBarProps } from \"./NavButton/NavButtonsBar\";\nimport NavLogo, { NavLogoProps } from \"./NavLogo\";\nimport {\n INotificationsProps,\n Notifications,\n} from \"./Notifications/Notifications\";\nimport ProfileNav, { ProfileNavProps } from \"./ProfileNav/ProfileNav\";\nimport { useGetUserProfileQuery } from \"../../redux/api/BaseApi\";\nimport React from \"react\";\nimport { FluentButtonBar } from \"./NavButton/FluentButtonBar\";\n\n// Left here for testing purposes\n// import { navStyle } from \"./NavLogo\";\n\nexport const PROFILE_NAV_CONTAINER_CLASS_NAME = \"profile-nav\";\nconst PROFILE_NAV_CONTAINER_STYLE = \"inline-flex flex-grow justify-end\";\nconst NAV_BUTTONS_CONTAINER = \"nav-buttons-container\";\nconst NAV_BUTTONS_CONTAINER_SMALL = \"nav-buttons-container-small\";\nexport const NAV_BUTTONS_ID = \"nav-buttons\";\nconst LOGO_CONTAINER_ID = \"logo-container\";\nconst LOGO_CONTAINER_STYLE =\n \"flex flex-grow justify-center md:grid md:max-w-[256px] md:min-w-[256px]\";\nconst defaultNavButtonsBarProps: INavButtonsBarProps = {\n navStyleOverride: 2,\n override: true,\n hideNav: false\n};\nconst NavWrapper = () => {\n const preData = useContext<IUserProfile>(RevUserContext);\n const { data } = useGetUserProfileQuery();\n const postData = data ? data : preData;\n const mimicUid = useReduxSelector((s) => s.revI.mimicUid);\n\n const navLogoProps: NavLogoProps = {\n imgUrl: postData.Site_Logo_Url.startsWith('/') ? '.' + postData.Site_Logo_Url : postData.Site_Logo_Url,\n navStyle: postData?.Nav_Collapsed ? 2 : postData.Nav_Style,\n };\n const utilProps: ProfileNavProps = {\n data: postData,\n mimicUid: mimicUid,\n };\n const notificationsProps: INotificationsProps = {\n navColor: postData.Nav_Hex_Color,\n };\n const navContainer = (navLogoProps.navStyle == 2) ? NAV_BUTTONS_CONTAINER_SMALL : NAV_BUTTONS_CONTAINER\n\n return (\n <>\n <MimicBar />\n <Notifications props={notificationsProps} />\n <Helmet>\n <title>{postData.Site_Title}</title>\n </Helmet>\n <AppBar\n style={{\n zIndex: \"100\",\n display: \"flex\",\n justifyContent: \"space-between\",\n overflow: \"visible\",\n position: \"relative\",\n gap: \"0px\",\n paddingTop: \"0px\",\n paddingBottom: \"0px\"\n }}\n >\n <div className=\"md:flex flex-grow flex-wrap\">\n {<NavLogoContainer props={navLogoProps} />}\n <div className={navContainer}>\n <FluentButtonBar {...navLogoProps} />\n </div>\n </div>\n </AppBar >\n </>\n );\n};\nexport default NavWrapper;\n\nconst NavLogoContainer = ({ props }: { props: NavLogoProps }) => {\n return (\n <div id={LOGO_CONTAINER_ID} className={LOGO_CONTAINER_STYLE}>\n <NavLogo props={props} />\n </div>\n );\n};\n\nconst ProfileNavContainer = ({ props }: { props: ProfileNavProps }) => {\n return (\n <div className={PROFILE_NAV_CONTAINER_STYLE}>\n <ProfileNav props={props} />\n </div>\n );\n};\n\n","import { Outlet } from \"react-router-dom\";\nimport LicenseManager from \"../License/LicenseManager\";\nimport NavWrapper from \"./NavWrapper\";\nimport \"./Nav.scss\"\n\nconst Navbar = () => {\n return (\n <section className=\"relative grow flex flex-col\">\n <NavWrapper />\n <Outlet />\n <LicenseManager />\n </section>\n );\n};\n\nexport default Navbar;","import React from 'react'\nimport { ActivityFeed } from './ActivityFeed'\nimport '../RightBar.scss'\n\nexport const FeedPage = () => {\n return (\n <div className='feed-page'>\n <ActivityFeed fullScreen={true} />\n </div>\n )\n}\n","import { Field, Form, FormElement } from '@progress/kendo-react-form'\nimport React from 'react'\nimport { TicketApi } from '../../redux/api/TicketApi';\nimport { useReduxDispatch, useReduxSelector } from '../../redux/hooks';\nimport { PartialSpinny } from '../Nav/Spinny';\nimport * as ActionSlice from '../../slices/ActionSlice';\nimport ActionNote from './ActionNote/ActionNote'\n\nexport const ActionForm = (props: { ticketId: number, onSaved: () => void }) => {\n const dispatch = useReduxDispatch()\n const { isFetching: fetchingProfile } = TicketApi.useGetUserProfileQuery();\n const [postTicket, { isLoading: savingTicket }] = TicketApi.useCreateTicketMutation();\n const { data: ticket, isFetching } = TicketApi.useGetTicketQuery({ ticketId: props.ticketId }, { skip: !props.ticketId });\n const { action: newAction } = useReduxSelector(state => state.actionDetails);\n const [apiError, setApiError] = React.useState<string>()\n const handleSubmit = () => {\n console.log('handleSubmit', ticket, props.ticketId)\n\n let saveTicket = { ...ticket, Actions: [newAction] }\n\n postTicket(saveTicket).unwrap().then(() => {\n //Reset the action in state\n dispatch(ActionSlice.ResetAction(null));\n\n props.onSaved();\n }).catch((e) => {\n //Probably a validation error\n console.error('caught', e)\n 'Message' in e.data ?\n setApiError(e.data.Message)\n : setApiError(e.data.toString())\n });\n }\n const formValidator = () => {\n let actionRequired = !newAction.HTML_Notes\n\n console.log('formValidator', actionRequired)\n let val = {\n ...(actionRequired && { \"action\": ` (required)` })\n }\n\n if (Object.keys(val).length) {\n const pageVal = {\n ...val,\n VALIDATION_SUMMARY: \"Please fill in all required fields below.\",\n }\n\n return pageVal;//NOT good\n }\n\n return {}; //All Good\n };\n\n if (fetchingProfile || isFetching)\n return <PartialSpinny />\n\n return (\n <>\n {savingTicket && <PartialSpinny />}\n <Form onSubmit={handleSubmit} ignoreModified={true} validator={formValidator}\n render={(formRenderProps) => (\n <FormElement id='action-form'>\n <div id='error-summary'>\n {/* Validation */}\n {formRenderProps.errors &&\n formRenderProps.errors.VALIDATION_SUMMARY && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n {formRenderProps.errors.VALIDATION_SUMMARY}\n </div>\n )}\n {apiError && <div className={\"k-messagebox k-messagebox-error\"}>\n {apiError}\n </div>}\n </div>\n <div className='new-action k-panelbar-content k-content '>\n <Field\n id={\"action\"}\n name={\"action\"}\n component={ActionNote}\n companyId={ticket?.Company_Id}\n statusId={ticket?.Call_Status_Id}\n visited={false}\n />\n </div>\n </FormElement>\n )} />\n </>\n )\n}\n","import { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs'\nimport React from 'react'\nimport { Link } from 'react-router-dom';\nimport { Api } from '../../redux/api/BaseApi';\nimport { ActionSavedDialogProps } from '../../types/Props/TicketSavedProps'\n\nconst ActionSavedDialog = (props: ActionSavedDialogProps) => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n\n return (\n <div>\n <Dialog className='ticket-success' title={<div className=''>{props.title}</div>} onClose={props.toggleDialog} >\n <p\n style={{\n margin: \"25px\",\n textAlign: \"center\",\n }}\n >\n {userProfile.Phrases.Action} Logged successfully for {userProfile.Phrases.CallPhrase}\n <Link to={`/deeplink?url=/calls/callhistory.aspx?call_id=${props.ticketId}`} target='_blank'>#{props.ticketId}</Link>\n </p>\n <DialogActionsBar>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base\"\n onClick={props.toggleDialog}>\n OK\n </button>\n <button\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base\"\n onClick={props.viewDetails}>\n View Details\n </button>\n </DialogActionsBar>\n </Dialog>\n </div >\n )\n}\n\nexport default ActionSavedDialog","import React from \"react\";\nimport { Window, WindowActionsBar, WindowMoveEvent } from '@progress/kendo-react-dialogs';\nimport { useLocation, useNavigate, useParams } from 'react-router-dom'\nimport { TicketLocationState } from \"../Ticket/TicketRoute\";\nimport { Button } from \"@progress/kendo-react-buttons\";\nimport { ActionForm } from \"./ActionForm\";\nimport { Api } from \"../../redux/api/BaseApi\";\nimport ActionSavedDialog from \"./ActionSavedDialog\";\n\nconst ActionModal: React.FunctionComponent<any> = props => {\n let { id } = useParams();\n const location = useLocation();\n const navigate = useNavigate();\n let background = location.state && (location.state as TicketLocationState).background;\n const [previousPage] = React.useState<Location>(background);\n let goBack = () => {\n if (previousPage)\n navigate(previousPage);\n else\n navigate('/');\n };\n\n const [dialogVisible, setDialogVisible] = React.useState<boolean>(false);\n // const [expanded, setExpanded] = React.useState<boolean>(true);\n const maxHeight = Math.min(window.innerHeight - 200, 500);\n const [size, setSize] = React.useState<windowDims>({ w: Math.max(window.innerWidth - 200, 500), h: maxHeight });\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const resizing = (e: WindowMoveEvent) => {\n //console.log('resizing', e.width)\n setSize({ t: e.top, l: e.left, w: e.width, h: e.height })\n // setExpanded(e.width < 660 ? false : true);\n }\n\n const moving = (e: WindowMoveEvent) => {\n if (e.top !== size.t || e.left !== size.l) {\n //console.log('moving')\n setSize({ ...size, t: e.top, l: e.left })\n }\n }\n\n window.onresize = (e: UIEvent) => {\n console.log('window resizing')\n let popupWidth = window.innerWidth - 200;\n setSize({ w: popupWidth, h: undefined, t: undefined, l: undefined })\n\n // setExpanded(popupWidth < 660 ? false : true);\n }\n\n return (\n <>\n <Window onMove={moving} top={size.t} left={size.l} width={size.w} height={size.h} onResize={resizing} className='ticket-details' onClose={goBack} title={`${userProfile?.Phrases.Action || '...'} Note`} modal={true} >\n {dialogVisible && <ActionSavedDialog visible={dialogVisible} title={\"Success\"} ticketId={parseInt(id)} toggleDialog={goBack} viewDetails={() => navigate(`/deeplink?url=/calls/callhistory.aspx?call_id=${id}`)} />}\n <ActionForm ticketId={parseInt(id)} onSaved={() => setDialogVisible(true)} />\n <WindowActionsBar>\n <div className=\"flex m-2\">\n <div className='flex w-full'>\n\n </div>\n <div className='inline-block ml-1'>\n <Button onClick={() => { navigate('./details') }} form='action-form' type={\"submit\"} style={{ width: '150px', color: '#fff', background: userProfile?.Nav_Hex_Color }}>\n <img src='./images/Log-Ticket-White.png' className='inline mr-2 w-5' alt=\"Log Ticket\" />\n Save {userProfile?.Phrases.Action}\n </Button>\n </div>\n </div>\n </WindowActionsBar>\n </Window>\n </>\n );\n}\ntype windowDims = {\n w: number,\n h: number,\n t?: number,\n l?: number\n}\n\nexport default ActionModal;","import React from 'react'\nimport { Contacts } from './Contacts'\nimport './Contacts.scss'\n\nconst ContactsPage = () => {\n return (\n <div className='contacts-page'>\n <Contacts fullScreen={true} /></div>\n )\n}\n\nexport default ContactsPage;","import React from \"react\";\nimport { Suspense } from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport { ErrorBoundary } from \"../Common/ErrorBoundry\";\n\n//@ts-expect-error\nconst ChatPage = React.lazy(() => import(\"chat/ChatPage\"));\n\nexport default function ChatPageWrapper() {\n const { id } = useParams()\n return (\n <ErrorBoundary>\n <Suspense fallback={'Loading...'}>\n <ChatPage />\n </Suspense>\n </ErrorBoundary>\n )\n}\n","import { IChat } from '../../types/Chat/IChat';\nimport { IChatMessage } from '../../types/Chat/IChatMessage';\nimport { Api } from './BaseApi'\n\nconst ChatApi = Api.injectEndpoints({\n endpoints: (build) => ({\n // getChats: build.query<IChat[], void>({\n // query: (UId) => `Chat`,\n // providesTags: [\"Chat\"],\n // }),\n getChat: build.query<IChat, string>({\n query: (UId) => `Chat/${UId}`,\n providesTags: [\"Chat\"],\n }),\n getMessages: build.query<IChatMessage[], string>({\n query: (UId) => `Chat/${UId}/Message`,\n providesTags: [\"ChatMessages\"],\n }),\n\n }),\n})\n\n\nexport { ChatApi };","import React, { useEffect } from \"react\";\nimport { TicketPage } from \"../Ticket/TicketPage\";\nimport { useParams } from \"react-router-dom\";\nimport { ChatApi } from \"../../redux/api/ChatApi\";\nimport { SetDescription, SetEndUser, SetEndUserUid, SetEndUserName } from '../../slices/TicketSlice'\nimport { SetAction } from '../../slices/ActionSlice'\nimport { useReduxDispatch } from \"../../redux/hooks\";\nimport { UserApi } from \"../../redux/api/UserApi\";\nimport { IAction } from \"../../types/Ticket/IAction\";\nimport './LogTicketStyle.scss'\n\nconst LogTicketFromChat: React.FunctionComponent<any> = props => {\n const { chatUid } = useParams();\n const dispatch = useReduxDispatch();\n const { data: chat } = ChatApi.useGetChatQuery(chatUid, { skip: !chatUid });\n const { data: messages } = ChatApi.useGetMessagesQuery(chatUid, { skip: !chatUid });\n const { data: endUser } = UserApi.useGetUserQuery(chat?.EndUser_Uid, { skip: !chat?.EndUser_Uid });\n\n useEffect(() => {\n if (chat && endUser && messages) {\n //The ticket decswription should be the first messages from the end user until the agent responds\n const firstMessages = [];\n for (var i = 0; i < messages.length; i++) {\n if (i == 0 || messages[i].Contact_Id == messages[0].Contact_Id) {\n firstMessages.push(messages[i]);\n } else {\n break;\n }\n }\n const ticketDescription = firstMessages?.map((m, i) => m.Text).join('\\n');\n\n const actionNotes = '<div class=\"chat-window\"><div class=\"messages\">' + messages?.map((m, i) => {\n if (firstMessages.map(f => f.Id).indexOf(m.Id) < 0) { }\n const style = m.Is_Event ? 'event' : m.Contact_Id == chat.StaffContact_Id ? 'them' : 'me';\n\n return `<div class=\"${style}\">${m.Profile_Image ? '<img class=\"profile\" src=\"' + m.Profile_Image + '\" />' : ''}\n <div class=\"wrap\"><span class=\"time-stamp\">${new Date(m.Created).toLocaleString()}</span> -<span class=\"message-from\">${m.From ?? ''}</span><span class=\"message-text\">${m.Text}</div>\n </div>`;\n }).join('').replaceAll('\\n', '') + '</div></div>';\n\n\n console.log('actionNotes', actionNotes);\n\n ticketDescription && dispatch(SetDescription(ticketDescription));\n dispatch(SetEndUserUid(chat?.EndUser_Uid));\n dispatch(SetEndUserName(endUser.FullName));\n dispatch(SetEndUser(endUser));\n dispatch(SetAction({ HTML_Notes: actionNotes } as IAction));\n }\n\n }, [chat, endUser]);\n\n return (\n <>\n <TicketPage isModal={true} >\n </TicketPage>\n </>\n );\n}\n\nexport default LogTicketFromChat;","import React from 'react'\nimport { Route, Routes } from 'react-router-dom'\nimport TicketModal from '../Ticket/TicketModal'\nimport { RevelationsPage } from \"../RightBar/Revelations/RevelationsPage\";\nimport RevelationIframe from \"../Revelation/RevelationIframe\";\nimport Deeplink from \"../Nav/Deeplink\";\nimport Navbar from \"../Nav/NavBar\";\nimport { TicketPage } from \"../Ticket/TicketPage\";\nimport { FeedPage } from \"../RightBar/ActivityFeed/FeedPage\";\nimport ActionModal from \"../Action/ActionModal\";\nimport ContactsPage from \"../RightBar/Contacts/ContactsPage\";\nimport SignoutPage from '../Auth/SignoutPage';\nimport ChatPageWrapper from '../Chat/ChatPageWarpper';\nimport LogTicketFromChat from '../Chat/LogTicketFromChat';\nimport { TestPage } from '../Test/TestPage';\nexport const AppRoutes = () => {\n //These are external links that come from emails etc.\n const trustedRevelationRoutes = [\n \"/search/default.aspx\",\n \"/calls/callhistory.aspx\",\n \"/calls/opencalls.aspx\",\n \"/contacts/contactinfo.aspx\",\n \"/reports/loadreport.aspx\",\n \"/adminUX/DynamicUI/Default.aspx\",\n \"/kbase/default.aspx\",\n \"/dashboard/default.aspx\",\n \"/gameplan/dashboard.aspx\",\n ]\n let k = 1;\n return (\n <Routes>\n <Route path=\"/contacts\" element={<ContactsPage />} key={k++} />\n <Route path=\"/feed\" element={<FeedPage />} key={k++} />\n <Route path=\"/revelations\" element={<RevelationsPage />} key={k++} />\n\n <Route element={<Navbar />} key={k++}>\n {trustedRevelationRoutes.map(t => <Route path={t} key={k++} element={<Deeplink />} />)}\n <Route path=\"/\" element={<RevelationIframe />} key={k++} />\n <Route path=\"/deeplink\" element={<Deeplink />} key={k++} />\n <Route path=\"/ticket/edit/:Id/*\" element={<TicketPage isModal={false} index={2} key={k++} />}>\n {/* <Route path=\"\" element={<TicketPage isModal={false} index={2} />} /> */}\n <Route path=\":Id/*\" element={<TicketPage isModal={false} index={3} />} key={k++} />\n </Route>\n <Route element={<RevelationIframe />}>\n <Route path=\"/ticket/fromchat/:chatUid\" element={<LogTicketFromChat index={9} key={k++} />} />\n <Route path=\"/ticket/:id/action/*\" element={<ActionModal index={8} key={k++} />} />\n <Route path=\"/ticket/*\" element={<TicketModal index={9} />} key={k++} />\n <Route path=\"/ticket/modal/:Id/*\" element={<TicketModal index={10} key={k++} />} />\n {/* <Route path=\"/ticket/*\" element={<TicketModal index={6} />}/> */}\n </Route>\n <Route path=\"/chat\" element={<ChatPageWrapper />} key={k++} />\n <Route path=\"/chat/:id/*\" element={<ChatPageWrapper />} key={k++} />\n </Route>\n </Routes>\n )\n}\n","import { useEffect, useState } from \"react\";\nimport { createUserManager } from \"redux-oidc\";\nimport { useGetTenantQuery, useReleaselicenseMutation } from \"../../redux/api/BaseApi\";\nimport { useReduxSelector } from \"../../redux/hooks\";\nimport { trimChar } from \"../../utils/utils\";\nimport { Spinny } from \"../Nav/Spinny\";\nimport { oAuthSettings } from \"./AuthSettings\";\n\nconst SignoutPage = () => {\n const [releaseLicense] = useReleaselicenseMutation();\n const user = useReduxSelector((state) => state.auth.user);\n const { data: tenant } = useGetTenantQuery();\n\n const [frameLoaded, setFrameLoaded] = useState<boolean>();\n const logMeOut = async () => {\n\n await releaseLicense(null);\n //var user = await userManager.getUser();\n\n let settings = oAuthSettings;\n if (tenant?.Authority)\n settings.authority = tenant?.Authority\n\n //First release the current license, THEN release the token and redirect to the logout page.\n const userManager = createUserManager(settings);\n console.warn('Signing out', user.id_token);\n await userManager.signoutRedirect({ id_token_hint: user.id_token });\n };\n\n useEffect(() => {\n if (frameLoaded)\n logMeOut();\n }, [frameLoaded]);\n\n const iFrameLoaded = (e) => {\n //console.log('iFrameLoaded', e)\n setFrameLoaded(true);\n }\n\n\n return (\n <>\n <iframe className=\"hidden\" src={`${trimChar(tenant?.Tenant_Url, '/')}/OAuth/Signout`} onLoad={iFrameLoaded} ></iframe>\n {/* Logout animation */}\n <><Spinny text={frameLoaded ? 'Releasing license...' : 'Signing out of Revelation helpdesk...'} /></>\n </>\n );\n};\n\nexport default SignoutPage;\n","import \"./App.scss\";\nimport \"./fonts/fonts.css\";\nimport { Route, Routes, useNavigate } from \"react-router-dom\";\nimport { store } from './redux/store';\nimport { createUserManager, OidcProvider, loadUser } from 'redux-oidc';\nimport { useGetTenantQuery } from \"./redux/api/BaseApi\";\nimport { useEffect, useState } from \"react\";\nimport { oAuthSettings } from \"./components/Auth/AuthSettings\";\nimport { Log } from \"oidc-client-ts\";\nimport { useReduxSelector } from \"./redux/hooks\";\nimport { RevelationContext } from \"./context/RevelationContext\";\nimport { NoAuthServer } from \"./components/ErrorPages/NoAuthServer\";\nimport 'react-toastify/dist/ReactToastify.css';\nimport { ToastContainer } from \"react-toastify\";\nimport { AppRoutes } from \"./components/Routes/AppRoutes\";\nimport { Spinny } from \"./components/Nav/Spinny\";\nimport React from \"react\";\nimport { TestPage } from \"./components/Test/TestPage\";\nimport SignoutPage from \"./components/Auth/SignoutPage\";\n\nconst App = () => {\n const stateUser = useReduxSelector((state) => state.auth);\n const { data: tenant, isFetching, error: tenantNotFound } = useGetTenantQuery();\n const navigate = useNavigate();\n const [userManager, setUserManager] = useState(null)\n const [isAuthenticating, setAuthenticating] = useState(false)\n\n\n const signIn = async () => {\n let settings = oAuthSettings;\n if (tenant?.Authority)\n settings.authority = tenant?.Authority\n\n Log.setLevel(Log.DEBUG)\n let newUserManager = createUserManager(settings)\n let newUser = await newUserManager.getUser();\n\n console.log('signIn', newUser);\n\n\n //console.log('newUserManager.getUser', newUser);\n if (newUser == null || newUser.expired) {\n var returnUrl = window.location.pathname + window.location.search;\n console.log('newUserManager.signinRedirect', returnUrl)\n\n //This can take some time the first login, so show a spinner.\n setAuthenticating(true);\n await newUserManager.signinRedirect({ state: returnUrl }).catch((err) => {\n console.log('oops', err)\n navigate(`/error/noauth?authority=${tenant?.Authority || oAuthSettings.authority}`)\n });\n setAuthenticating(false);\n\n return;\n }\n else {\n await loadUser(store, newUserManager); //Loads potentially existing user data into the redux store, thus eliminating a new authentication roundtrip to the authentication server when a tab is closed or a new tab is opened.\n //await newUserManager.storeUser(loadedUser);\n\n }\n setUserManager(newUserManager);\n\n }\n\n useEffect(() => {\n if (tenant || tenantNotFound) {\n\n signIn().catch((err) => {\n console.log('oops', err)\n\n navigate(`/error/noauth?authority=${tenant?.Authority || oAuthSettings.authority}`)\n\n });\n\n }\n }, [tenant, tenantNotFound])\n\n\n console.log('App.tsx Authenticating?', userManager, stateUser, isAuthenticating)\n if (isAuthenticating) return <Spinny text=\"Authenticating....\" />\n\n if (!userManager || !stateUser?.user)\n return <></>\n\n return (\n <>\n <Routes>\n {/* microfrontend test */}\n <Route path=\"/signout\" element={<SignoutPage />} />\n <Route path=\"/error/noauth\" element={<NoAuthServer />} />\n <Route path=\"*\" element={<OidcProvider store={store} userManager={userManager}>\n <RevelationContext>\n <AppRoutes />\n <ToastContainer />\n </RevelationContext>\n </OidcProvider>} />\n </Routes>\n </>\n );\n};\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import { User } from 'oidc-client';\nimport { CallbackComponent, createUserManager } from 'redux-oidc';\nimport { useGetTenantQuery } from '../../redux/api/BaseApi';\nimport { oAuthSettings } from './AuthSettings';\n\nconst CallbackPage = () => {\n console.log('CallbackPage');\n const { data: tenant, isFetching, error } = useGetTenantQuery();\n let settings = oAuthSettings;\n if (tenant?.Authority)\n settings.authority = tenant?.Authority\n\n const successCallback = (user: User) => {\n console.log('successCallback', user);\n window.location.href = user.state ? user.state : \"./\";\n //window.location.href = \"./\";\n };\n const authManager = createUserManager(settings);\n const errorCallback = (error) => {\n console.error('errorCallback', error);\n //try re-authenticate\n authManager.signinRedirect();\n };\n if (!error && (isFetching || tenant == null)) {\n //console.log('settings not ready yet', settings, error, tenant, isFetching);\n return <></>\n } else {\n //console.log('settings ready')\n }\n\n console.log('CallbackPage authManager', authManager);\n return (\n <CallbackComponent userManager={authManager} successCallback={successCallback} errorCallback={errorCallback} >\n <></>\n </CallbackComponent>\n )\n}\n\nexport default CallbackPage;","import { processSilentRenew } from 'redux-oidc';\n\nconst SilentRenewPage = () => {\n //testing\n processSilentRenew();\n\n return <></>\n}\n\nexport default SilentRenewPage;","import { ApplicationInsights, ITelemetryItem } from '@microsoft/applicationinsights-web';\nimport { ReactPlugin } from '@microsoft/applicationinsights-react-js';\nimport { Constants } from '../Variables/StaticVariables';\n\nconst reactPlugin = new ReactPlugin();\nconst appInsights = new ApplicationInsights({\n config: {\n connectionString: Constants.appInsightsInstrumentationKey,\n extensions: [reactPlugin],\n enableAutoRouteTracking: true,\n disableAjaxTracking: false,\n autoTrackPageVisitTime: true,\n enableCorsCorrelation: true,\n enableRequestHeaderTracking: true,\n enableResponseHeaderTracking: true,\n }\n});\n\nif (Constants.appInsightsInstrumentationKey) {\n appInsights.loadAppInsights();\n\n console.log('App Insights loaded', appInsights.config);\n\n appInsights.addTelemetryInitializer((env: ITelemetryItem) => {\n env.tags = env.tags || [];\n env.tags[\"ai.cloud.role\"] = document.location.hostname;\n });\n}\nexport { reactPlugin, appInsights };","import React from 'react';\nimport { render } from \"react-dom\";\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\nimport { store } from './redux/store'\nimport { Provider } from 'react-redux'\nimport { BrowserRouter, Route, Routes } from 'react-router-dom';\nimport TimeAgo from 'javascript-time-ago'\nimport en from 'javascript-time-ago/locale/en.json'\nimport CallbackPage from './components/Auth/CallbackPage';\nimport SilentRenewPage from './components/Auth/SilentRenewPage';\nimport { NoAuthServer } from \"./components/ErrorPages/NoAuthServer\";\nimport { AppInsightsContext } from '@microsoft/applicationinsights-react-js';\nimport { reactPlugin } from './utils/ApplicationInsights';\n\nTimeAgo.addDefaultLocale(en)\n\nconst root = document.getElementById(\"root\");\nrender(\n <React.StrictMode>\n <AppInsightsContext.Provider value={reactPlugin}>\n <Provider store={store}>\n <BrowserRouter basename={process.env.PUBLIC_URL}>\n <Routes>\n {/* For OAuth */}\n <Route path=\"/signin-callback\" element={<CallbackPage />} />\n <Route path=\"/silent-renew\" element={<SilentRenewPage />} />\n <Route path=\"/error/noauth\" element={<NoAuthServer />} />\n <Route path=\"*\" element={<App />} />\n </Routes>\n </BrowserRouter >\n </Provider >\n </AppInsightsContext.Provider>\n </React.StrictMode>,\n root\n);\n\n//<BrowserRouter basename='/NewUx'>\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"names":["CountSlice","createSlice","name","initialState","value","reducers","IncreaseCount","state","action","payload","DecreaseCount","actions","quickSearchResults","quickSearchingFlag","quickSearchInput","contextMenuOpen","NavSlice","NavInitialState","updateQuickSearchResults","toggleQuickSearchingFlag","updateQuickSearchInput","setContextMenuOpen","Constants","stsAuthority","clientId","clientRoot","window","location","origin","process","clientScope","apiRoot","appInsightsInstrumentationKey","REACT_APP_APPLICATION_INSIGHTS_CONNECTION","REVELATION_IFRAME","Api","createApi","reducerPath","baseQuery","fetchBaseQuery","baseUrl","prepareHeaders","async","headers","_ref","_auth$user","getState","token","auth","user","access_token","set","concat","tagTypes","endpoints","build","getTenant","query","tenantUid","revTenantCookie","Cookies","document","host","providesTags","renewlicense","mutation","url","method","releaselicense","getAssContactConfig","clientTypeId","getSLAList","_ref2","projectId","priorityId","getPriorityList","prioritySetId","getProjectAssignment","getAssociatedContacts","ticketId","getUserProfile","uid","console","log","invalidateProfile","queryFn","data","invalidatesTags","updateFocusedViewToggle","info","body","Collapsed","onQueryStarted","_ref3","dispatch","queryFulfilled","postResult","util","updateQueryData","undefined","draft","Nav_Collapsed","undo","getTicketTimelineImage","Accept","responseHandler","reader","FileReader","Promise","resolve","reject","onload","base64data","result","onerror","err","response","blob","then","readAsDataURL","getTimelineImage","_ref4","slaId","getForm","formId","getFormConfig","getFormByProject","_ref5","companyId","locationId","getPriority","getSLA","getSearchType","getProject","Id","getUserFyndConfig","getUsers","_ref6","postUserFynd","SearchPhrase","postSearchQuick","updateSearchType","_ref7","selectOption","find","item","ID","checkAllBoolTrue","every","ele","Checked","length","forEach","useGetTicketTimelineImageQuery","useReleaselicenseMutation","useRenewlicenseMutation","useGetUserProfileQuery","useGetSearchTypeQuery","useUpdateSearchTypeMutation","usePostSearchQuickMutation","useGetTenantQuery","useUpdateFocusedViewToggleMutation","UserApi","injectEndpoints","getUsersByIds","Ids","getUserById","id","getStaff","teamId","includeQueues","includeStaffPlusForCompanyId","getMention","prefix","getMentionConfig","getContacts","props","favsOnly","filter","pageLetter","groupByOffice","getUser","debugTimezone","getTeams","getTeam","getLogOptions","getRoles","getSetting","settingId","saveSetting","setting","getClientTypeFilters","getUserClassification","postLogOptions","options","postClientTypeFilter","dismissIntro","featureId","overrideExisting","ProjectApi","getProjectList","getProjectTypeList","getWorkstreams","initialTicketState","Call_Desc","Company_Id","Project_Id","SLA_Id","Priority_Id","Company_Contact","Company_Address_Id","Assigned_Team_Id","CustomFormId","Contact_Name","Bulk_Contact_Ids","Start_Date","End_Date","MergeActionsFromCallId","MergeActionsIds","TicketSlice","ticket","features","selectedProject","selectedPriority","defaultTeamId","bulkLog","logOptions","formState","TaggedUsers","mentionFocused","splitFromTicketOptions","lastFlaggedNoteConfirmedId","SetLastFlaggedNoteConfirmedId","SetSplitOptions","_action$payload","_action$payload2","TicketId","SetBulkLog","SetTemplate","_action$payload3","Template_Id","SetTemplatePopulated","Template_Populated","SetFormState","SetTicket","SetWorkstreamAssignment","Workstream_Assignment","SetLogOptions","LogOptions","SetMyOptions","SetDueDate","Due_Dt","toISOString","SetForm","_action$payload4","_action$payload5","_action$payload6","_action$payload7","_state$ticket$CustomF","CustomFormName","Name","CustomFormFields","Fields","map","ff","VALUES","_ff$ConfigSettings$De","newValues","ConfigSettings","Default","split","_ff$ConfigSettings$De2","Field_Type_Id","DefaultValue","toString","_defVal","defVal","replace","isNaN","f","SetField","_state$ticket$CustomF2","foundField","UID","Last_Update_Dt","Date","SetClient","SetType","Type_Id","SetStatus","_action$payload8","_action$payload9","_action$payload10","Call_Status","Call_Status_Id","Open_Status","Open_status","SetAssigned","_action$payload11","Call_Assignment","m","F_Name","L_Name","Full_Name","Contact_Id","SetAutoCloseSetting","AutoCloseSettings","SetAutoOpenSetting","AutoOpenSettings","SetBulkContacts","_action$payload12","SetAssociatedContacts","_action$payload13","Associated_Contact_Ids","SetProject","_action$payload14","_action$payload15","_action$payload16","_action$payload17","_action$payload18","SLAs","Default_SLA_Id","Priority_Set_Id","Default_Priority_Id","Is_Workstream","Workstream_Enabled","SetWorkstream","_action$payload19","_action$payload20","WorkstreamId","Workstream_Id","WorkstreamName","Workstream_Name","SetEffort","Effort_Mins","SetStartDate","SetEndDate","SetSLA","SLA_ID","SetPriority","_action$payload21","SetTeam","SetAssets","Assets","SetLinkedKbs","Linked_Kb_Ids","SetEndUserName","SetEndUser","_action$payload22","_action$payload23","_action$payload24","_action$payload25","_action$payload26","_action$payload27","Company_Name","Company_Type_Id","Address_Name","SetEndUserUid","Company_Contact_Uid","SetDescription","SetTaggedDescription","TaggedDescription","SetMentionFocused","SetTaggedUsers","ResetTicket","_state$ticket","SetHierarchy","IsParent","Is_Parent","Parent_Call_Id","Parent_Ticket_Id","extraReducers","builder","addMatcher","matchFulfilled","Features","Your_Team_Log_A_Ticket","Team_Id","prim","proj","Primary_Project","Timeline_Open","push","Action_Open","Log_Ticket_Collapsed","initialActionState","initialUiSettings","Bill_Time_Enabled","NonBill_Time_Enabled","ActionSlice","settings","ResetAction","SetAction","SetBill","Billable_Time","SetNonBill","Non_Billable_Time","SetUISettings","SetHTML_Notes","HTML_Notes","actionTypeId","Private_Actions","Private_Notes_Always_On","Staff_Id","Default_Time","Action_Type_Id","FileSlice","files","ResetFiles","SetFiles","FeedSlice","feedItems","LastId","SetFeedItems","FavoriteSlice","favorites","saveFavorites","toggleState","RightBarSlice","RightBarInitialState","updateToggleState","KBSlice","results","selectKbs","previewKbId","SetResults","SetPreview","RevelationIframeSlice","isFirstIframeRequest","currentIframeSrc","iFrameLoading","mimicUid","uniqueId","setIframeLoaded","updateIframeSrc","indexOf","nanoid","mimicUser","cancelMimic","setFirstIframeRequest","rtkQueryErrorLogger","api","next","isRejectedWithValue","warn","status","dynamicMiddlewaresInstance","createDynamicMiddlewares","staticReducers","kb","KBReducer","FileReducer","ticketDetails","TicketReducer","actionDetails","ActionReducer","oidcReducer","rightBar","RightBarReducer","nav","NavReducer","count","CountReducer","feed","FeedReducer","favs","FavoriteReducer","revI","RevelationIframeReducer","reducer","store","configureStore","devTools","middleware","getDefaultMiddleware","serializableCheck","enhancer","ChatApi","ChatSlice","SignalRMiddleware","replaceReducer","combineReducers","addMiddleware","setupListeners","oAuthSettings","authority","client_id","redirect_uri","protocol","hostname","port","silent_redirect_uri","automaticSilentRenew","post_logout_redirect_uri","response_type","scope","validateSubOnSilentRenew","includeIdTokenInSilentRenew","silentRequestTimeoutInSeconds","useReduxDispatch","useDispatch","useReduxSelector","useSelector","Spinny","_jsxs","_Fragment","children","_jsx","className","alt","src","text","PartialSpinny","style","zIndex","z","SimpleSpinny","RevUserContext","createContext","ErrorCard","Card","margin","type","CardBody","CardTitle","message","Scrollbars","autoHeight","autoHeightMin","details","CardActions","color","Button","themeColor","size","icon","onClick","reload","Link","to","RevelationContext","stateUser","profile","error","skip","createUserManager","signoutRedirect","JSON","stringify","Tenant_Uid","Provider","position","NoAuthServer","params","useSearchParams","useNavigate","get","AssetApi","getAssets","contactId","TicketApi","getTypeList","parentId","getSLAConfig","getTicket","populateFormData","getOpenTickets","getStatuses","getMyStatuses","getStatus","getOpenEndUserTickets","Uid","getOpenParentTickets","getQuickNotes","getQuickNoteAsAction","getMyTemplates","getTemplateActions","getTemplateAssignment","getTemplate","getStopwatches","startStopwatch","stopStopwatch","createTicket","bulkLogTicket","actionsById","refetchQuicknotes","myLogOptions","useGetLogOptionsQuery","userProfile","saveLogOptions","usePostLogOptionsMutation","useMemo","Phrases","CallPhrase","values","setValues","useState","opened","setOpened","useEffect","defaultOptions","o","_logOptions$Options","Options","_myLogOptions$Options2","_myLogOptions$Options","Close","DropDownList","onFocus","onBlur","title","v","join","textField","itemRender","li","itemProps","foundItem","dataItem","itemChildren","checked","onMouseDown","e","preventDefault","React","width","marginLeft","onChange","event","newArray","splice","n","newOptions","mustPin","closeTicket","Pin","trimChar","str","ch","start","end","substring","isDate","date","valueOf","AddTextAndItemsAttrToHamburgerItems","Nav_Items","item1","Text","items","item2","item3","item4","n4","getTicketStateClassName","toLowerCase","toDigital","minutes","negativeBrackets","convert","digital","Math","floor","toFixed","padStart","_props$data","idGetter","getter","SELECTED_FIELD","setFilter","tenant","primaryCol","sort","setSort","field","dir","ticketSelected","onTicketSelected","setSelectedState","selectedState","selectedTicketId","TextBox","newFilter","logic","filters","operator","placeholder","Grid","onSelectionChange","newSelectedState","getSelectedState","dataItemKey","dataItems","startRowIndex","sortable","onSortChange","selectable","enabled","selectedField","orderBy","filterBy","GridColumn","cell","fieldValue","Checkbox","radioGroup","syntheticEvent","target","Tenant_Url","formatDate","Client","Project","isChild","parentTickets","isLoading","useGetOpenParentTicketsQuery","isParent","childTicketLabel","PanelBar","expandMode","PanelBarItem","selected","expanded","label","TicketGrid","useGetOpenEndUserTicketsQuery","clientTickets","useGetOpenTicketsQuery","GridColumnOptions","columns","setColumns","columnsExpanded","setColumnsExpanded","filterExpanded","setFilterExpanded","oneVisibleColumn","c","show","GridColumnMenuSort","GridColumnMenuFilter","onExpandChange","GridColumnMenuItemGroup","GridColumnMenuItem","iconClass","onMenuItemClick","GridColumnMenuItemContent","onSubmit","onColumnsSubmit","onCloseMenu","onReset","newColumns","col","column","idx","readOnly","disabled","onToggleColumn","htmlFor","userSelect","AssetGrid","userGridState","useGetSettingQuery","persistedSettingId","useSaveSettingMutation","currentIds","selectedAssets","useGetAssetsQuery","bindData","d","Device","orderIndex","Manufacturer","Model","SerialNumber","Memory","Processor","AssetCustom1","AssetCustom2","AssetCustom3","AssetCustom4","AssetCustom5","userStateFromSettings","Big_String_Value","parse","userState","take","userColumns","_userState$columns","_userState$columns2","userColIndex","uc","dataState","setDataState","stateColumns","setStateColumns","columnsState","persistUserState","Setting_Id","columnsToRender","Column","columnMenu","GridColumnMenuGroup","newState","onDataStateChange","onColumnReorder","groupable","pageable","reorderable","pageSize","locked","rowType","textAlign","ass","_props$selectedAssets","found","a","assetSelected","_ticket$Assets","_ticket$Assets2","_ticket$Assets3","assets","contactAssets","locationAssets","selectedAssetIds","Asset_Id","selectedLocationAssetCount","selectedContactAssetCount","Call_Id","Asset","Timeline","imageData","useGetTimelineImageQuery","FieldWrapper","Label","editorId","editorValid","valid","editorDisabled","optional","DateField","_field$VALUES","_field$ConfigSettings","others","wrapper","useRef","fieldChange","Display","DateTimePicker","ref","DatePicker","popupSettings","appendTo","current","popupClass","formRenderProps","_field$ConfigSettings2","_field$ConfigSettings3","_field$ConfigSettings4","touched","activeItems","Enabled","currentValues","i","maxDepth","MaxDepth","parentItems","Parent_UID","topLevelOptions","setTopLevelOptions","isOpen","select","secondLevelOptions","setSecondLevelOptions","thirdLevelOptions","setThirdLevelOptions","fourthLevelOptions","setFourthLevelOptions","fifthLevelOptions","setFifthLevelOptions","fieldChanged","multiFieldChanged","parentChanged","secondLevelChanged","thirdLevelChanged","_topLevelOptions$valu","_secondLevelOptions$v","fourthLevelChanged","_topLevelOptions$valu2","_secondLevelOptions$v2","_thirdLevelOptions$va","fifthLevelChanged","_topLevelOptions$valu3","_secondLevelOptions$v3","_thirdLevelOptions$va2","_fourthLevelOptions$v","blur","level","open","option1","option2","option3","option4","option5","level2Items","s","level3Items","level4Items","level5Items","select2","Value","select3","select4","select5","defaultItem","MultiSelect","onOpen","onClose","format","Decimal","minVal","MinValue","maxVal","MaxValue","currentValue","NumericTextBox","defaultValue","spinners","min","max","Hint","direction","setValue","currentField","setCurrentField","Max","handleChange","blurry","changeField","TextArea","maxLength","rows","Input","ClientApi","getClient","getMyClients","getClientList","companyTypeId","getClientTypes","getOffice","validationMessage","hint","multiSelect","Array","isArray","toInteger","ClientType","clients","useGetClientListQuery","listControl","ClientField","ClientList","_bindStaff","_bindStaff2","addSelect","showMe","currentUserTop","staff","useGetStaffQuery","bindStaff","x","y","StaffField","parseInt","StaffList","mins","time","setTime","newVal","strMin","strHour","substr","padEnd","hours","toMinutes","_e$target$value","TimeField","Time","EndUserField","defClientId","DefaultCompany","defClient","users","isFetching","usersLoading","useGetUsersQuery","clientList","loading","showHint","labelValid","hintId","errorId","description","Description","Show_Tooltip","tool","Error","Field","component","renderField","TextField","DropdownField","NumericField","fields","form","useGetFormQuery","fieldWidth","Columns","parentStyle","Direction","FormField","clientTypeFilters","useGetClientTypeFiltersQuery","badgeCount","clientTypes","Client_Type_Filter_Disabled","useGetClientTypesQuery","myClientTypeIds","my","clientTypePhrase","ct","Company_Type_Name","BadgeContainer","formNoValidate","Badge","align","horizontal","vertical","newUserId","setNewUserId","newUser","refetch","useGetUserByIdQuery","classification","useGetUserClassificationQuery","ifameProps","setIfameProps","visible","profileIsLoading","userCreated","Field_Name","displayName","FullName","messageListener","_e$data","_e$data2","messageObj","addEventListener","removeEventListener","svgIcon","plusIcon","EndUser","pencilIcon","Window","initialWidth","initialHeight","SvgIcon","userIcon","modal","onLoad","_props$bulkContactIds","endUserId","hideOptions","requiredMessage","useGetUserFyndConfigQuery","postSearch","usePostUserFyndMutation","useGetMyClientsQuery","niceColumns","Display_Name","header","clientOpen","setClientOpen","userOpen","setUserOpen","userFilter","setUserFilter","filteredUsers","slice","u","Address_Line_1","Bus_Phone","Title","Custom1","Custom2","Custom3","Custom4","Custom5","Custom6","Company_Abbrev","filteredClients","selectedClient","selectedUser","sortedUsers","Secondary_Sort","b","Secondary_Sort_Direction","localeCompare","combo","focus","onClientChange","endUserColumns","showValidationMessage","isValid","filterButton","Show_Client_Type_Filter","FilterButton","filterClicked","Bulk_Call_Logging","BulkLogButton","bulkContactIds","toggleBulkLogging","addEditUser","Add_Edit_EndUSer_From_LogACall","UserDetailsModal","newEndUser","UserFynd","MultiColumnComboBox","dangerouslySetInnerHTML","__html","display","onFilterChange","filterable","required","isRequired","ComboBox","suggest","config","useGetSLAConfigQuery","slas","fetchingSLAs","useGetSLAListQuery","selectedSLA","useGetSLAQuery","defaultSLA","slaColumns","Multi_SLA_List_Option","statusId","autoOpenSettings","autoCloseSettings","useGetMyStatusesQuery","defaultStatusOrCurrent","Statuses","ss","Open_Default","defaultStatusIdOrCurrent","selectedStatus","t","stat","setShow","offSet","left","top","autoCloseStatus","setAutoCloseStatus","autoCloseDate","setAutoCloseDate","anchor","statusItems","_t$Statuses","showDatePrompt","setShowDatePrompt","toggleDialog","curValue","nativeEvent","Popup","offset","Menu","onSelect","Auto_Status_Interval","Auto_Close_Date","ReactTimeAgo","Auto_Open_Date","Dialog","DialogActionsBar","projects","projectLoading","useGetProjectListQuery","Unlimited_Ret","availableTime","Available_Time","sortedProjects","Project_Name","priorities","useGetPriorityListQuery","priorityChangeHandler","assContactIds","associatedUsers","useGetUsersByIdsQuery","assContactConfig","useGetAssContactConfigQuery","endUsers","globalContactsIds","setGlobalContactIds","selectedId","setSelectedId","endUsersFormatted","setDisplayName","associatedUsersFormatted","Secondary_User_Classification","handleToolBarClick","toolName","g","Global","ListBox","height","onItemClick","toolbar","ListBoxToolbar","tools","onToolClick","teams","useGetTeamsQuery","selectedTeam","allTeams","Dept_Name","assignedStaff","staffList","staffLoading","staffFiltered","setStaff","_staffList2","_staffList3","_staffList","typeId","typesList","useGetTypeListQuery","getSelectedPath","path","currentType","parentType","Parent_Id","Call_Type","selectedPath","fillLevelTypes","tf","typeItems","l","Level","popRef","dropRef","onclick","_popRef$current","_dropRef$current","element","contains","collision","dropdownFieldValidator","numberFieldValidator","validateCustomFields","validators","Is_Required","Required_To","validMsg","endUserFieldValidator","dateFieldValidator","ticketIds","tid","viewDetails","roles","useGetRolesQuery","defaultRole","r","Default_Role","selectedRole","Role_id","maxWidth","Setting","SystemApi","getHours","getStartEnd","actionDate","startEnd","useGetStartEndQuery","timeInterval","Int_Value","minTime","Bool_Value","Item1","maxTime","Item2","selectedDate","steps","minute","processTreeData","selectField","expandField","subItemsField","filtering","Boolean","mapTree","includes","extendDataItem","expandedState","nextExpanded","itemKey","index","listenForMessage","ev","dataObject","Message","onSave","quickNoteId","quickNotes","useGetQuickNotesQuery","useRefetchQuicknotesMutation","selectedQuickNote","q","QuickNotes","qn","setExpanded","setOpen","popupVisible","setPopupVisible","treeData","newId","setNewId","DropDownTree","oldVal","Add_Quick_Note","AddQuickNote","quickNoteSaved","actionId","isBill","onStart","onStop","onTick","stopwatches","useGetStopwatchesQuery","useStartStopwatchMutation","useStopStopwatchMutation","runningWatches","Is_Bill","IsTicking","isRunning","timer","setTimer","interval","setInterval","clearInterval","ActionId","IsBill","unwrap","confirm","ARROWS","up","right","down","Mentions","handleOnClick","containerRef","isError","useGetMentionQuery","scrollIndex","setScrollIndex","handleNavigation","defaultBehavior","behavior","mention","Object","key","at","getElementById","scrollIntoView","useEventListener","iframe","querySelector","div","contentDocument","sideLength","getImageLength","img_class","person","liStyle","cmp","abs","onMouseEnter","img","team","CallDescToTaggedDescriptionConverter","callDesc","taggedUsers","newDesc","tag","newValue","ShowMentions","mentionsText","minChars","MentionsHandleOnChange","eType","setAtActivated","setMentionsText","atActivated","val","newE","html","atRegex","RegExp","maxRegex","spaceBreakRegex","atRegexMatch","test","maxRegexMatch","spaceBreakMatch","valMatch","match","setActive","res","trim","TextEditor","useGetMentionConfigQuery","Min_Chars","mentionsProps","endOfString","prefixHTML_Notes","suffixHTML_Notes","newHTML_Notes","newTaggedUsers","MentionsHandleOnClickForTextEditor","Bold","Italic","Underline","Strikethrough","AlignLeft","AlignCenter","AlignRight","AlignJustify","OrderedList","UnorderedList","Undo","Redo","FontSize","FontName","FormatBlock","Unlink","ViewHtml","EditorTools","Editor","onMount","iframeDocument","dom","ownerDocument","createElement","appendChild","createTextNode","head","ACTION_LOWERCASE","ActionNoteTextEditor","_userProfile$Features","_userProfile$Features2","_userProfile$Features3","_userProfile$Features4","_userProfile$Features5","_userProfile$Features6","_userProfile$Features7","_userProfile$Features8","_userProfile$Features9","useGetStatusQuery","addTimeSettings","canAddTime","Allow_Add_Time","warning","author","setQuickNoteId","Quick_Note_Id","quickNote","useGetQuickNoteAsActionQuery","fireUpdate","stopwatchTicked","delta","getTime","Start_Dt","stopwatchStarted","note","toLocaleString","stopwatchStopped","Stop_Dt","_quickNote$Action_Not","newAction","Is_Private_Action","Action_Notes","replaceAll","Show_Author","Role_Id","Role","UId","RoleList","_e$value","Action","Set_Action_Date","Action_Dt","_e$value2","ActionDate","Non_Bill_Time","Display_Stopwatch","Stopwatch","Bill_Min","Pinned_Actions","Pinned","Skip_Action_Notifications","SkipActionEmail","clientTypeIds","selectClientTypes","ClientTypeFilter","saveClientTypeFilter","usePostClientTypeFilterMutation","currentTypeIds","newIds","cur","ClientTypeList","bulkUsers","bulkUsersFormatted","Set","customProp","textAreaRef","selectionStart","whole","prefixCallDesc","suffixCallDesc","newCallDesc","DefaultMentionsHandleOnClick","DESCRIPTION_LOWERCASE","TicketDescription","JsonTreeViewer","renderJsonData","R","this","JSONTree","theme","shouldExpandNode","render","_props$value","workstreams","useGetWorkstreamsQuery","prettyWorkStreams","w","_Date","_Date2","StartDt","toLocaleDateString","EndDt","Project_Available_Time","projectTimeRemaining","WorkstreamList","effort","assignmentChanged","_staff$find","_staff$find2","Assigned_Percent","Assigned_Mins","_e$target","_e$target$className","_e$target2","_e$target2$className","paddingRight","paddingLeft","currentTarget","stopPropagation","percent","currentStaff","foundIndex","findIndex","autoFocus","FlaggedNotes","contact","contactFetching","office","officeFetching","useGetOfficeQuery","client","clientFetching","useGetClientQuery","confirmFlaggedNotes","clientNotes","Flag_Notes","Notes","officeNotes","contactNotes","Display_Notes","Popup_Flagged_Notes","Notification","backgroundColor","border","boxShadow","borderRadius","padding","fontSize","verticalAlign","closable","Icon","SECTION_REQUIRED","confirmDialogProps","setConfirmDialogProps","useParams","searchParams","debug","templateId","endUserUId","parentCallId","splitTicketId","splitActionIds","navigate","initialAction","formData","formIsLoading","useGetFormByProjectQuery","newTicketEndUser","userLoading","useGetUserQuery","existingTicket","ticketIsLoading","useGetTicketQuery","customFormConfig","useGetFormConfigQuery","projectIsLoading","useGetProjectQuery","defaultProjectAssignment","defAssignmentLoading","useGetProjectAssignmentQuery","useGetPriorityQuery","statuses","useGetStatusesQuery","quickNoteStatus","Quick_Note_Status_Id","quickNotePriority","Quick_Note_Priority_Id","timelineTitle","SLA_Code","SLA_Response_Time","SLA_Resolve_Time","postTicket","savingTicket","saveTicketError","useCreateTicketMutation","savingBulkTicket","bulkSaveTicketError","useBulkLogTicketMutation","somethingLoading","Quick_Note_Type_Id","Project_Default_Assignment","clientChangeHandler","endUserChangeHandler","_e$Contact_Name","_e$Contact_Name$repla","dueDateChanged","projectChangeHandler","project","teamChangeHandler","slaChangeHandler","typeChanged","assignedChangeHandler","associatedChangeHandler","bulkChangeHandler","divErrorRef","ResetForm","wrapper2","customFormTop","Custom_Forms_Enabled","Log_Call_Orientation","customFormBottom","handleSelect","expandedItems","requiredStyleClass","Nav_Hex_Color","TicketSavedDialog","Form","_initialAction$HTML_N","_saveTicket$Bulk_Cont","saveTicket","Actions","saveMethod","newTicketIds","raiseTicketSaved","ticketSaved","myOptions","viewDetailsURL","viewTicketDetails","currentProps","catch","originalStatus","validator","_ticket$LogOptions","_ticket$Call_Desc","_ticket$Call_Desc$tri","_ticket$Workstream_As","_ticket$Workstream_As2","closeTicketValidation","customFieldValidators","formValidator","keys","typeRequired","Call_Types","Ticket_Type_Required_To_Log","Ticket_Type_Required_To_Close","actionRequired","reduce","endUser","VALIDATION_SUMMARY","ignoreModified","initialValues","due","_saveTicketError$data","_bulkSaveTicketError$","FormElement","errors","isControlled","assign","BulkContacts","IsActive","Contact","AssociatedContacts","ProjectList","StatusList","Type","TypeList","Show_Team_Filter","Team","TeamList","WorkstreamAssignment","AssignedStaff","Multi_SLA","SLA","SLAList","Priority","PriorityList","Workstream","workstream","workstreamStart","workstreamEnd","TicketWorkstream","customform","CustomForm","focused","parentExpanded","ActionNote","TemplateList","template","useGetTemplateQuery","templates","useGetMyTemplatesQuery","selectedTemplate","Call_Template_Name","hasDescription","FileApi","isActive","getFiles","primaryId","getFileSettings","deleteFile","refetchFiles","FileType","isFileActive","useIsActiveQuery","useGetTemplateActionsQuery","initialDataState","Bill_Time","processWithGroups","newDataState","setGroupIds","group","setResultState","resultState","isWorkflow","compare","Step_Order","total","headerClassName","headerCell","Call_Templates","Workflow","TemplateActions","IsWorkflow","KB_ID","previewKBId","setPreviewKBId","colSpan","href","kbResults","KBPreview","_ticket$Linked_Kb_Ids","linkedKbs","kbSelected","setToken","setError","revUploadUrl","Primary_Id","isDeleting","useDeleteFileMutation","apifiles","useGetFilesQuery","useRefetchFilesMutation","fileSettings","useGetFileSettingsQuery","maxFilesReached","Max_Files","mountedRef","setFiles","f1","extension","progress","newFiles","File_Name","Length","lastIndexOf","getToken","Max_Size","Upload","batch","multiple","saveHeaders","withCredentials","onAdd","Prohibited","onRemove","alert","affectedFiles","onBeforeUpload","_fileSettings$Prohibi","additionalData","fileTooBig","fileProhibited","autoUpload","saveUrl","showActionButtons","onProgress","onStatusChange","_event$response","_event$response2","_event$response2$resp","_event$response3","_event$response3$resp","_event$response4","_event$response4$resp","FileUpload","KBApi","searchKB","splitOptions","getSplitActions","useActionsByIdMutation","setActions","_splitFromTicketOptio","_splitFromTicketOptio2","_splitFromTicketOptio3","existingTickets","templateActions","Status_Id","useLocation","isSelected","route","pathname","badge","separator","endsWith","View_Assets","Asset_Manager","View_KB","KnowledgeBase","image","_template$Assignment","decodeURIComponent","Sub_Type_Id","Assignment","newAssigned","useSearchKBMutation","wordCount","setWordCount","currentWordCount","EndUserId","fetchResults","Drawer","mode","mini","DrawerItem","maxHeight","itemTarget","DrawerContent","Routes","Route","Templates","TicketDetails","ExistingTickets","TicketHierarchy","TicketAssets","Attachments","SplitActions","WindowActionsBar","background","TicketPage","previousPage","goBack","setSize","innerWidth","h","innerHeight","onresize","popupWidth","tIds","ticketTitle","fillMode","modalWindow","isModal","onMove","onResize","stage","TicketDrawer","nonModalForm","FavoriteApi","getUserFavorites","saveFavorite","fav","getFavoriteConfig","saveFavoriteConfig","sortFavorite","order","sortFavCategories","deleteFavorite","favId","invalidateFavorites","USER_TIMEZONE","REVELATIONS_COLLAPSED_STATE","HeaderMenu","anchorAlign","_props$options$find","itemClicked","openOnClick","hoverCloseDelay","_o$icon","MenuItem","link","Revelations","mainProps","useContext","sortedData","menuProps","setMenuProps","editItem","setEditItem","collapsedItems","useGetUserFavoritesQuery","useSaveFavoriteMutation","sortFavorites","useSortFavoriteMutation","sortFavoriteCategories","useSortFavCategoriesMutation","useDeleteFavoriteMutation","headerMenu","setHeaderMenu","itemsToRender","setItemsToRender","categoryIds","Category_Order","Category_Id","newRenderData","cid","_children","Order","Category_Name","imageUrl","Category_Image_Url","expandedSet","collapsedArray","headerRef","loadRevPage","deeplink","relativeURL","Url_Format","Key_Value_1","Key_Value_2","Key_Value_3","Key_Value_4","Key_Value_5","Key_Value_6","Key_Value_7","Key_Value_8","RenderItem","attributes","forwardRef","editText","setEditText","cursor","suffix","InputSuffix","newData","gotoFavorite","navigateTo","fullScreen","oldProps","clientX","clientY","handleItemSelect","oldState","newSettings","HeaderOptions","onMouseLeave","unlocked","alignContent","animation","ReactSortable","list","setList","onSort","categoryReordered","evt","sortArray","handle","Sortable","idField","itemUI","onDragStart","onDragEnd","sortParams","CategoryId","NewOrderIds","onDragOver","RevelationsPage","FeedApi","getUserFeed","lastId","serializeQueryArgs","endpointName","merge","currentCache","newItems","_currentCache$FeedIte","FeedItems","UnReadCount","Is_Read","Use_Temp_Read","Is_Temp_Read","forceRefetch","currentArg","previousArg","getFeedConfig","saveFeedConfig","resetFeed","clearFeed","markAsRead","_draft$FeedItems","Feed_Item_Id","markAsUnRead","_ref8","_draft$FeedItems2","TeamMultiSelect","teamsLoading","teamsFiltered","setTeams","selectedTeams","_props$selectedTeamId","selectedTeamIds","ProjectTypeList","projectTypeIds","projectTypes","useGetProjectTypeListQuery","selectProjectTypes","selectProjectType","Cost_Center","clientIds","SettingsDialog","_settings$Options","_settings$Options2","_settings$Options3","_settings$Filter_Team","_settings$Filter_Staf","_settings$Filter_Clie","_settings$Filter_Clie2","_settings$Filter_Proj","apiConfig","useGetFeedConfigQuery","setSettings","saveFeedSettings","savingConfig","useSaveFeedConfigMutation","activityValues","emptyProps","marginRight","Activity_For","Recent_Item_Count","Initial_State","RadioButton","Remember_State","Is_Checked","Visibility","Team_Filter_Option","Filter_Team_Ids","oldval","SupportStaff","Staff_Filter_Option","Filter_Staff_Ids","_e$value3","Filter_Client_Type_Ids","_e$value4","Filter_Client_Ids","_e$value5","Filter_Project_Type_Ids","layout","onSaved","ErrorBoundary","Component","constructor","super","hasError","getDerivedStateFromError","errorMessage","ActivityFeed","_feedResult$FeedItems","_feedResult$FeedItems2","lastFeedId","setLastFeedId","useGetUserFeedQuery","pollingInterval","useResetFeedMutation","feedResult","feedResults","postAllAsRead","useClearFeedMutation","markingAsRead","useMarkAsReadMutation","markingAsUnRead","useMarkAsUnReadMutation","unreadOnly","setUnreadonly","settingsVisible","setSettingsVisible","Switch","defaultChecked","feedClicked","autoHide","itemClass","feedItemClicked","onContextMenu","handleContextMenu","isread","Call_State_CSS","ImageUrl","borderWidth","Activity_Image_Url","Header","borderCollapse","Action_Contact_Name","Action_Date","RevelationSlice","itemSelected","HTMLEllipsis","unsafeHTML","maxLine","ellipsis","basedOn","From_String","To_String","Fav","postFavorite","saving","Loader","newFav","ContactsMenu","ContactCard","fieldsToRender","fieldsCSV","_props$fieldLabels$fi","_contact$f","fieldLabels","fl","toLocaleLowerCase","CardHeader","Profile_Images","Avatar","Profile_Image_Path","CardSubtitle","CardFooter","iconOrImage","_profile$Features","_settings$Client_Type","useGetFavoriteConfigQuery","saveFavSettings","useSaveFavoriteConfigMutation","Client_Type_Ids","_e$value$map","Settings","showPopup","popupToggled","Contacts","_config$Client_Type_I","_config$Client_Type_I2","_config$Client_Type_I3","_contacts$Pages","filterText","setFilterText","debouncedSearchTerm","useDebounce","page","gotoPage","menu","setMenu","popupSettingsVisible","setPopupSettingsVisible","favOnly","setFavOnly","Contacts_Search_Favs_Only","saveFavConfig","contacts","useGetContactsQuery","Contacts_Search_By_Name","contactSelected","setContactSelected","mimicSetting","_props$selectedContac","_props$selectedContac2","selectedContact","groups","ReturnValue","Group_Value","newExpanded","Fav_Id","addNewContact","toggleByOffice","toggleFavorites","ContactOptions","Add_Asset","Super_Admin","offsetTop","offsetLeft","InputPrefix","InputClearValue","Pages","p","Letter","RecordCount","ContactsDockFields","FieldLabels","ToolButton","class","rounded","ChatList","ChatMenuModule","ChatBar","Suspense","fallback","showHeader","pinChatOnClick","ChatRequestModule","ChatRequest","SSIChat","ChatCount","PinnedChatModule","ChatNotificationModule","ToggleState","RightBar","setLastId","dockOrder","setDockOrder","Activity_Feed","External_Interface","setSelectedContact","Uninitialized","_dockOrder$children","foundINdex","Page_State_Xml","Expanded","XMLParser","parseFromString","Dock_Order","dockArr","contactName","Free","buttonClicked","newOrder","unshift","newOrderXML","newConfig","lockingTools","handleClick","toolProps","Chat","Contacts_Dock","toolsClass","Body_Hex_Color","_createElement","SessionKeepAlive","random","setRandom","pingUrl","ping","RevelationIframe","_revI$currentIframeSr","_revI$currentIframeSr2","_revI$currentIframeSr3","useInvalidateProfileMutation","iframeRef","hasAccessToken","homeLandingPage","encodeURIComponent","iframeClass","extraQueryParams","logoutMessage","invalidateTags","iFrameLoaded","Outlet","startsWith","Deeplink","lowerParams","URLSearchParams","self","redirect","search","history","replaceState","LicenseManager","renewLicense","thisLoop","Authority","userManager","signinRedirect","_err$data","MimicBar","cancelMimicSession","imgClass","navStyle","normalSize","halfSize","SetLogoNavStyle","AppBarSection","justifyContent","stopImmediatePropagation","imgUrl","AlertApi","getAlertConfig","Notifications","navColor","notifications","setNotifications","showNotification","setShowNotification","alertConfig","useGetAlertConfigQuery","fetch","Alerts_Get_Url","ok","json","seen","notificationStyle","borderTop","borderRight","borderLeft","placeContent","messageId","Seen_Post_Url","ClientInfoEncrypted","handleNotificationIteration","calculatedIndex","getAttribute","Read_Post_Url","HamburgerMenu","addTextAndItemsToProps","navItems","_menu$current","_menu$current$element","_className","_className2","_menu$current2","popupAlign","handleItemRender","Image_Url","itemId","Url","draggable","resizable","overlayStyle","exitButton","getElementsByClassName","exitVisibility","setAttribute","overflow","PROFILE","_Profile_Menu_Items$f","_Profile_Menu_Items$f2","dismissFeature","useDismissIntroMutation","Profile_Menu_Items","Profile_Image_Url","Help_Url","Whats_New_Tour_Url","Show_Tour","Show_Trial_Tour","productTourPopupVisible","setProductTourPopupVisible","trialTourPopupVisible","setTrialTourPopupVisible","whatsNewTourPopupVisible","setWhatsNewTourPopupVisible","productTourProps","trialTourProps","whatsNewTourProps","additionalItems","access","regularItems","buildItemList","releaseLicense","handleProfileClick","_productTourProps$url","id_token","id_token_hint","logMeOut","activeElement","SplitButton","onButtonClick","setState","_e$item","menuItem","ProductTour","TrialTour","IGNORE_CLASS","OPTION_CLASS","styled","_templateObject","_taggedTemplateLiteral","ul","button","Option","useRandomId","formatSimple","option","CustomSmartOption","multi","formatOption","Styled","Multi","Single","_values","_value","some","formatted","role","toggle","uncheck","updated","SELECT_CLASS","constants","LABEL_CLASS","OPTIONS","shift","placement","CustomSmartSelect","refs","reference","floating","strategy","update","useFloating","formatLabel","empty","utils","onToggle","initialValue","arguments","useCallback","useToggle","btnId","dataset","num","handler","check","source","parentNode","classList","useClickOutside","useLayoutEffect","wrapClass","labelClass","hidden","roundX","round","roundY","dropdown","dropdownStyle","Wrapper","labelStyle","Background","Dropdown","renderOption","optionStyle","CheckBoxDropdownFilter","updateSearchTypeMutation","allOptions","CheckAll","checkedOptions","finalOptions","customSmartSelectStyle","customSmartSelectLabelStyle","divWrapperStyle","paddingTop","fontWeight","countItems","valueCount","optionCount","checkAllOptions","AutoCompleteFooter","noCategoriesArrayLength","isCategory","QuickSearch","getSearchTypeQuery","nv","PostSearchQuickMutation","windowWidth","setWindowWidth","findTicketId","setFindTicketId","foundTicket","fetchTicketError","handleOnChange","chosen","handleSearchIconClick","searchPhrase","searchTypes","selectedTypes","ticketStatusTypes","searchDefault","searchFilters","debouncePostSearch","debounce","input","post","SearchTerm","SearchTypes","quickSearchObj","resultsArr","Categories","category","resultsCount","ResultCount","Results","FlattenAndAddCategoryObjectsToQuickSearchResults","autocomplete","_autocomplete$current","handleKeyDown","keyCode","Number","autoCompleteStyle","borderBottom","AutoComplete","SharedStyles","liProps","cloneElement","listNoDataRender","footer","accessible","FocusedViewToggle","preData","postData","iconImg","collapse","postMessage","Logout","AdminArea","AdminAreaPath","CoreIcon","hamburgerMenuProps","Admin_Area","Selected","Numbers","PROFILE_NAV_CONTAINER_CLASS_NAME","gap","Is_Core_Site","ProfileDropdown","QuickSearchWrapper","Quick_Search","_props$Nav_Items","buttonColor","Tooltip","navTextSize","buttonStyle","symbolSize","ApplyCustomStyles","divHeight","buttonWidth","_props$onContextMenu","call","cx","ticketState","isMoreItems","useStyles","makeStyles","container","flexGrow","flexWrap","minWidth","shorthands","farItems","resizableArea","fontFamily","lineHeight","letterSpacing","tokens","colorNeutralForegroundOnBrand","colorBrandBackground","FluentButtonBar","styles","showNavMenu","setShowNavMenu","profileProps","Overflow","OverflowItem","MenuButton","NavMenu","isTopLevel","ProfileNav","overflowCount","isOverflowing","useOverflowMenu","onOpenChange","MenuTrigger","NavButton","setTimeout","MenuPopover","MenuList","NavMenuItem","_props$Nav_Items2","useIsOverflowItemVisible","NavWrapper","navLogoProps","Site_Logo_Url","Nav_Style","notificationsProps","navContainer","Helmet","Site_Title","AppBar","paddingBottom","NavLogoContainer","NavLogo","Navbar","FeedPage","ActionForm","fetchingProfile","apiError","setApiError","handleSubmit","visited","dialogVisible","setDialogVisible","ActionSavedDialog","ContactsPage","ChatPage","ChatPageWrapper","getChat","getMessages","chatUid","chat","useGetChatQuery","messages","useGetMessagesQuery","EndUser_Uid","firstMessages","ticketDescription","actionNotes","_m$From","Is_Event","StaffContact_Id","Profile_Image","Created","From","AppRoutes","k","LogTicketFromChat","ActionModal","TicketModal","SignoutPage","frameLoaded","setFrameLoaded","App","tenantNotFound","setUserManager","isAuthenticating","setAuthenticating","Log","setLevel","DEBUG","newUserManager","expired","returnUrl","loadUser","signIn","OidcProvider","ToastContainer","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","CallbackPage","authManager","CallbackComponent","successCallback","errorCallback","SilentRenewPage","processSilentRenew","reactPlugin","ReactPlugin","appInsights","ApplicationInsights","connectionString","extensions","enableAutoRouteTracking","disableAjaxTracking","autoTrackPageVisitTime","enableCorsCorrelation","enableRequestHeaderTracking","enableResponseHeaderTracking","loadAppInsights","addTelemetryInitializer","env","tags","TimeAgo","en","root","AppInsightsContext","BrowserRouter","basename","reportWebVitals"],"sourceRoot":""}