{"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                &nbsp;{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}>&nbsp;{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                &nbsp;{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' }}>&nbsp;</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:&nbsp;\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&nbsp;<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":""}