{"version":3,"file":"static/js/5303.666bf4c6.chunk.js","mappings":"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I,UAAUC,SAAS,EAAG,KAExE,OAAOP,EAAU,GAAKC,EAAmB,IAAIE,KAAaA,CAC5D,CAsPA,SAASK,KACP,OAzNgB,CACd,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,SAAU,aACV,QAAS,aACT,aAAc,aACd,aAAc,aACd,QAAS,WACT,QAAS,aACT,QAAS,YACT,QAAS,WACT,QAAS,WACT,QAAS,WACT,QAAS,aACT,aAAc,WACd,aAAc,WACd,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,SAAU,aACV,QAAS,WACT,QAAS,WACT,SAAU,aACV,QAAS,YACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,YACT,QAAS,WACT,QAAS,WACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,QAAS,YACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,SAAU,WACV,QAAS,aACT,QAAS,YACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,SAAU,aACV,QAAS,WACT,aAAc,WACd,QAAS,aACT,QAAS,aACT,QAAS,YACT,QAAS,WACT,SAAU,aACV,QAAS,gBACT,QAAS,aACT,QAAS,aACT,QAAS,WACT,QAAS,WACT,QAAS,WACT,QAAS,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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/TicketDetailSlice.ts","slices/TicketDetailUISlice.ts","slices/ActionSlice.ts","slices/FeedSlice.ts","slices/FavoriteSlice.ts","Variables/RightBarState.ts","slices/RightBarSlice.ts","slices/EmailActionSlice.ts","slices/FilterSlice.ts","slices/FileSlice.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/HierarchyForm.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/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/Fields.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/DateFieldValidator.ts","components/CustomForms/Validators/DropdownFieldValidator.ts","components/CustomForms/Validators/NumberFieldValidator.ts","components/CustomForms/Validators/CustomFieldValidator.ts","components/CustomForms/Validators/EndUserFieldValidator.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/CommonTools.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/FlaggedNotes.tsx","components/Ticket/TimelineImage.tsx","components/Ticket/TicketDetails/NewTicketDetails.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/KBResuilts.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/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","redux/api/LinkApi.ts","components/RightBar/Links/EditBar.tsx","components/RightBar/Links/Links.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/RightBar/Contacts/ContactsPage.tsx","components/Chat/ChatPageWarpper.tsx","redux/api/ChatApi.ts","components/Chat/LogTicketFromChat.tsx","components/Ticket/TicketDetails/Sections/CustomForm.tsx","components/Ticket/TicketDetails/Sections/Tools/Filter/FilterBanner.tsx","redux/api/AccountApi.ts","components/Ticket/TicketDetails/Sections/Pager.tsx","redux/api/WorkflowApi.ts","redux/api/ReactionApi.ts","components/Ticket/TicketDetails/Sections/LikeButton.tsx","components/Ticket/TicketDetails/Sections/AttachmentButton.tsx","components/Ticket/TicketDetails/Sections/ActionButtons.tsx","components/Ticket/TicketDetails/Sections/Tools/AutoLinker.tsx","components/Ticket/TicketDetails/Sections/Action.tsx","components/Ticket/TicketDetails/Sections/Actions.tsx","redux/api/AIApi.ts","components/Ticket/TicketDetails/Sections/AINotes.tsx","components/Ticket/TicketDetails/Sections/Tools/KB/AddKBButton.tsx","hooks/useRedirectOnClose.ts","components/Ticket/TicketDetails/Sections/Tools/Close/GroupAssigned.tsx","components/Ticket/TicketDetails/Sections/Tools/Close/CloseDialogContext.tsx","hooks/useCloseTicketLogic.ts","components/Ticket/TicketDetails/Sections/AddAction.tsx","redux/api/PinApi.ts","components/Ticket/TicketDetails/Sections/Dock/Dockbar.tsx","components/Ticket/TicketDetails/Sections/AISummary.tsx","components/Ticket/TicketDetails/Sections/AddActionButton.tsx","components/Ticket/TicketDetails/Sections/Tools/Hierarchy/HierarchyButton.tsx","components/Ticket/TicketDetails/Sections/Tools/KB/KBButton.tsx","components/Ticket/TicketDetails/Sections/Tools/Related/RelatedButton.tsx","components/Ticket/TicketDetails/Sections/Tools/Print/PrintButton.tsx","components/Ticket/TicketDetails/Sections/Tools/Assets/AssetButton.tsx","components/Ticket/TicketDetails/Sections/Tools/Workflow/WorkflowButton.tsx","components/Ticket/TicketDetails/Sections/Tools/Filter/ActionFilterButton.tsx","components/Ticket/TicketDetails/Sections/Tools/Email/SendEmailButton.tsx","components/Ticket/TicketDetails/Sections/Tools/Tools.tsx","components/Ticket/TicketDetails/Sections/ActionToolbar.tsx","components/Ticket/ListControls/EmailTemplateList.tsx","components/Ticket/TicketDetails/Sections/Tools/Email/EmailForm.tsx","components/Ticket/TicketDetails/Sections/Tools/Email/ConfirmClose.tsx","components/Ticket/TicketDetails/Sections/Tools/Email/EmailAction.tsx","redux/api/StarApi.ts","components/Ticket/TicketDetails/Sections/Toolbar.tsx","components/Ticket/TicketDetails/Sections/AutoStatusBanner.tsx","components/Ticket/TicketDetails/Sections/TicketHeader.tsx","styles/themes.ts","components/Ticket/TicketDetails/Sections/FeedbackFormModal.tsx","components/Ticket/TicketDetails/Sections/DashbaordPopup.tsx","components/Ticket/TicketDetails/Sections/UserInfo.tsx","components/Ticket/TicketDetails/Sections/Ownership.tsx","components/Ticket/TicketDetails/Sections/TimeLogged.tsx","components/Ticket/TicketDetails/Sections/Type.tsx","components/Ticket/TicketDetails/Sections/Timeline.tsx","components/Ticket/TicketDetails/Sections/AttachmentsLightBox.tsx","components/Ticket/TicketDetails/Sections/Attachments.tsx","components/Ticket/TicketDetails/Sections/Rating/Stars.tsx","components/Ticket/TicketDetails/Sections/Sidebar.tsx","components/Ticket/TicketDetails/Sections/Tools/Storyline/TicketStoryLine3.tsx","components/Ticket/TicketDetails/Sections/Tools/Storyline/TooManyRecordsBanner.tsx","components/Ticket/TicketDetails/Sections/Tools/Storyline/TicketStoryLine2.tsx","components/Ticket/TicketDetails/Sections/LegacyBanner.tsx","components/Ticket/TicketDetails/Sections/ActionExpander.tsx","components/Ticket/TicketDetails/Sections/ActionTabs.tsx","components/Ticket/TicketDetails/Sections/DeleteAction.tsx","components/Ticket/TicketDetails/Sections/AttachmentsPopup.tsx","components/Ticket/TicketDetails/Sections/Tools/Close/ValidationPopup.tsx","components/Ticket/TicketDetails/Sections/Share.tsx","components/Ticket/TicketDetails/Sections/MapView.tsx","components/Ticket/TicketDetails/Sections/Tools/Print/PrintWindow.tsx","components/Ticket/TicketDetails/Sections/Tools/Filter/ActionFilter.tsx","components/Ticket/TicketDetails/Sections/Tools/KB/KBModal.tsx","components/Ticket/TicketDetails/Sections/Tools/Related/RelatedTicketsModal.tsx","components/Ticket/TicketDetails/Sections/Tools/Reassign/EditAssignment.tsx","components/Ticket/TicketDetails/Sections/Tools/Reassign/AssignedModal.tsx","components/Ticket/TicketDetails/Sections/Tools/Reassign/TestProducts.js","components/Ticket/TicketDetails/Sections/Dock/DeleteDockItem.tsx","components/Ticket/TicketDetails/Sections/Tools/Hierarchy/HierarchyModal.tsx","components/Ticket/TicketDetails/Sections/Tools/Email/EmailModal.tsx","components/Ticket/TicketDetails/Sections/Tools/Assets/AssetModal.tsx","components/Action/ActionModal.tsx","components/Asset/AddAssetModal.tsx","components/Ticket/TicketRoute.tsx","components/Ticket/TicketDetails/TicketDetailsPage.tsx","components/Revelation/LegacyUserInfoPage.tsx","components/Ticket/TicketDetails/TicketNotFound.tsx","components/Routes/AppRoutes.tsx","components/Auth/SignoutPage.tsx","App.tsx","reportWebVitals.ts","components/Auth/CallbackPage.tsx","components/Auth/SilentRenewPage.tsx","bootstrap.tsx","styles/themes|sync|/^/.//.*/.json$"],"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/Tenant/ITenant\";\nimport IForm from \"../../types/Form/IForm\";\nimport { IProject } from \"../../types/Project/IProject\";\nimport { IPriority } from \"../../types/Priority/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';\nimport { toast } from \"react-toastify\";\n//import { TicketApiTags } from \"./TicketApi\";\n\n\nconst 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\nconst baseQueryWithErrorHandling = async (args, api, extraOptions) => {\n const result = await baseQuery(args, api, extraOptions);\n if (result.error) {\n const { status } = result.error;\n if (status === 500) {\n toast.error(`Unexpected API error: ${Constants.apiRoot}${args} \\nError: ${result ? JSON.stringify(result.error) : 'Something went wrong'}`);\n }\n }\n return result;\n};\n\nconst TicketApiTags = [\"GetTicketForm\"]\n\n\nconst Api = createApi({\n reducerPath: \"api\",\n baseQuery: baseQueryWithErrorHandling,\n tagTypes: [\n \"SearchContacts\",\n \"ActionTypes\",\n \"ActionAuthors\",\n \"GetAction\",\n \"GetTicketAISummary\",\n \"GetReactions\",\n \"Stars\",\n \"Pins\",\n \"GetTicketConfig\",\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 \"GetTicketDetails\",\n \"GetActions\",\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 \"GetHostConfig\"\n ].concat(TicketApiTags),\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 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 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 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 searchContacts: build.query<IStaff[], string>({\n query: (filter) => `User/Search?filter=${filter || ''}`,\n providesTags: [\"SearchContacts\"],\n }),\n getContacts: build.query<IContactResults, IContactSearchProps>({\n query: (props) => `User/${props.uid}/Contacts?favsOnly=${props.favsOnly || 'false'}&filter=${props.filter || ''}&pageLetter=${props.pageLetter || ''}&thisContactId=${props.thisContactId || ''}&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 updateNotes: build.mutation<void, { uid: string, Notes: string }>({\n query: (props) => ({\n url: `User/${props.uid}/Notes`,\n method: \"POST\",\n body: props,\n }),\n invalidatesTags: [\"UserProfile\", \"GetUsersById\"]\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';\nimport IForm from '../../types/Form/IForm';\nimport { IFormConfig } from '../../types/Form/IFormConfig';\nimport { IProjectAssignment } from '../../types/Project/IProjectAssignment';\nimport { ISLA } from '../../types/ISLA';\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 getProject: build.query<IProject, number>({\n query: (Id) => `Project/${Id}`,\n providesTags: [\"GetProject\"],\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 getProjectAssignment: build.query<IProjectAssignment[], number>({\n query: (projectId) => `Project/${projectId}/Assignment`,\n providesTags: [\"GetProjectAssignment\"],\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 getSLAList: build.query<ISLA[], { projectId: number; priorityId: number }>({\n query: ({ projectId, priorityId }) =>\n \"SLA/?projectId=\" + projectId + \"&priorityId=\" + priorityId,\n providesTags: [\"SLAList\"],\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/Priority/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/Action/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: \"newTicket\",\n initialState: {\n //initialAction: null as IAction,\n ticket: initialTicketState,\n features: null as Features,\n selectedForm: null as IForm,\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.selectedForm = action.payload;\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 ProjectApi.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 { ITicket } from '../types/Ticket/ITicket';\nimport IForm, { IField } from '../types/Form/IForm';\n\nconst TicketDetailSlice = createSlice({\n name: 'ticketDetails',\n initialState: {\n details: {\n Call_Desc: '',\n Actions: [],\n } as ITicket,\n form: null as IForm,\n isClosing: false\n },\n reducers: {\n setIsClosing: (state, action: PayloadAction<boolean>) => {\n state.isClosing = action.payload;\n },\n setForm: (state, action: PayloadAction<IForm>) => {\n state.form = action.payload\n },\n setDetails: (state, action: PayloadAction<ITicket>) => {\n state.details = action.payload;\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.form?.Fields?.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 } else {\n state.form?.Fields.push(action.payload);\n }\n },\n },\n extraReducers: (builder) => {\n\n },\n});\n\nexport const { setField, setDetails, setForm, setIsClosing } = TicketDetailSlice.actions;\nexport default TicketDetailSlice.reducer;","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nexport type ViewName = 'notes' | 'summary' | 'timeline'\n\nconst TicketDetailUISlice = createSlice({\n name: 'ticketDetailsUI',\n initialState: {\n viewName: 'notes' as ViewName,\n status: 'idle',\n error: null,\n menuExpanded: false,\n actionExpanded: 0,\n flaggedNotes: {\n hasNotes: false,\n expanded: false\n }\n },\n reducers: {\n setFlaggedNotesExpanded: (state, action: PayloadAction<boolean>) => {\n state.flaggedNotes.expanded = action.payload;\n },\n setFlaggedNotesExist: (state, action: PayloadAction<boolean>) => {\n state.flaggedNotes.hasNotes = action.payload;\n },\n setMenuExpanded: (state, action: PayloadAction<boolean>) => {\n state.menuExpanded = action.payload;\n },\n setView: (state, action: PayloadAction<ViewName>) => {\n state.viewName = action.payload;\n },\n setActionExpanded: (state, action: PayloadAction<number>) => {\n state.actionExpanded = action.payload;\n if (state.viewName !== 'notes') {\n state.viewName = 'notes';\n }\n }\n },\n});\n\nexport const { setView, setMenuExpanded, setActionExpanded, setFlaggedNotesExpanded, setFlaggedNotesExist } = TicketDetailUISlice.actions;\nexport default TicketDetailUISlice.reducer;","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { Api } from \"../redux/api/BaseApi\";\nimport { IAction, IActionUI } from \"../types/Action/IAction\";\nimport { IQuickNote } from \"../types/Ticket/IQuickNotes\";\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;\nexport type TranslatingStatus = 'idle' | 'loading' | 'success' | 'error';\n\nconst ActionSlice = createSlice({\n name: \"actionDetails\",\n initialState: {\n action: initialActionState,\n settings: initialUiSettings,\n translateOption: 0,\n translatingStatus: 'idle' as TranslatingStatus,\n originalNote: null as string,\n },\n reducers: {\n ResetAction: (state, action) => {\n state.action = { ...initialActionState, Action_Dt: new Date() };\n state.settings = initialUiSettings;\n },\n SetAction: (state, action: PayloadAction<IAction>) => {\n state.action = action.payload;\n },\n SetTranslatingStatus: (state, action: PayloadAction<TranslatingStatus>) => {\n state.translatingStatus = action.payload;\n },\n SetTranslationOption: (state, action: PayloadAction<number>) => {\n state.translateOption = action.payload;\n },\n SetOriginalNote: (state, action: PayloadAction<string>) => {\n state.originalNote = 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 SetQuickNote: (state, action: PayloadAction<IQuickNote>) => {\n state.action.Quick_Note_Id = action.payload?.Id;\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 SetTranslationOption,\n SetOriginalNote,\n SetQuickNote,\n SetTranslatingStatus\n} = ActionSlice.actions;\nexport default ActionSlice.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 { IEmailAction } from '../types/Action/IEmailAction';\nimport { IStaff } from '../types/IStaff';\n\nconst initialState: { ticketId: number, email: IEmailAction, originalNote: string, translateOption: number } = {\n ticketId: 0,\n email: {\n HTML_Note: '<p></p>',\n Billable_Time: 0,\n Non_Billable_Time: 0\n } as IEmailAction,\n originalNote: '',\n translateOption: 0\n};\n\nconst emailActionSlice = createSlice({\n name: 'emailAction',\n initialState,\n reducers: {\n setNotes(state, action: PayloadAction<string>) {\n state.email.HTML_Note = action.payload;\n },\n setOriginalNote(state, action: PayloadAction<string>) {\n state.originalNote = action.payload;\n },\n setTranslationOption(state, action: PayloadAction<number>) {\n state.translateOption = action.payload;\n },\n setFrom(state, action: PayloadAction<string>) {\n state.email.From = action.payload;\n },\n setTo(state, action: PayloadAction<IStaff[]>) {\n state.email.To = action.payload;\n },\n setCC(state, action: PayloadAction<IStaff[]>) {\n state.email.CC = action.payload;\n },\n setShowCC(state, action: PayloadAction<boolean>) {\n state.email.Show_CC = action.payload;\n },\n setShowBCC(state, action: PayloadAction<boolean>) {\n state.email.Show_BCC = action.payload;\n },\n setBCC(state, action: PayloadAction<IStaff[]>) {\n state.email.BCC = action.payload;\n },\n setSubject(state, action: PayloadAction<string>) {\n state.email.Subject = action.payload;\n },\n setBillable(state, action: PayloadAction<number>) {\n state.email.Billable_Time = action.payload;\n },\n setNonBillable(state, action: PayloadAction<number>) {\n state.email.Non_Billable_Time = action.payload;\n },\n setTicketId(state, action: PayloadAction<number>) {\n state.ticketId = action.payload;\n },\n setTemplateId(state, action: PayloadAction<number>) {\n state.email.Template_Id = action.payload;\n },\n resetForm(state, action: PayloadAction<IEmailAction>) {\n // Reset the form to the initial state\n state.email = action.payload;\n },\n },\n});\n\nexport const { setNotes, setFrom, setTo, setCC, setBCC, setSubject, setBillable, setNonBillable, resetForm, setShowCC, setShowBCC, setTicketId, setTemplateId, setOriginalNote, setTranslationOption } = emailActionSlice.actions;\n\nexport default emailActionSlice.reducer;","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\n\nexport const initialState: FilterState = {\n searchTerm: '',\n showSystemActions: true,\n authorAndOr: 'and',\n authorIds: [],\n actionTypeIds: [],\n actionTypeAndOr: 'and',\n searchTermOption: 'Include',\n dateRange: null,\n customStartDate: null,\n customEndDate: null,\n hasReactions: false\n} as FilterState;\n\nconst filterSlice = createSlice({\n name: 'filter',\n initialState,\n reducers: {\n setFilter(state, action: PayloadAction<FilterState>) {\n state = action.payload;\n },\n setSearchTerm(state, action: PayloadAction<string>) {\n state.searchTerm = action.payload;\n },\n setSearchTermOption(state, action: PayloadAction<termOptions>) {\n state.searchTermOption = action.payload;\n },\n setAuthorAndOr(state, action: PayloadAction<'and' | 'or'>) {\n state.authorAndOr = action.payload;\n },\n setAuthors(state, action: PayloadAction<number[]>) {\n state.authorIds = action.payload;\n },\n setActionTypes(state, action: PayloadAction<number[]>) {\n state.actionTypeIds = action.payload;\n },\n setActionTypeAndOr(state, action: PayloadAction<'and' | 'or'>) {\n state.actionTypeAndOr = action.payload;\n },\n setDateRange(state, action: PayloadAction<dateRangeOptions>) {\n state.dateRange = action.payload;\n },\n setStartDate(state, action: PayloadAction<Date>) {\n state.customStartDate = action.payload;\n },\n setEndDate(state, action: PayloadAction<Date>) {\n state.customEndDate = action.payload;\n },\n setShowSystemActions(state, action: PayloadAction<boolean>) {\n state.showSystemActions = action.payload;\n },\n setHasReaction(state, action: PayloadAction<boolean>) {\n state.hasReactions = action.payload;\n },\n resetFilters(state) {\n //Reset each key to its initial state\n Object.keys(initialState).forEach(key => {\n state[key] = initialState[key];\n });\n },\n },\n});\n\nexport const { setSearchTerm, setAuthors, setActionTypes, setDateRange, setStartDate, setEndDate, setShowSystemActions, setHasReaction, resetFilters, setAuthorAndOr, setActionTypeAndOr, setSearchTermOption } = filterSlice.actions;\n\nexport default filterSlice.reducer;\n","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { IFileUpload } from \"../types/File/FileUpload\";\n\n\nconst FileSlice = createSlice({\n name: \"fileDetails\",\n initialState: {\n files: [] as IFileUpload[],\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 { 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, combineReducers } 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 TicketDetailReducer from \"../slices/TicketDetailSlice\";\nimport TicketDetailUIReducer from \"../slices/TicketDetailUISlice\";\nimport ActionReducer from \"../slices/ActionSlice\";\nimport FeedReducer from \"../slices/FeedSlice\";\nimport FavoriteReducer from \"../slices/FavoriteSlice\";\nimport RightBarReducer from \"../slices/RightBarSlice\";\nimport EmailActionReducer from \"../slices/EmailActionSlice\";\nimport FilterReducer from \"../slices/FilterSlice\";\nimport FileReducer from \"../slices/FileSlice\";\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: TicketDetailReducer,\n ticketDetailsUI: TicketDetailUIReducer,\n newTicket: TicketReducer,\n actionDetails: ActionReducer,\n auth: oidcReducer,\n filter: FilterReducer,\n rightBar: RightBarReducer,\n nav: NavReducer,\n count: CountReducer,\n feed: FeedReducer,\n favs: FavoriteReducer,\n emailAction: EmailActionReducer,\n revI: RevelationIframeReducer,\n [Api.reducerPath]: Api.reducer\n};\n\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 <Link to='/'><Button themeColor='primary' size='large' icon='refresh'>Retry</Button></Link>\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 const primarystyle = `.rev-primary-button, .rev-primary-button button, .rev-primary-button ul.k-menu-group\n , .rev-primary-button ul.k-menu-group:hover{\n background-color: ${profile?.Nav_Hex_Color}; \n color:#fff;\n }\n .rev-primary-button button:hover,\n .rev-primary-button:hover {\n filter: brightness(80%);\n background-color: ${profile?.Nav_Hex_Color}; \n color:#fff;\n }`\n\n const coolWindowStyle = `.k-window.cool-window .k-window-titlebar,\n .cool-window > .k-window .k-window-titlebar{\n background-color: ${profile?.Nav_Hex_Color}; \n color:#fff;\n }\n .k-window.cool-window, .cool-window > .k-window{background-color: #ddd;}`\n return (\n <>\n <RevUserContext.Provider value={profile}>\n <style>{primarystyle}\n {coolWindowStyle}\n </style>\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 ErrorCard from '../Common/ErrorCard';\n\nexport const NoAuthServer = () => {\n const [params] = useSearchParams()\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, IActionDTO, IActionIds } from '../../types/Action/IAction';\nimport { IStopwatch, StopwatchProps } from '../../types/Ticket/IStopwatch';\nimport { IStatusType } from '../../types/Ticket/Status/IStatusListItem';\nimport { ITicketConfig } from '../../types/Ticket/ITicketConfig';\nimport IForm, { IField } from '../../types/Form/IForm';\nimport { IShare } from '../../types/Ticket/IShare';\nimport { ReassignProps } from '../../types/Props/ReassignProps';\nimport { IEmailAction } from '../../types/Action/IEmailAction';\nimport { IStaff } from '../../types/IStaff';\nimport { IStateHistory } from '../../types/Ticket/IStateHistory';\nimport { ISetStatusProps } from '../../types/Ticket/Status/ISetStatusProps';\nimport { IPriority } from '../../types/Priority/IPriority';\nimport { ISetPriorityProps } from '../../types/Priority/ISetPriorityProps';\nimport { IHierarchy } from '../../types/Ticket/IHierarchy';\nimport { ITicketAsset } from '../../types/Ticket/ITicketAsset';\n\nconst TicketApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getTicketForm: build.query<IForm, number>({\n query: (id) => `Ticket/${id}/Form`,\n providesTags: [\"GetTicketForm\"],\n }),\n readTicket: build.mutation<boolean, { ticketId: number }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId || 0}/Read/`,\n method: \"POST\",\n body: {},\n }),\n }),\n updateTicketHierarchy: build.mutation<any, { ticketId: number, info: IHierarchy }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId || 0}/Hierarchy/`,\n method: \"POST\",\n body: props.info,\n }),\n invalidatesTags: [\"GetTicketDetails\", \"GetTicket\", \"GetChildTickets\", \"GetOpenParentTickets\", \"GetActions\"]\n }),\n removeTicketHierarchy: build.mutation<any, { ticketId: number }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId || 0}/Hierarchy/`,\n method: \"DELETE\",\n body: {}\n }),\n invalidatesTags: [\"GetTicketDetails\", \"GetTicket\", \"GetChildTickets\", \"GetOpenParentTickets\", \"GetActions\"]\n }),\n updateTicketForm: build.mutation<any, { ticketId: number, formId: number, fields: IField[] }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId || 0}/Form/${props.formId}`,\n method: \"PUT\",\n body: props.fields,\n }),\n invalidatesTags: [\"GetTicketForm\", \"GetTicketDetails\", \"GetTicket\"]\n }),\n updateAction: build.mutation<any, { ticketId: number, Id: number, action: IActionDTO }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId}/Action/${props.Id}`,\n method: \"PUT\",\n body: props.action,\n }),\n invalidatesTags: [\"GetActions\", \"GetAction\"]\n }),\n updateType: build.mutation<any, { ticketId: number, typeId: number }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId}/Type`,\n method: \"POST\",\n body: { Type_Id: props.typeId, Overwrite: true },\n }),\n invalidatesTags: [\"GetTicket\", \"GetTicketDetails\"]\n }),\n updateSLA: build.mutation<any, { ticketId: number, slaID: number }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId}/SLA`,\n method: \"POST\",\n body: { SLA_Id: props.slaID },\n }),\n invalidatesTags: [\"GetTicket\", \"GetTicketDetails\", \"ImageTicketTimeline\"]\n }),\n shareTicket: build.mutation<any, { ticketId: number, share: IShare }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId}/Share`,\n method: \"POST\",\n body: props.share,\n }),\n invalidatesTags: [\"GetActions\"]\n }),\n getTicketConfig: build.query<ITicketConfig, number>({\n query: (id) => `Ticket/${id}/Details/Config`,\n providesTags: [\"GetTicketConfig\"],\n }),\n getTypeList: build.query<IType[], number | null>({\n query: (parentId) => \"Ticket/Type?parentTypeId=\" + parentId,\n providesTags: [\"TypeList\"],\n }),\n getMyTypeList: build.query<IType[], number | null>({\n query: (parentId) => \"Ticket/Type/My?parentTypeId=\" + parentId,\n providesTags: [\"MyTypeList\"],\n }),\n getSLAConfig: build.query<ISLAConfig, void>({\n query: () => \"Ticket/SLAConfig\",\n providesTags: [\"SLAConfig\"],\n }),\n getTicket: build.query<ITicket, { ticketId: number, populateFormData?: boolean, populateActions?: boolean }>({\n query: ({ ticketId, populateFormData, populateActions }) => `Ticket/${ticketId}/?populateFormData=${populateFormData || 'false'}&populateActions=${populateActions || 'false'}`,\n providesTags: [\"GetTicket\"],\n }),\n getTicketDetails: build.query<ITicket, { ticketId: number }>({\n query: ({ ticketId }) => `Ticket/${ticketId}/Details`,\n providesTags: [\"GetTicketDetails\"],\n }),\n getActions: build.query<IPagedResult<IAction>, {\n ticketId: number, skip: number, take: number, showSystemActions?: boolean, searchTerm?: string, searchTermOption?: string, authorIds?: number[], authorAndOr?: 'and' | 'or',\n actionTypeIds?: number[], actionTypeAndOr?: 'and' | 'or', dateRange?: string, hasReactions?: boolean, customStartDate?: Date, customEndDate?: Date\n }>({\n query: ({ ticketId, skip, take, showSystemActions, searchTerm, searchTermOption, authorIds, authorAndOr, actionTypeIds, actionTypeAndOr, hasReactions, dateRange, customStartDate, customEndDate }) => `Ticket/${ticketId}/Action?skip=${skip}&take=${take}&includeSystemActions=${showSystemActions == null ? 'true' : showSystemActions ? 'true' : 'false'}\n&searchTerm=${encodeURIComponent(searchTerm || '')}&searchTermOption=${searchTermOption === 'Include' ? '1' : '0'}&authorIds=${authorIds?.filter(a => !isNaN(a)).map(a => a.toString()).join(',') || ''}&authorOption=${authorAndOr === 'or' ? '1' : '0'}&actionTypeIds=${actionTypeIds?.filter(a => !isNaN(a)).map(a => a.toString()).join(',') || ''}&actionTypeOption=${actionTypeAndOr === 'or' ? '1' : '0'}&hasReactions=${hasReactions ? 'true' : 'false'}&dateRange=${dateRange || ''}&startDate=${customStartDate?.toISOString() || ''}&endDate=${customEndDate?.toISOString() || ''}`,\n providesTags: [\"GetActions\"],\n }),\n getAction: build.query<IAction, { ticketId: number, actionId: number }>({\n query: ({ ticketId, actionId }) => `Ticket/${ticketId}/Action/${actionId}`,\n providesTags: [\"GetAction\"],\n }),\n getActionTypes: build.query<any[], void>({\n query: () => `Ticket/Action/Type`,\n }),\n getTicketActionTypes: build.query<any[], number>({\n query: (ticketId) => `Ticket/${ticketId}/Action/Type`,\n providesTags: [\"ActionTypes\"],\n }),\n getTicketAuthors: build.query<IStaff[], number>({\n query: (ticketId) => `Ticket/${ticketId}/Action/Author`,\n providesTags: [\"ActionAuthors\"],\n }),\n getTicketEmailTemplates: build.query<ITemplateListItem[], void>({\n query: (ticketId) => `Ticket/Action/Template`,\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 getStateHistory: build.query<IStateHistory[], number>({\n query: (Id) => `Ticket/${Id}/State/History`,\n providesTags: [\"GetStateHistory\"],\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 getChildTickets: build.query<ITicket[], number>({\n query: (iticketId) => `Ticket/${iticketId}/Child/`,\n providesTags: [\"GetChildTickets\"],\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 getPriorityList: build.query<IPriority[], number>({\n query: (prioritySetId) =>\n \"Ticket/Priority/?prioritySetId=\" + prioritySetId,\n providesTags: [\"PriorityList\"],\n }),\n setPriority: build.mutation<any | void, ISetPriorityProps>({\n query: (props) => ({\n url: `Ticket/${props.Ticket_Id}/Priority`,\n method: \"POST\",\n body: props,\n }),\n invalidatesTags: [\"GetTicketDetails\", \"GetTicket\", \"GetActions\", \"ImageTicketTimeline\"]\n }),\n setStatus: build.mutation<any | void, ISetStatusProps>({\n query: (props) => ({\n url: `Ticket/${props.Ticket_Id}/Status`,\n method: \"POST\",\n body: props,\n }),\n invalidatesTags: [\"GetTicketDetails\", \"GetTicket\", \"GetActions\", \"ImageTicketTimeline\", \"Pins\"]\n }),\n reassign: build.mutation<any | void, ReassignProps>({\n query: (props) => ({\n url: `Ticket/${props.TicketId}/Reassign`,\n method: \"POST\",\n body: props,\n }),\n invalidatesTags: [\"GetTicketDetails\", \"GetTicket\", \"GetActions\"]\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 createAction: build.mutation<unknown, IActionDTO>({\n query: (info) => ({\n url: `Ticket/${info.Call_Id}/Action`,\n method: \"POST\",\n body: info,\n }),\n invalidatesTags: [\"GetStopwatches\", \"GetTicket\", \"GetTicketDetails\", \"GetActions\", \"ActionTypes\", \"ActionAuthors\", \"GetFiles\", \"GetTicketFiles\", \"ImageTicketTimeline\"]\n }),\n UpdateActionPin: build.mutation<unknown, { Id: number, TicketId: number, Pinned: boolean }>({\n query: (info) => ({\n url: `Ticket/${info.TicketId}/Action/${info.Id}/Pin`,\n method: \"POST\",\n body: info,\n }),\n invalidatesTags: [\"GetActions\", \"GetAction\"]\n }),\n deleteAction: build.mutation<any, IActionDTO>({\n query: (action) => ({\n url: `Ticket/${action.Call_Id}/Action/${action.ID}`,\n method: 'DELETE'\n }),\n invalidatesTags: ['GetActions', \"GetFiles\", \"GetTicketFiles\", \"GetTicketDetails\"],\n }),\n getEmailConfig: build.query<IEmailAction, number>({\n query: (id) => `Ticket/${id}/Email`,\n }),\n sendEmail: build.mutation<unknown, { ticketId: number, info: IEmailAction }>({\n query: ({ ticketId, info }) => ({\n url: `Ticket/${ticketId}/Email`,\n method: \"POST\",\n body: info,\n }),\n invalidatesTags: [\"GetTicket\", \"GetTicketDetails\", \"GetActions\", \"GetTicketFiles\", \"GetFiles\"]\n }),\n createTicket: build.mutation<unknown, ITicket>({\n query: (info) => ({\n url: \"Ticket\",\n method: \"POST\",\n body: info,\n }),\n invalidatesTags: [\"GetStopwatches\", \"GetTicket\", \"GetTicketDetails\", \"GetFiles\", \"GetChildTickets\", \"GetOpenParentTickets\"]\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\", \"GetTicketDetails\", \"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 resendRatingEmail: build.mutation<null, number>({\n query: (id) => ({\n url: `Ticket/${id}/Rating/Send`,\n method: \"POST\"\n }),\n invalidatesTags: [\"GetTicket\", \"GetTicketDetails\"],\n }),\n getLinkedAssets: build.query<ITicketAsset[], number>({\n query: (id) => `Ticket/${id}/Asset`,\n providesTags: [\"GetLinkedAssets\"],\n }),\n saveLinkedAssets: build.mutation<null, { ticketId: number, assets: ITicketAsset[], append: boolean }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId}/Asset`,\n method: \"POST\",\n body: { Assets: props.assets, Append: props.append }\n }),\n invalidatesTags: [\"GetLinkedAssets\"],\n }),\n saveAssociatedContacts: build.mutation<null, { ticketId: number, contactIds: number[] }>({\n query: (props) => ({\n url: `Ticket/${props.ticketId}/Contact`,\n method: \"POST\",\n body: props.contactIds\n }),\n invalidatesTags: [\"GetTicketDetails\", \"GetActions\"],\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.newTicket);\n const options = useMemo(() => [\n { id: 0, text: \"View details\" },\n { id: 1, text: \"Pin to dock\" },\n { id: 2, text: \"Close \" + userProfile?.Phrases.CallPhrase },\n { id: 3, text: \"Log another (Blank)\" },\n { id: 4, text: \"Log another (Duplicate)\" },\n ], [userProfile?.Phrases.CallPhrase]);\n\n const [values, setValues] = useState([]);\n const [opened, setOpened] = useState(false);\n useEffect(() => {\n if (!logOptions) {\n const defaultOptions = options.filter(o => myLogOptions?.Options?.split(',').indexOf(o.id.toString()) > -1)\n setValues(defaultOptions)\n dispatch(TicketSlice.SetMyOptions(myLogOptions))\n //Initial Close option on ticket form.\n myLogOptions?.Options?.indexOf('2') > -1 && dispatch(TicketSlice.SetLogOptions({ Close: true } as ITicketOptions));\n } else {\n const defaultOptions = options.filter(o => logOptions?.Options?.split(',').indexOf(o.id.toString()) > -1)\n setValues(defaultOptions)\n }\n console.log('useEffect LogOptions', myLogOptions, logOptions, options);\n }, [dispatch, myLogOptions, logOptions, options])\n\n const handleSingleChange = (event) => {\n let foundItem = values.filter(v => v.id === event.value.id)\n\n let newArray = [...values] //clone\n\n if (foundItem?.length > 0) {\n newArray.splice(values.indexOf(foundItem[0]), 1)\n //remove\n setValues(newArray);\n }\n else {\n newArray = [...values, event.value]\n\n //If log another or log duplicate is selected the UNSELECT 'view details'\n if (event.value.id === 3)\n newArray = newArray.filter(n => n.id !== 0 && n.id !== 4);\n if (event.value.id === 4)\n newArray = newArray.filter(n => n.id !== 0 && n.id !== 3);\n if (event.value.id === 0)\n newArray = newArray.filter(n => n.id !== 3 && n.id !== 4);\n\n setValues(newArray);\n }\n\n\n //Update the ticket state\n let newOptions = newArray.map(n => n.id).join(',');\n\n dispatch(TicketSlice.SetMyOptions({ ...myLogOptions, Options: newOptions }))\n\n //Pin ticket\n let mustPin = newOptions.indexOf('1') > -1;\n let closeTicket = newOptions.indexOf('2') > -1;\n\n dispatch(TicketSlice.SetLogOptions({ Pin: mustPin, Close: closeTicket } as ITicketOptions));\n\n //post to persist settings in API.\n //console.log('post to persist settings in API', newOptions, logOptions);\n saveLogOptions({ ...myLogOptions, Options: newOptions });\n }\n\n const itemRender = (li, itemProps) => {\n let foundItem = values.filter(v => v.id === itemProps.dataItem[\"id\"])\n const itemChildren = (\n <span>\n <input type=\"checkbox\" checked={foundItem?.length > 0}\n onMouseDown={(e) => { e.preventDefault(); }}\n />\n {li.props.children}\n </span>\n );\n return React.cloneElement(li, li.props, itemChildren);\n }\n\n return (\n <div className='flex flex-wrap w-full justify-end content-center '>\n <div className='justify-end ver flex w-full'>\n <DropDownList opened={opened}\n onFocus={() => { console.log('onFocus'); setOpened(true) }}\n onBlur={() => { console.log('blur'); setOpened(false) }}\n title={values.map(v => v.text).join(', ')}\n value={!values?.length ? { text: 'Log options...' } : values?.length === 1 ? { text: values[0].text } : { text: `${values?.length} items selected` }}\n data={options}\n textField=\"text\"\n itemRender={itemRender}\n style={{ width: 190, marginLeft: 5 }}\n onChange={handleSingleChange}\n // footer={footer}\n />\n </div>\n {/* <div className='justify-end ver flex w-full'>\n {JSON.stringify(values)} \n <JsonTreeViewer data={logOptions} title=\"Log Options\" />\n\n </div> */}\n </div>\n )\n}\n\nexport default LogOptions","import { useEffect, useRef } from \"react\";\nimport { ISearchQuick, ISearchQuickResults } from \"../types/ISearch\";\nimport { NavItems } from \"../types/User/IUserProfile\";\n\nconst useFocusInput = () => {\n const ref = useRef<HTMLInputElement>(null);\n useEffect(() => {\n ref.current?.focus();\n });\n return ref;\n};\n\nconst useFocusTextArea = () => {\n const ref = useRef<HTMLTextAreaElement>(null);\n useEffect(() => {\n ref.current?.focus();\n });\n return ref;\n};\n\nfunction any(iterable) {\n for (let index = 0; index < iterable.length; index++) {\n if (iterable[index]) return true;\n }\n return false;\n}\n\nexport function trimChar(str, ch) {\n if (!str?.length) return str;\n var start = 0,\n end = str?.length;\n\n while (start < end && str[start] === ch) ++start;\n\n while (end > start && str[end - 1] === ch) --end;\n\n return start > 0 || end < str.length ? str.substring(start, end) : str;\n}\n\nconst isDate = function (date) {\n return date instanceof Date && !isNaN(date.valueOf());\n};\n\nconst mouseClickEvents = [\"mousedown\", \"click\", \"mouseup\"];\nfunction simulateMouseClick(element) {\n mouseClickEvents.forEach((mouseEventType) =>\n element.dispatchEvent(\n new MouseEvent(mouseEventType, {\n view: window,\n bubbles: true,\n cancelable: true,\n buttons: 1,\n })\n )\n );\n}\nfunction removeTrailingSlash(str) {\n return str.endsWith(\"/\") ? str.slice(0, -1) : str;\n}\n/** Return Object if it matches number in ID attribute. The array objects must have an attribute of ID. */\nfunction ObjectExistsInArray(arr: any[], ID: number) {\n for (let i = 0; i < arr.length; i++) {\n if (arr[i].ID === ID) {\n return { found: arr[i], index: i };\n }\n return null;\n }\n}\nexport function FlattenAndAddCategoryObjectsToQuickSearchResults(\n quickSearchObj: ISearchQuick\n) {\n const resultsArr: ISearchQuickResults[] = [];\n const maxResults = 50;\n let i = 0;\n quickSearchObj.Categories.forEach((category) => {\n const resultsCount =\n category.ResultCount > maxResults ? maxResults : category.ResultCount;\n resultsArr.push({\n Id: i,\n Display: category.Display,\n ResultCount: resultsCount,\n Url_Format: \"#\",\n isCategory: true,\n });\n i++;\n category.Results.slice(0, maxResults).forEach((result) => {\n resultsArr.push({\n ...result,\n Url_Format: category.Url_Format,\n isCategory: false,\n });\n });\n });\n return resultsArr;\n}\nexport function AddTextAndItemsAttrToNavItems(Nav_Items: NavItems[]) {\n return Nav_Items?.map((item1) => {\n return {\n ...item1,\n text: item1.Text,\n items: [...item1.Nav_Items]?.map((item2) => {\n return {\n ...item2,\n text: item2.Text,\n items: [...item2.Nav_Items]?.map((item3) => {\n return {\n ...item3,\n text: item3.Text,\n items: [...item3.Nav_Items].map((item4) => {\n return { ...item4, text: item4.Text }\n }),\n }\n }),\n };\n }),\n };\n });\n}\nexport function AddTextAndItemsAttrToHamburgerItems(Nav_Items: NavItems[]) {\n return Nav_Items.map((item1) => {\n return {\n ...item1,\n text: item1.Text,\n items: [...item1.Nav_Items]?.map((item2) => {\n return {\n ...item2,\n text: item2.Text,\n items: [...item2.Nav_Items]?.map((item3) => {\n return {\n ...item3,\n text: item3.Text,\n items: [...item3.Nav_Items]?.map((item4) => {\n return {\n ...item4,\n text: item4.Text,\n items: item4.Nav_Items.map(n4 => {\n return { text: n4.Text }\n })\n };\n }),\n };\n }),\n };\n }),\n };\n });\n}\n\nfunction getTicketStateClassName(state: string) {\n switch (state?.toLowerCase()) {\n case \"new\":\n return \"ticket-state-new\";\n case \"current\":\n return \"ticket-state-current\";\n case \"response late\":\n case \"resolve late\":\n return \"ticket-state-late\";\n case \"response at risk\":\n case \"resolve at risk\":\n return \"ticket-state-at-risk\";\n }\n\n return \"ticket-state-current\";\n}\n\nfunction toDigital(minutes, negativeBrackets?) {\n if (minutes === 0) return \"0:00\";\n if (!minutes) return \"\";\n let convert = minutes < 0 && negativeBrackets ? minutes * -1 : minutes;\n let digital =\n Math.floor(convert / 60) + \":\" + (convert % 60).toFixed().padStart(2, \"0\");\n\n return minutes < 0 && negativeBrackets ? `(${digital})` : digital;\n}\n\n///Converts Hours and Minutes to Minutes ie. 1:20 = 80min\nfunction toMinutes(time) {\n var strMin;\n var strHour;\n if (time.indexOf(\":\") > -1) {\n strHour = parseInt(time.substr(0, time.indexOf(\":\")));\n strMin = parseInt(time.substr(time.indexOf(\":\") + 1).padEnd(2, \"0\"));\n } else if (time.indexOf(\".\") > -1) {\n //1.5 = 1:30\n strHour = parseFloat(time);\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\nfunction getLocaleDateFormat() {\n const formats = {\n \"af-ZA\": \"yyyy/MM/dd\",\n \"am-ET\": \"d/M/yyyy\",\n \"ar-AE\": \"dd/MM/yyyy\",\n \"ar-BH\": \"dd/MM/yyyy\",\n \"ar-DZ\": \"dd-MM-yyyy\",\n \"ar-EG\": \"dd/MM/yyyy\",\n \"ar-IQ\": \"dd/MM/yyyy\",\n \"ar-JO\": \"dd/MM/yyyy\",\n \"ar-KW\": \"dd/MM/yyyy\",\n \"ar-LB\": \"dd/MM/yyyy\",\n \"ar-LY\": \"dd/MM/yyyy\",\n \"ar-MA\": \"dd-MM-yyyy\",\n \"ar-OM\": \"dd/MM/yyyy\",\n \"ar-QA\": \"dd/MM/yyyy\",\n \"ar-SA\": \"dd/MM/yy\",\n \"ar-SY\": \"dd/MM/yyyy\",\n \"ar-TN\": \"dd-MM-yyyy\",\n \"ar-YE\": \"dd/MM/yyyy\",\n \"arn-CL\": \"dd-MM-yyyy\",\n \"as-IN\": \"dd-MM-yyyy\",\n \"az-Cyrl-AZ\": \"dd.MM.yyyy\",\n \"az-Latn-AZ\": \"dd.MM.yyyy\",\n \"ba-RU\": \"dd.MM.yy\",\n \"be-BY\": \"dd.MM.yyyy\",\n \"bg-BG\": \"dd.M.yyyy\",\n \"bn-BD\": \"dd-MM-yy\",\n \"bn-IN\": \"dd-MM-yy\",\n \"bo-CN\": \"yyyy/M/d\",\n \"br-FR\": \"dd/MM/yyyy\",\n \"bs-Cyrl-BA\": \"d.M.yyyy\",\n \"bs-Latn-BA\": \"d.M.yyyy\",\n \"ca-ES\": \"dd/MM/yyyy\",\n \"co-FR\": \"dd/MM/yyyy\",\n \"cs-CZ\": \"d.M.yyyy\",\n \"cy-GB\": \"dd/MM/yyyy\",\n \"da-DK\": \"dd-MM-yyyy\",\n \"de-AT\": \"dd.MM.yyyy\",\n \"de-CH\": \"dd.MM.yyyy\",\n \"de-DE\": \"dd.MM.yyyy\",\n \"de-LI\": \"dd.MM.yyyy\",\n \"de-LU\": \"dd.MM.yyyy\",\n \"dsb-DE\": \"d. M. yyyy\",\n \"dv-MV\": \"dd/MM/yy\",\n \"el-GR\": \"d/M/yyyy\",\n \"en-029\": \"MM/dd/yyyy\",\n \"en-AU\": \"d/MM/yyyy\",\n \"en-BZ\": \"dd/MM/yyyy\",\n \"en-CA\": \"dd/MM/yyyy\",\n \"en-GB\": \"dd/MM/yyyy\",\n \"en-IE\": \"dd/MM/yyyy\",\n \"en-IN\": \"dd-MM-yyyy\",\n \"en-JM\": \"dd/MM/yyyy\",\n \"en-MY\": \"d/M/yyyy\",\n \"en-NZ\": \"d/MM/yyyy\",\n \"en-PH\": \"M/d/yyyy\",\n \"en-SG\": \"d/M/yyyy\",\n \"en-TT\": \"dd/MM/yyyy\",\n \"en-US\": \"M/d/yyyy\",\n \"en-ZA\": \"yyyy/MM/dd\",\n \"en-ZW\": \"M/d/yyyy\",\n \"es-AR\": \"dd/MM/yyyy\",\n \"es-BO\": \"dd/MM/yyyy\",\n \"es-CL\": \"dd-MM-yyyy\",\n \"es-CO\": \"dd/MM/yyyy\",\n \"es-CR\": \"dd/MM/yyyy\",\n \"es-DO\": \"dd/MM/yyyy\",\n \"es-EC\": \"dd/MM/yyyy\",\n \"es-ES\": \"dd/MM/yyyy\",\n \"es-GT\": \"dd/MM/yyyy\",\n \"es-HN\": \"dd/MM/yyyy\",\n \"es-MX\": \"dd/MM/yyyy\",\n \"es-NI\": \"dd/MM/yyyy\",\n \"es-PA\": \"MM/dd/yyyy\",\n \"es-PE\": \"dd/MM/yyyy\",\n \"es-PR\": \"dd/MM/yyyy\",\n \"es-PY\": \"dd/MM/yyyy\",\n \"es-SV\": \"dd/MM/yyyy\",\n \"es-US\": \"M/d/yyyy\",\n \"es-UY\": \"dd/MM/yyyy\",\n \"es-VE\": \"dd/MM/yyyy\",\n \"et-EE\": \"d.MM.yyyy\",\n \"eu-ES\": \"yyyy/MM/dd\",\n \"fa-IR\": \"MM/dd/yyyy\",\n \"fi-FI\": \"d.M.yyyy\",\n \"fil-PH\": \"M/d/yyyy\",\n \"fo-FO\": \"dd-MM-yyyy\",\n \"fr-BE\": \"d/MM/yyyy\",\n \"fr-CA\": \"yyyy-MM-dd\",\n \"fr-CH\": \"dd.MM.yyyy\",\n \"fr-FR\": \"dd/MM/yyyy\",\n \"fr-LU\": \"dd/MM/yyyy\",\n \"fr-MC\": \"dd/MM/yyyy\",\n \"fy-NL\": \"d-M-yyyy\",\n \"ga-IE\": \"dd/MM/yyyy\",\n \"gd-GB\": \"dd/MM/yyyy\",\n \"gl-ES\": \"dd/MM/yy\",\n \"gsw-FR\": \"dd/MM/yyyy\",\n \"gu-IN\": \"dd-MM-yy\",\n \"ha-Latn-NG\": \"d/M/yyyy\",\n \"he-IL\": \"dd/MM/yyyy\",\n \"hi-IN\": \"dd-MM-yyyy\",\n \"hr-BA\": \"d.M.yyyy.\",\n \"hr-HR\": \"d.M.yyyy\",\n \"hsb-DE\": \"d. M. yyyy\",\n \"hu-HU\": \"yyyy. MM. dd.\",\n \"hy-AM\": \"dd.MM.yyyy\",\n \"id-ID\": \"dd/MM/yyyy\",\n \"ig-NG\": \"d/M/yyyy\",\n \"ii-CN\": \"yyyy/M/d\",\n \"is-IS\": \"d.M.yyyy\",\n \"it-CH\": \"dd.MM.yyyy\",\n \"it-IT\": \"dd/MM/yyyy\",\n \"iu-Cans-CA\": \"d/M/yyyy\",\n \"iu-Latn-CA\": \"d/MM/yyyy\",\n \"ja-JP\": \"yyyy/MM/dd\",\n \"ka-GE\": \"dd.MM.yyyy\",\n \"kk-KZ\": \"dd.MM.yyyy\",\n \"kl-GL\": \"dd-MM-yyyy\",\n \"km-KH\": \"yyyy-MM-dd\",\n \"kn-IN\": \"dd-MM-yy\",\n \"ko-KR\": \"yyyy. MM. dd\",\n \"kok-IN\": \"dd-MM-yyyy\",\n \"ky-KG\": \"dd.MM.yy\",\n \"lb-LU\": \"dd/MM/yyyy\",\n \"lo-LA\": \"dd/MM/yyyy\",\n \"lt-LT\": \"yyyy.MM.dd\",\n \"lv-LV\": \"yyyy.MM.dd.\",\n \"mi-NZ\": \"dd/MM/yyyy\",\n \"mk-MK\": \"dd.MM.yyyy\",\n \"ml-IN\": \"dd-MM-yy\",\n \"mn-MN\": \"yy.MM.dd\",\n \"mn-Mong-CN\": \"yyyy/M/d\",\n \"moh-CA\": \"M/d/yyyy\",\n \"mr-IN\": \"dd-MM-yyyy\",\n \"ms-BN\": \"dd/MM/yyyy\",\n \"ms-MY\": \"dd/MM/yyyy\",\n \"mt-MT\": \"dd/MM/yyyy\",\n \"nb-NO\": \"dd.MM.yyyy\",\n \"ne-NP\": \"M/d/yyyy\",\n \"nl-BE\": \"d/MM/yyyy\",\n \"nl-NL\": \"d-M-yyyy\",\n \"nn-NO\": \"dd.MM.yyyy\",\n \"nso-ZA\": \"yyyy/MM/dd\",\n \"oc-FR\": \"dd/MM/yyyy\",\n \"or-IN\": \"dd-MM-yy\",\n \"pa-IN\": \"dd-MM-yy\",\n \"pl-PL\": \"dd.MM.yyyy\",\n \"prs-AF\": \"dd/MM/yy\",\n \"ps-AF\": \"dd/MM/yy\",\n \"pt-BR\": \"d/M/yyyy\",\n \"pt-PT\": \"dd-MM-yyyy\",\n \"qut-GT\": \"dd/MM/yyyy\",\n \"quz-BO\": \"dd/MM/yyyy\",\n \"quz-EC\": \"dd/MM/yyyy\",\n \"quz-PE\": \"dd/MM/yyyy\",\n \"rm-CH\": \"dd/MM/yyyy\",\n \"ro-RO\": \"dd.MM.yyyy\",\n \"ru-RU\": \"dd.MM.yyyy\",\n \"rw-RW\": \"M/d/yyyy\",\n \"sa-IN\": \"dd-MM-yyyy\",\n \"sah-RU\": \"MM.dd.yyyy\",\n \"se-FI\": \"d.M.yyyy\",\n \"se-NO\": \"dd.MM.yyyy\",\n \"se-SE\": \"yyyy-MM-dd\",\n \"si-LK\": \"yyyy-MM-dd\",\n \"sk-SK\": \"d. M. yyyy\",\n \"sl-SI\": \"d.M.yyyy\",\n \"sma-NO\": \"dd.MM.yyyy\",\n \"sma-SE\": \"yyyy-MM-dd\",\n \"smj-NO\": \"dd.MM.yyyy\",\n \"smj-SE\": \"yyyy-MM-dd\",\n \"smn-FI\": \"d.M.yyyy\",\n \"sms-FI\": \"d.M.yyyy\",\n \"sq-AL\": \"yyyy-MM-dd\",\n \"sr-Cyrl-BA\": \"d.M.yyyy\",\n \"sr-Cyrl-CS\": \"d.M.yyyy\",\n \"sr-Cyrl-ME\": \"d.M.yyyy\",\n \"sr-Cyrl-RS\": \"d.M.yyyy\",\n \"sr-Latn-BA\": \"d.M.yyyy\",\n \"sr-Latn-CS\": \"d.M.yyyy\",\n \"sr-Latn-ME\": \"d.M.yyyy\",\n \"sr-Latn-RS\": \"d.M.yyyy\",\n \"sv-FI\": \"d.M.yyyy\",\n \"sv-SE\": \"yyyy-MM-dd\",\n \"sw-KE\": \"M/d/yyyy\",\n \"syr-SY\": \"dd/MM/yyyy\",\n \"ta-IN\": \"dd-MM-yyyy\",\n \"te-IN\": \"dd-MM-yy\",\n \"tg-Cyrl-TJ\": \"dd.MM.yy\",\n \"th-TH\": \"d/M/yyyy\",\n \"tk-TM\": \"dd.MM.yy\",\n \"tn-ZA\": \"yyyy/MM/dd\",\n \"tr-TR\": \"dd.MM.yyyy\",\n \"tt-RU\": \"dd.MM.yyyy\",\n \"tzm-Latn-DZ\": \"dd-MM-yyyy\",\n \"ug-CN\": \"yyyy-M-d\",\n \"uk-UA\": \"dd.MM.yyyy\",\n \"ur-PK\": \"dd/MM/yyyy\",\n \"uz-Cyrl-UZ\": \"dd.MM.yyyy\",\n \"uz-Latn-UZ\": \"dd/MM yyyy\",\n \"vi-VN\": \"dd/MM/yyyy\",\n \"wo-SN\": \"dd/MM/yyyy\",\n \"xh-ZA\": \"yyyy/MM/dd\",\n \"yo-NG\": \"d/M/yyyy\",\n \"zh-CN\": \"yyyy/M/d\",\n \"zh-HK\": \"d/M/yyyy\",\n \"zh-MO\": \"d/M/yyyy\",\n \"zh-SG\": \"d/M/yyyy\",\n \"zh-TW\": \"yyyy/M/d\",\n \"zu-ZA\": \"yyyy/MM/dd\",\n };\n\n return formats[navigator.language] || \"dd/MM/yyyy\";\n}\n\nfunction getLocaleDateTimeFormat() {\n return getLocaleDateFormat() + ' ' + 'HH:mm';\n}\n\nexport {\n toDigital,\n toMinutes,\n useFocusInput,\n useFocusTextArea,\n any,\n simulateMouseClick,\n ObjectExistsInArray,\n removeTrailingSlash,\n getTicketStateClassName,\n isDate,\n getLocaleDateFormat,\n getLocaleDateTimeFormat\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 //GridDetailExpandChangeEvent,\n GridDetailRowProps\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 {\n filterBy, orderBy, SortDescriptor\n} from \"@progress/kendo-data-query\";\nimport { Api, useGetTenantQuery } from '../../../redux/api/BaseApi';\nimport { getTicketStateClassName } from '../../../utils/utils';\nimport { TicketGridProps } from '../../../types/Props/TicketGridProps';\n//import { DetailExpandDescriptor } from '@progress/kendo-react-data-tools';\n\nconst TicketGrid = (props: TicketGridProps) => {\n const { data: profile } = Api.useGetUserProfileQuery();\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 [gridData, setGridData] = React.useState(null);\n const [putAtTop, setPutAtTop] = React.useState(false);\n const { data: tenant } = useGetTenantQuery()\n\n //const [detailExpand, setDetailExpand] = React.useState<DetailExpandDescriptor>({ 2: true });\n\n //put the selected ticket at the top of the grid\n React.useEffect(() => {\n let sortedTickets = props.data?.slice().sort((a, b) => a.ID - b.ID);\n if (props.selectedTicketId) {\n let selectedTicket = sortedTickets.find(x => x.ID === props.selectedTicketId);\n console.warn('usedEffect', props.selectedTicketId, selectedTicket);\n if (selectedTicket && !putAtTop) {\n let retGridData = props.data?.filter(x => x.ID !== props.selectedTicketId);\n retGridData.unshift(selectedTicket);\n console.warn('usedMemo unshift', 'top', retGridData.length && retGridData[0].ID);\n setGridData(retGridData);\n setPutAtTop(true);\n return;\n }\n }\n setGridData(sortedTickets);\n }, [props])\n\n //console.warn('gridData', gridData.length && gridData[0].ID, props.selectedTicketId);\n\n let primaryCol = props.primaryCol ? props.primaryCol : \"Company_Name\";\n //Sorting\n const initialSort: Array<SortDescriptor> = [\n //{ field: SELECTED_FIELD, dir: \"desc\" },\n //{ field: \"Call_Id\", dir: \"desc\" },\n\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: \"Call_Status\", operator: \"contains\", value: e.value },\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\n setSelectedState({ [props.selectedTicketId]: true });\n }, [props.selectedTicketId])\n\n const subGrid = (gridprops: GridDetailRowProps) => {\n if (gridprops.dataItem[SELECTED_FIELD] && props.subGridData)\n //return <>{props.subGridData?.length?.toString()}</>\n return <>\n {props.subGridHeader && <h6>{props.subGridHeader}</h6>}\n <TicketGrid {...props} data={props.subGridData} selectedTicketId={props.selectedTicketId} selectable={false} primaryCol={primaryCol} showFilters={false} /></>\n\n //return gridprops.dataItem[\"expanded\"] ? 'expanded' : 'collapsed';\n }\n return (\n <>\n {props.showFilters !== false &&\n <div className=\"flex w-full mb-3\">\n <TextBox style={{ width: '70%' }} type={\"text\"} onChange={filterChanged} placeholder={`Filter by: #, Description, ${profile?.Phrases.Client}, ${profile?.Phrases.Project} or Status`} />\n </div>}\n <Grid onSelectionChange={ticketRowSelected}\n detail={subGrid}\n expandField={SELECTED_FIELD}\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(gridData?.slice().map((item) => ({\n ...item,\n [SELECTED_FIELD]: selectedState[idGetter(item)],\n ['expanded']: true\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 className='chk'>\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 to={`/ticket/${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 <GridColumn field=\"Call_Status\" title=\"Status\" width={150} />\n </Grid>\n </>\n )\n}\n\nexport default TicketGrid","import React, { useState } from 'react';\nimport { SimpleSpinny } from '../../Nav/Spinny';\nimport { Checkbox, CheckboxChangeEvent } from '@progress/kendo-react-inputs';\nimport TicketGrid from '../GridControls/TicketGrid';\nimport { TicketApi } from '../../../redux/api/TicketApi';\nimport { ButtonGroup, Button } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Card, CardBody, CardHeader } from '@progress/kendo-react-layout';\nimport { Console } from 'console';\n\ninterface HierarchyFormProps {\n isParent: boolean;\n ticketId: number;\n companyId?: number;\n parentCallId?: number;\n onParentChange: (event: { value: boolean }) => void;\n onChildChange: (event: { value: number }) => void;\n onTicketSelected: (Id?: number) => void;\n onRemoveHierarchy?: () => void;\n}\n\nconst HierarchyForm: React.FC<HierarchyFormProps> = ({ onRemoveHierarchy, onTicketSelected, onParentChange, onChildChange, parentCallId, isParent, ticketId, companyId }) => {\n //user profile\n const { data: profile } = TicketApi.useGetUserProfileQuery();\n const isChild = (parentCallId > 0 || parentCallId === 0)\n const { data: parentTickets, isLoading } = TicketApi.useGetOpenParentTicketsQuery(undefined, { skip: !isChild });\n const { data: childTickets, isLoading: loadingChildren } = TicketApi.useGetChildTicketsQuery(ticketId, { skip: !isParent });\n const { data: parentChildren, isLoading: loadingParentChildren } = TicketApi.useGetChildTicketsQuery(parentCallId, { skip: isParent || parentCallId === null || parentCallId === 0 });\n const childTicketLabel = parentCallId > 0 ? `Child to ${parentCallId}` : \"Child to ...\"\n\n //console.log('childTicketLabel', childTicketLabel, parentCallId, typeof parentCallId)\n const onChildClick = (event) => {\n //Warning when going from Parenmt to None\n if (isParent) {\n if (!childTickets?.length || window.confirm(`Are you sure you want to remove the parent hierarchy from ${profile?.Phrases.CallPhrase} #${ticketId}? \\n\\n This will remove the hierarchy from the follow child ${profile?.Phrases.CallPhrase}s: \\n ${childTickets.map(t => t.ID).join(', ')}`))\n onChildChange({ value: 0 })\n else\n return;\n }\n onChildChange({ value: 0 })\n }\n const onNoneClick = () => {\n //Warning when going from Parenmt to None\n if (isParent) {\n if (!childTickets?.length || window.confirm(`Are you sure you want to remove the parent hierarchy from ${profile?.Phrases.CallPhrase} #${ticketId}? \\n\\n This will remove the hierarchy from the follow child ${profile?.Phrases.CallPhrase}s: \\n ${childTickets.map(t => t.ID).join(', ')}`))\n onRemoveHierarchy();\n else\n return;\n } else if (isChild && parentCallId > 0) {\n if (window.confirm(`Are you sure you want to remove the child hierarchy from ${profile?.Phrases.CallPhrase} #${ticketId}?`))\n onRemoveHierarchy();\n else\n return;\n } else {\n onRemoveHierarchy();\n }\n }\n\n return (\n <div className='ticket-hierarchy'>\n <div>\n {/* parentCallId={parentCallId === undefined ? 'yes' : 'no'} */}\n <ButtonGroup className='hierarchy-toggle-view'>\n <Button className={isParent && 'selected'} size='large'\n imageUrl='./images/parent.png'\n selected={isParent}\n onClick={() => onParentChange({ value: true })}\n > Parent</Button>\n <Button className={isChild && 'selected'} size='large'\n imageUrl='./images/child.png'\n selected={isChild}\n onClick={onChildClick}\n >{childTicketLabel}</Button>\n <Button className={!isParent && !isChild && 'selected'} size='large'\n // svgIcon={svg.clearCssIcon}\n selected={!isParent && !isChild}\n onClick={() => onNoneClick()}\n >None</Button>\n </ButtonGroup>\n {/* parentCallId:{isNaN(parentCallId) ? 'no' : 'yes'} */}\n </div>\n {(isChild || isParent) &&\n <fieldset className={\"k-form-fieldset\"}>\n <div className=\"m-3 hierarchy-grid\">\n {isLoading || loadingChildren || loadingParentChildren ? <SimpleSpinny /> :\n <>\n <div className='ms-3'>\n {/* {isChild && parentCallId ? <h6>Parent: {parentCallId}</h6> : <h6>Select Parent</h6>} */}\n {isParent && <h6>Child {profile?.Phrases.CallPhrase}s: {childTickets?.length || 0}</h6>}\n </div>\n <Card>\n <CardBody>\n {isChild ? <TicketGrid selectable={true} data={parentTickets} onTicketSelected={onTicketSelected} selectedTicketId={parentCallId} subGridData={parentChildren} subGridHeader={`Child ${profile?.Phrases.CallPhrase}s: ${parentChildren?.length}`} />\n : <TicketGrid selectable={false} data={childTickets || []} companyId={companyId} />\n }</CardBody></Card>\n </>\n }\n </div>\n </fieldset>\n }\n </div>\n );\n};\n\nexport default HierarchyForm;","import { 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 { useReduxDispatch, useReduxSelector } from \"../../../redux/hooks\";\nimport { SetHierarchy } from \"../../../slices/TicketSlice\";\nimport HierarchyForm from \"./HierarchyForm\";\n\nconst TicketHierarchy: FunctionComponent<HierarchyProps> = props => {\n const dispatch = useReduxDispatch();\n const { ticket } = useReduxSelector(state => state.newTicket);\n\n const handleParentChange = (event) => {\n //props?.onParentChanged(event.value);\n console.log('handleParentChange', event);\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 !== 0)\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 handleRemove = () => {\n dispatch(SetHierarchy({ Parent_Ticket_Id: null, IsParent: null }));\n }\n\n\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 {/* ticket?.Is_Parent:{ticket?.Is_Parent ? 'yes' : 'no'} */}\n <HierarchyForm ticketId={null} isParent={ticket?.Is_Parent} parentCallId={ticket?.Parent_Call_Id} onRemoveHierarchy={handleRemove} onParentChange={handleParentChange} onChildChange={handleChildChange} onTicketSelected={onTicketSelected} />\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';\nimport { ITicketProps } from '../../../types/Ticket/ITicket';\nimport { PartialSpinny, SimpleSpinny, Spinny } from '../../Nav/Spinny';\n\n\nconst ExistingTickets: React.FC<ITicketProps> = (props) => {\n const { data: userProfile } = TicketApi.useGetUserProfileQuery();\n const contactUid = props.Contact?.UId || props.Company_Contact_Uid;\n const { data, isLoading } = TicketApi.useGetOpenEndUserTicketsQuery(contactUid, { skip: !contactUid })\n const { data: clientTickets, isLoading: clientLoading } = TicketApi.useGetOpenTicketsQuery({ companyId: props.Company_Id }, { skip: !props.Company_Id })\n\n //Remove the current contact's tickets from the client tickets\n let otherClientTickets = clientTickets\n if (data && otherClientTickets) {\n const contactTicketIds = data.map(t => t.ID);\n otherClientTickets = otherClientTickets.filter(t => !contactTicketIds.includes(t.ID));\n }\n\n if (isLoading || clientLoading) return <SimpleSpinny />\n\n return (\n <>\n <PanelBar expandMode='single'>\n <PanelBarItem selected={true} expanded={true} title={`(${data?.length}) ${props.Contact_Name}`} >\n <TicketGrid data={data} />\n </PanelBarItem>\n <PanelBarItem selected={true} expanded={false} title={`(${otherClientTickets?.length}) ${props.Company_Name}`} >\n <TicketGrid data={otherClientTickets} 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';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { ITicketContact } from '../../types/Ticket/ITicketContact';\nimport { Link } from 'react-router-dom';\n\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 [bindData, setBindData] = React.useState<IAsset[]>(null)\n const [initialSort, setInitialSort] = React.useState<boolean>(false)\n\n useEffect(() => {\n if (data) {\n let newData = data?.slice();\n // if (currentIds?.length && !initialSort) {\n\n // //Sort data and put selected assets at the top ONLY the first time this loads\n // newData = newData.sort((a, b) => {\n // if (currentIds?.indexOf(a.ID) > -1 && currentIds?.indexOf(b.ID) === -1) return -1\n // })\n // console.log('newDsetBindData sorted');\n // setInitialSort(true)\n // }\n // console.log('newDsetBindData', currentIds?.length, initialSort);\n setBindData(props.locationId ? newData?.filter(d => d.Contact_Id !== props.contactId) : newData)\n }\n }, [data, currentIds]);\n\n\n const columns = [\n {\n title: userProfile?.Phrases.Contact,\n field: \"Contact_Name\",\n show: props.showContactLinkColumn,\n filter: \"text\",\n orderIndex: 0\n },\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, sort: null })\n setStateColumns(userColumns)\n }, [userGridState])\n\n\n const onColumnsSubmit = (columnsState) => {\n setStateColumns(columnsState);\n\n persistUserState(dataState, columnsState);\n };\n\n const contactSelected = (e: IAsset) => {\n let newArray = [...props.associatedContacts];\n let found = newArray?.filter(a => a.Contact_Id === e.Contact_Id)\n if (found?.length)\n newArray.splice(newArray?.indexOf(found[0]), 1)\n else\n newArray.push({ Contact_Id: e.Contact_Id } as ITicketContact);\n\n props.onContactChange({ value: newArray });\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 className='asset-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 headerCell={(e) => <SvgIcon icon={svg.linkIcon} className='m-1' />}\n cell={(e) => {\n if (e.rowType === 'groupHeader') return null;\n return (\n <td style={{ textAlign: 'center' }} className='chk'>\n <Checkbox checked={currentIds?.indexOf(e.dataItem[\"ID\"]) > -1} onChange={() => assetSelected(e.dataItem)} />\n </td>)\n }}\n />\n\n {props.showContactLinkColumn && <Column width={50} locked={true} reorderable={false}\n key={nanoid()}\n field=\"\"\n headerCell={(e) => <div title='Add associated contact'><SvgIcon icon={svg.plusOutlineIcon} className='m-1' /></div>}\n cell={(e) => {\n if (e.rowType === 'groupHeader') return null;\n return (\n <td style={{ textAlign: 'center' }} className='chk'>\n <Checkbox disabled={!e.dataItem[\"Contact_Id\"]} title='Add associated contact' checked={props.associatedContacts?.find(a => a.Contact_Id === e.dataItem[\"Contact_Id\"]) !== undefined} onChange={() => contactSelected(e.dataItem)} />\n </td>)\n }}\n />}\n {columnsToRender}\n <Column orderIndex={100} width={50} locked={true} reorderable={false}\n key={nanoid()}\n field=\"\"\n cell={(e) => {\n if (e.rowType === 'groupHeader') return null;\n return (\n <td style={{ textAlign: 'center' }}>\n <Link target='_blank' title='View asset' to={'/deeplink?url=/Asset_Mgr/Asset.aspx?Asset_Id=' + e.dataItem[\"ID\"]} > <SvgIcon icon={svg.hyperlinkOpenSmIcon} className='m-1' /></Link>\n </td>)\n }}\n />\n </Grid>\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 onContactChange?: (e: { value: ITicketContact[] }) => void\n selectedAssets: number[],\n showContactLinkColumn?: boolean\n associatedContacts?: ITicketContact[]\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.newTicket);\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 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 </Label>\n <Input {...others} value={time} disabled={disabled} placeholder={'0:00'} className='time-field' onBlur={timeChanged} onChange={(e) => setTime(e.target.value?.toString())} />\n\n </>\n )\n}\n\nexport default Time","import React, { FunctionComponent, useRef } from 'react'\nimport { DatePicker, DateTimePicker, TimePicker } from \"@progress/kendo-react-dateinputs\";\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport { MaskedTextBox } from '@progress/kendo-react-inputs';\nimport Time from '../../Common/Time';\n\nexport const TimeField: FunctionComponent<FieldRenderProps> = props => {\n const { field, value, companyId, ...others } = props;\n const defVal = field?.VALUES?.length > 0 ? new Date(field?.VALUES[0]) : undefined //props.ConfigSettings?.Default === \"2\" ? new Date(Date.parse(props.ConfigSettings?.DefaultValue)) : (props.ConfigSettings?.Default === \"1\" ? new Date() : null);\n const fieldChanged = (e) => {\n let fieldChange = { ...field, VALUES: [e.value] }\n props.onChange({ value: fieldChange });\n }\n return (\n <div>\n <Time {...others} onChange={fieldChanged} value={defVal} />\n </div>\n\n )\n}\n\n\n","import React, { FunctionComponent } from 'react'\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport { DropDownList, DropDownListChangeEvent, MultiSelect } from '@progress/kendo-react-dropdowns';\nimport { ClientApi } from '../../../redux/api/ClientApi';\nimport { UserApi } from '../../../redux/api/UserApi';\n\nexport const EndUserField: FunctionComponent<FieldRenderProps> = props => {\n const { field, ...others } = props;\n const defClientId = field.ConfigSettings?.DefaultCompany;\n const { data: clients } = ClientApi.useGetClientListQuery(null);\n const defClient = clients?.filter(c => c.ID === defClientId)\n const { data: users, isFetching: usersLoading } = UserApi.useGetUsersQuery({ companyId: defClient?.length ? defClient[0].ID : null })\n const currentValues = field?.VALUES?.length > 0 ? users?.filter(i => field?.VALUES.map(v => parseInt(v)).indexOf(i.ID) > -1) : null;\n //const [selectedClient, setSelectedClient] = React.useState<IClient>(defClient?.length ? defClient[0] : null)\n const fieldChanged = (e) => {\n //console.log('fieldChanged',e);\n let fieldChange = { ...field, VALUES: [e.value.ID] }\n props.onChange({ value: fieldChange });\n }\n const clientChanged = (e: DropDownListChangeEvent) => {\n let fieldChange = { ...field, ConfigSettings: { ...field.ConfigSettings, DefaultCompany: e.value.ID } }\n props.onChange({ value: fieldChange });\n\n console.log('clientChanged', fieldChange)\n }\n const multiFieldChanged = (e) => {\n let fieldChange = { ...field, VALUES: e.value.map(v => v.ID) }\n props.onChange({ value: fieldChange });\n }\n const clientList = (\n <>\n <DropDownList {...others} valid={true} popupSettings={{ className: \"z500\" }} defaultItem={{ Company_Name: \"Select\" }} onChange={clientChanged} value={defClient?.length > 0 ? defClient[0] : undefined} data={clients} dataItemKey=\"ID\" textField=\"Company_Name\" />\n </>\n )\n\n if (field.ConfigSettings?.Display === \"0\") {\n //Dropdown\n return (\n <div>\n {clientList}\n <DropDownList {...others} loading={usersLoading} popupSettings={{ className: \"z500\" }} value={currentValues?.length ? currentValues[0] : null} onChange={fieldChanged} defaultItem={{ Value: \"Select\" }} data={users} textField=\"FullName\" dataItemKey='ID' />\n </div>)\n }\n else if (field.ConfigSettings?.Display === \"1\") {\n //Multi select\n return (\n <div>\n {clientList}\n <MultiSelect {...others} loading={usersLoading} popupSettings={{ className: \"z500\" }} value={currentValues} onChange={multiFieldChanged} data={users} textField=\"FullName\" dataItemKey='ID' />\n </div>\n )\n }\n\n}\n","import React, { FunctionComponent } from 'react'\nimport { DateField } from './FieldTypes/DateField';\nimport DropdownField from './FieldTypes/DropdownField';\nimport NumericField from './FieldTypes/NumericField';\nimport TextField from './FieldTypes/TextField';\nimport { Field, FieldRenderProps, FieldWrapper, } from '@progress/kendo-react-form';\nimport { ClientField } from './FieldTypes/ClientField';\nimport { StaffField } from './FieldTypes/StaffField';\nimport { Label, Error, Hint } from \"@progress/kendo-react-labels\";\nimport { TimeField } from './FieldTypes/TimeField';\nimport { EndUserField } from './FieldTypes/EndUserField';\nconst FormField: FunctionComponent<FieldRenderProps> = formRenderProps => {\n const {\n validationMessage,\n touched,\n label,\n id,\n valid,\n disabled,\n hint,\n showHint,\n optional,\n field,\n ...others\n } = formRenderProps;\n const labelValid = !validationMessage;\n const hintId = showHint ? `${id}_hint` : \"\";\n const errorId = validationMessage ? `${id}_error` : \"\";\n let description = field.Description && !field.Show_Tooltip && (\n <Hint>\n {field.Description}\n </Hint>\n )\n\n //Show tooltip popup\n const tool = (\n field.Show_Tooltip && field.Description &&\n <span className='k-font-icon k-i-info' title={field.Description} ></span>\n )\n\n const renderField = () => {\n switch (field.Field_Type_Id) {\n case 1:\n return TextField\n case 2:\n return DropdownField\n case 3:\n return DateField\n case 4:\n return TimeField\n case 5:\n return NumericField\n case 6:\n return StaffField\n case 7:\n return ClientField\n case 8:\n return EndUserField\n case 9:\n return NumericField\n default:\n return Error\n }\n }\n return (\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={labelValid}\n editorDisabled={disabled}\n optional={optional}\n >\n {tool} {field.Name} {validationMessage && (<Error id={errorId}> {validationMessage}</Error>)}\n </Label>\n {/* <em>{JSON.stringify(field.Is_Required)} - valid:{JSON.stringify(field.Required_To)} - {validationMessage}</em> */}\n {description}\n <Field\n {...others}\n field={field}\n id={id}\n name={id}\n component={renderField()}\n />\n <Hint id={hintId}>{hint}</Hint>\n\n </FieldWrapper>\n )\n}\n\nexport default FormField;","import { min } from 'lodash';\nimport React from 'react';\nimport FormField from './FormField';\nimport { Field, FieldRenderProps } from '@progress/kendo-react-form';\nimport { useParams } from 'react-router-dom';\n\nconst Fields: React.FC<FieldRenderProps> = (formRenderProps) => {\n const {\n id,\n disabled,\n valid,\n optional,\n validationMessage,\n formId,\n fields,\n form,\n ...others\n } = formRenderProps;\n\n let fieldWidth = form.Columns === 1 ? 'basis-full pl-1' : `basis-full p-1 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 ps-2 pr-2';\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\n return (\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 );\n};\n\nexport default Fields;","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\";\nimport Fields from './Fields'\nimport { skip } from '@progress/kendo-data-query/dist/npm/transducers'\nimport { useReduxSelector } from '../../redux/hooks'\n\n\nconst CustomFormControl: FunctionComponent<FieldRenderProps> = formRenderProps => {\n const {\n id,\n disabled,\n valid,\n optional,\n validationMessage,\n form,\n fields,\n ...others\n } = formRenderProps;\n\n //const { data: form } = Api.useGetFormQuery(formId, { skip: fields });\n\n if (!form)\n return <></>\n\n return (\n <>\n {!form?.Show_Tooltip && form?.Description && <div className='m-0 p-2 text-muted'>{form?.Description}</div>}\n <Fields valid={valid} validationMessage={validationMessage} form={form} fields={fields} {...others} />\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 CustomFormControl;","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 } 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 } from \"../Nav/Spinny\";\nimport { UserApi } from \"../../redux/api/UserApi\";\nimport { 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 } = 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 minimizeButton={() => null}\n initialWidth={1000}\n initialHeight={800}\n className=\"user-details cool-window\"\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: ComboBoxChangeEvent): 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: ComboBoxChangeEvent): 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\";\nimport { ProjectApi } from '../../../redux/api/ProjectApi';\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 } = ProjectApi.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\n const bindData = slas?.map(sla => {\n return { ...sla, SLA_Code: sla.SLA_Code || '' }\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\n\n return (\n <FieldWrapper>\n {label && <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 className='SLA-list' allowCustom={false} popupSettings={{ className: 'z500' }} filterable={false} value={defaultSLA?.length > 0 ? defaultSLA[0] : null} columns={slaColumns} onChange={onChange} data={bindData} 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, MenuItemModel } 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';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport { exclamationCircleIcon } from '@progress/kendo-svg-icons';\n\nconst StatusList: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n statusId,\n statusName,\n autoOpenSettings,\n autoCloseSettings,\n optional,\n onChange,\n statusNameOnly\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\n const defaultOpenStatus = data?.map(s => { return s.Statuses.find(ss => ss.Open_Default) }).find(s => s);\n const defaultClosedStatus = data?.map(s => { return s.Statuses.find(ss => ss.Closed_Default) }).find(s => s);\n const defaultOnHoldStatus = data?.map(s => { return s.Statuses.find(ss => ss.OnHold_Default) }).find(s => s);\n\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 statusNameOnly ? stat.Code : (t.Name + ' > ' + stat.Name);\n else\n return statusName;\n }).find(s => s);\n //console.log('selectedStatus', statusId, defaultStatusOrCurrent);\n\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\n const popRef = useRef(null);\n const dropRef = useRef(null);\n window.onclick = (e) => {\n //Check whether the user clicked out of the menu\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\n let statusTypeClicked = e.item.items\n //find the default open, on hold or closed status based on the categor that was clicked\n let selectedStatusId = e.item.id;\n if (statusTypeClicked && selectedStatusId === 1) //default open status\n selectedStatusId = defaultOpenStatus?.Id\n else if (statusTypeClicked && selectedStatusId === 2) //default on hold status\n selectedStatusId = defaultOnHoldStatus?.Id\n else if (statusTypeClicked && selectedStatusId === 0) //default closed status\n selectedStatusId = defaultClosedStatus?.Id\n else if (statusTypeClicked && selectedStatusId === 4) //No auto close default status\n return\n\n\n let selectedStatus = data?.map(s => { return s.Statuses.find(ss => ss.Id === selectedStatusId) }).find(s => s);\n console.log('itemSelected', selectedStatus, selectedStatusId)\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 const subItems = t.Statuses?.map((s) => {\n return {\n id: s.Id, text: s.Name,\n icon: s.Id === defaultStatusIdOrCurrent ? 'check' : 'blank',\n }\n })\n\n return {\n id: t.Id,\n text: t.Name,\n //svgIcon: subItems.find(s => s.id === defaultStatusIdOrCurrent) ? svg.checkIcon : null,\n items: subItems,\n icon: subItems.find(s => s.id === defaultStatusIdOrCurrent) ? 'check' : 'blank',\n } as MenuItemModel\n });\n\n const [showDatePrompt, setShowDatePrompt] = React.useState(false);\n const toggleDialog = () => {\n setShowDatePrompt((curValue) => !curValue);\n };\n const { data: userProfile } = Api.useGetUserProfileQuery();\n\n return (\n <>\n <FieldWrapper >\n {label && <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 ref={dropRef} opened={false} onOpen={onClick} value={selectedStatus} title={selectedStatus} />\n <Popup ref={popRef} anchor={anchor.current} show={show} offset={offSet.current} className='z500' style={{ width: 200 }}>\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 { TicketApi } from '../../../redux/api/TicketApi';\n\nconst PriorityList: FunctionComponent<FieldRenderProps> = props => {\n const { data: priorities } = TicketApi.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 && <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 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 dataConnected={[]}\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.useGetMyTypeListQuery(-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.Parent_Id === null)), [typesList])\n //console.log('Lets go',typeItems);\n const popRef = useRef(null);\n const dropRef = useRef(null);\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('TicketTypeList.tsx window click')\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;","\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 { 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}","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={`/ticket/${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 roleId,\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 === roleId);\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;","\n\nexport enum Setting {\n TICKET_SOURCE = 27,\n END_USER_NOTES_COLOR = 33,\n YOUR_TEAM_DEFAULT = 40,\n Mimic = 80,\n Timepicket_Interval = 93,\n Ticket_Action_Filter = 85,\n USER_TIMEZONE = 104,\n REVELATIONS_COLLAPSED_STATE = 121,\n TOOLBAR_STATE = 133,\n NEW_TICKET_DETAILS = 137,\n SIDEBAR_STATE = 138\n}\n","import { Api } from './BaseApi'\nimport { IHours, IStartEnd } from '../../types/System/IHours';\nimport { ICalendar } from '../../types/System/ICalendar';\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 getWorkHours: build.query<ICalendar[], { slaId?: number, start: string, end: string }>({\n query: (props) => `System/WorkHours?slaid=${props.slaId || 0}&start=${props.start || ''}&end=${props.end || ''}`,\n providesTags: [\"GetWorkHours\"],\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, useEffect, useMemo, useState } 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';\nimport { getLocaleDateTimeFormat } from '../../utils/utils';\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 const [date, setDate] = useState(new Date())\n useEffect(() => {\n setDate(new Date(actionDate))\n }\n , [actionDate])\n const selectedDate = actionDate ? new Date(actionDate) : new Date();\n\n if (!setting) return null\n\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 format={getLocaleDateTimeFormat()} onChange={onChange} steps={{ minute: timeInterval }} value={selectedDate} minTime={minTime} maxTime={maxTime} />\n {/* {JSON.stringify(actionDate)} - type: {typeof actionDate} */}\n </>\n )\n}\n\nexport default ActionDate;","import { mapTree, extendDataItem } from \"@progress/kendo-react-common\";\n\nexport const processTreeData = (data, state, fields) => {\n const { selectField, expandField, dataItemKey, subItemsField, textField } = fields;\n const { expanded, value, filter } = state;\n const filtering = Boolean(filter && textField && filter.value);\n\n const filterFunc = (_item, _textField, _subItemsField) => {\n if (_item[_textField].toLowerCase().includes(filter.value.toLowerCase())) {\n return true;\n } else {\n var foundItems = _item[subItemsField].filter(s => filterFunc(s, _textField, _subItemsField));\n return foundItems && foundItems.length > 0;\n }\n }\n\n const mapFunc = (item) => {\n var match = item[textField].toLowerCase().includes(filter.value.toLowerCase())\n if (match)\n return item;\n\n var foundItems = item[subItemsField].filter(subItem => {\n return filterFunc(subItem, textField, subItemsField);\n //return subItem[textField].toLowerCase().includes(filter.value.toLowerCase()) || item[textField].toLowerCase().includes(filter.value.toLowerCase());\n });\n if (match || foundItems.length > 0)\n return { ...item, [subItemsField]: foundItems.map(f => mapFunc(f)) };\n\n }\n\n\n //Custom filtering so it returns all children of a parent that matches the filter OR only children that match the filter\n const filteredData = filtering ? data.map(item => {\n //console.log('mapFunc', item);\n // item[subItemsField]?.filter(subItem => {\n // return filterFunc(subItem, textField, subItemsField);\n // })\n\n return mapFunc(item);\n //remove all sub items that don't match the filter\n // var foundItems = item[subItemsField].filter(subItem => {\n // return subItem[textField].toLowerCase().includes(filter.value.toLowerCase()) || item[textField].toLowerCase().includes(filter.value.toLowerCase());\n // });\n // return { ...item, [subItemsField]: foundItems };\n }).filter(f => f) : data;\n\n //console.log('processTreeData', filteredData)\n\n\n return mapTree(\n filteredData,\n subItemsField,\n (item) => {\n const props = {\n [expandField]: filtering || 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 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\";\nimport './Mentions.scss';\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 // console.log('Mentions', text)\n\n function handleNavigation(e: KeyboardEvent) {\n const defaultBehavior: ScrollIntoViewOptions = { behavior: \"smooth\", block: \"end\" };\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(idx);\n } else if (e.key === ARROWS.up) {\n idx = (scrollIndex - 1) % data.length;\n mention = data.at(idx);\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\n const focusEle = document.getElementById(\n `${mention.ID}-${mention.value}`\n );\n focusEle.scrollIntoView(defaultBehavior);\n setScrollIndex(idx);\n\n console.log('Scrolling to', mention.ID, mention.label)\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 className=\"mentions-popup\" anchor={containerRef.current} show>\n <ul>\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.startsWith('/') ? '.' + person.img : person.img}\n style={{ maxWidth: sideLength, maxHeight: sideLength }}\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 ms-1\">\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 25;\n case \"l\":\n return 40;\n default:\n return 40;\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 { EditorTools } from \"@progress/kendo-react-editor\";\nimport { isMobile } from \"react-device-detect\";\n\nconst {\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\nexport const CommonTools: any[] = [\n [Bold, Italic, Underline, Strikethrough],\n [AlignLeft, AlignCenter, AlignRight, AlignJustify],\n [OrderedList, UnorderedList],\n FontSize,\n FontName,\n //V25 - too much space\n //FormatBlock,\n [Undo, Redo],\n [Link, Unlink, ViewHtml],\n];\n\nexport const MobileTools: any[] = [\n [Bold, Italic, Underline, Strikethrough],\n [OrderedList, UnorderedList],\n [Undo, Redo]\n];\n","import {\n Editor,\n EditorChangeEvent,\n ProseMirror,\n EditorUtils\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\";\nimport { CommonTools, MobileTools } from \"./CommonTools\";\nimport { isMobile } from \"react-device-detect\";\n\nconst TextEditor = () => {\n const { EditorState, EditorView } = ProseMirror;\n const { imageResizing } = EditorUtils;\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.newTicket.TaggedUsers\n );\n const HTML_Notes = useReduxSelector(\n (state) => state.actionDetails.action.HTML_Notes\n );\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\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 //dispatch(SetHTML_Notes(e.html));\n }\n\n const mentionsProps: IMentionsProps = {\n handleOnClick: handleOnClick,\n containerRef: containerRef,\n text: mentionsText,\n };\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 //Auto focus\n console.warn('Auto focus', event);\n window.setTimeout(() => {\n event.target?.focus();\n }, 100);\n\n\n //IMage resize plugin\n const { plugins, doc } = event.viewProps.state;\n\n return new EditorView(\n { mount: event.dom },\n {\n ...event.viewProps,\n state: EditorState.create({\n doc,\n plugins: [...plugins, imageResizing()]\n })\n }\n );\n };\n\n\n\n return (\n <div ref={containerRef}>\n <Editor\n resizable={true}\n // style={{ height: \"100%\" }}\n contentStyle={{ height: '100%' }}\n onChange={handleOnChange}\n onMount={onMount}\n value={HTML_Notes || ''}\n tools={isMobile ? MobileTools : CommonTools}\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, useMemo } from 'react'\nimport StaffList from '../../User/ListControls/StaffList';\nimport { IAction, IActionUI } from '../../../types/Action/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 || userProfile?.Features?.External_Interface })\n const addTimeSettings = useMemo(() => { return { 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})` } }, [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 }) => {\n console.log('billChanged', e.value)\n fireUpdate({ ...action, Billable_Time: e.value })\n }\n\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 }) => {\n console.log('dateChanged', e.value)\n fireUpdate({ ...action, Action_Dt: e.value?.toISOString() })\n }\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\n const internalUser = !userProfile?.Features.External_Interface;\n\n return (\n <>\n <div className={`inline-block w-full align-top ${internalUser && 'lg:w-4/5'}`}>\n {internalUser && <div id=\"collapseActionheader\" className=\"accordion-collapse show\" aria-labelledby=\"headingOne\" data-bs-parent=\"#collapseActionheader\">\n <div className=\"accordion-body\">\n <div className=' '>\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 roleId={action?.Role_Id}\n component={RoleList}\n />\n </div>\n {userProfile?.Features?.Quick_Notes && <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 </div>\n </div>\n </div>}\n <ActionNoteTextEditor />\n </div>\n {internalUser &&\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 === true}\n onChange={pinChanged}\n />\n {/* action?.Pinned = {action?.Pinned === false ? 'yes' : 'no'} */}\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 {/* {!userProfile?.Features.External_Interface && <AINotes />} */}\n </div>}\n </>\n )\n}\n\nexport default ActionNote;","import { MultiSelect } from '@progress/kendo-react-dropdowns';\nimport { FieldRenderProps, FieldWrapper } from '@progress/kendo-react-form';\nimport React, { FunctionComponent, useState } from 'react'\nimport { Label } from \"@progress/kendo-react-labels\";\nimport { ClientApi } from '../../redux/api/ClientApi';\nimport { Api } from '../../redux/api/BaseApi';\nimport {\n Hint,\n} from \"@progress/kendo-react-labels\";\n\nconst ClientTypeList: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n clientTypeIds,\n onChange,\n placeholder,\n ...others\n } = props;\n\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const [opened, setOpened] = useState(false);\n const [values, setValues] = useState([]);\n const { data: clientTypes } = ClientApi.useGetClientTypesQuery()\n const selectClientTypes = clientTypes?.filter(ct => clientTypeIds?.indexOf(ct.ID) > -1);\n\n const handleSingleChange = (event) => {\n console.log('handleSingleSelect', event)\n let foundItem = values.filter(v => v.ID === event.value.ID)\n let newArray = [...values] //clone\n\n if (foundItem?.length > 0) {\n newArray.splice(values.indexOf(foundItem[0]), 1)\n setValues(newArray);\n }\n else {\n newArray = [...values, event.value]\n setValues(newArray);\n }\n }\n\n const itemRender = (li, itemProps) => {\n let foundItem = values?.filter(v => v.ID === itemProps.dataItem[\"ID\"])\n const itemChildren = (\n <span>\n <input type=\"checkbox\" checked={foundItem?.length > 0} onChange={() => console.log('Changed')}\n onMouseDown={(e) => { e.preventDefault(); }}\n />\n {li.props.children}\n </span>\n );\n return React.cloneElement(li, li.props, itemChildren);\n }\n\n const ctFilterChangeHandler = (e) => {\n console.log('ctFilterChangeHandler', e)\n }\n\n return (\n <FieldWrapper>\n <Label\n editorId={id}\n editorValid={valid}\n editorDisabled={disabled}\n optional={optional}>\n {label}\n </Label>\n {/* <DropDownList opened={opened}\n onFocus={() => { setOpened(true) }}\n onBlur={() => { setOpened(false) }}\n title={values.map(v => v.Company_Type_Name).join(', ')}\n value={!values?.length ? { Company_Type_Name: 'Filter...' } : values?.length === 1 ? { ID: 0, Company_Type_Name: 'Check All' } : { Company_Type_Name: `${values?.length} items selected` }}\n data={clientTypes}\n textField=\"Company_Type_Name\"\n itemRender={itemRender}\n defaultItem={{ ID: 0, Company_Type_Name: 'Check All' }}\n onChange={handleSingleChange}\n /> */}\n <MultiSelect onChange={onChange}\n disabled={disabled}\n opened={opened}\n value={selectClientTypes}\n onFocus={() => { setOpened(true) }}\n onBlur={() => { setOpened(false) }}\n placeholder={placeholder || 'Filter...'}\n data={clientTypes}\n textField=\"Company_Type_Name\"\n />\n {disabled && (\n <Hint direction={\"start\"}>\n Settings are not editable due to {userProfile?.Phrases.CallPhrase} Access Control permissions\n </Hint>\n )}\n </FieldWrapper>\n )\n}\n\nexport default ClientTypeList","import { Field } from '@progress/kendo-react-form';\nimport React from 'react'\nimport { Api } from '../../redux/api/BaseApi';\nimport { UserApi } from '../../redux/api/UserApi';\nimport { IClientTypeFilter } from '../../types/User/IClientTypeFilter';\nimport ClientTypeList from './ClientTypeList'\n\nexport const ClientTypeFilter = () => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { data: clientTypeFilters } = UserApi.useGetClientTypeFiltersQuery();\n const [saveClientTypeFilter] = UserApi.usePostClientTypeFilterMutation();\n const disabled = userProfile?.Features.Client_Type_Filter_Disabled;\n\n const clientTypeListChanged = (e) => {\n console.log('clientTypeListChanged', e, e.target.value)\n let currentTypeIds = clientTypeFilters?.map(ct => ct.Company_Type_Id)\n let newIds = e.value.map(ct => ct.ID)\n //Added\n e.value.map(ct => currentTypeIds.indexOf(ct.ID) === -1 && saveClientTypeFilter({ Company_Type_Id: ct.ID, Checked: true } as IClientTypeFilter))\n\n //Removed\n clientTypeFilters?.filter(c => c.Checked).map(cur => newIds.indexOf(cur.Company_Type_Id) === -1 && saveClientTypeFilter({ Company_Type_Id: cur.Company_Type_Id, Checked: false } as IClientTypeFilter))\n }\n return (\n <Field\n disabled={disabled}\n label={`${userProfile?.Phrases.Client} Type Filter`}\n name=\"cleintTtypeList\"\n onChange={clientTypeListChanged}\n component={ClientTypeList}\n clientTypeIds={clientTypeFilters?.filter(c => c.Checked).map(ct => ct.Company_Type_Id)}\n />\n\n )\n}\n","import { FieldRenderProps } from '@progress/kendo-react-form';\nimport { ListBox, ListBoxItemClickEvent, ListBoxToolbar } from '@progress/kendo-react-listbox';\nimport React, { FC, useEffect } from 'react'\nimport { UserApi } from '../../../redux/api/UserApi';\nimport { useReduxDispatch } from '../../../redux/hooks';\nimport { IStaff } from '../../../types/IStaff';\nimport * as TicketSlice from '../../../slices/TicketSlice';\nimport UserFynd from './UserFynd';\n\nconst BulkContacts: FC<FieldRenderProps> = props => {\n const {\n bulkContactIds,\n onChange,\n } = props;\n\n const dispatch = useReduxDispatch();\n const { data: bulkUsers } = UserApi.useGetUsersByIdsQuery(bulkContactIds?.length ? bulkContactIds?.join(',') : '0');\n //const { data: assContactConfig } = Api.useGetAssContactConfigQuery(companyTypeId, { skip: !companyTypeId });\n //const [filter, setFilter] = useState<FilterDescriptor>(null);\n //const [contactsIds, setContactIds] = React.useState(bulkContactIds || []);\n const [selectedId, setSelectedId] = React.useState();\n const SELECTED_FIELD = \"selected\";\n const bulkUsersFormatted = setDisplayName(bulkUsers) || [];\n\n function setDisplayName(data) {\n return data?.map(a => {\n return {\n ...a,\n \"Display_Name\":\n a[a.Secondary_User_Classification] ?\n `${a.FullName} - ${a[a.Secondary_User_Classification]}`\n : a.FullName,\n [SELECTED_FIELD]: a.ID === selectedId\n }\n })\n }\n\n // const bulkContactSelected = (e) => {\n // console.log('bulkContactSelected', contactsIds, e.Contact_Id, [...contactsIds, e.Contact_Id])\n\n // let newArray = [...contactsIds, e.Contact_Id];\n // setContactIds(newArray)\n\n // onChange({ value: newArray.map(g => { return { ID: g } as IStaff }) });\n\n // console.log('bulkContactSelected', newArray?.length)\n // }\n\n\n const handleToolBarClick = (e) => {\n let toolName = e.toolName || \"\";\n if (toolName === \"remove\") {\n let newArray = [...bulkContactIds];\n newArray.splice(newArray.indexOf(selectedId), 1)\n //setContactIds(newArray)\n dispatch(TicketSlice.SetBulkContacts(newArray.map(g => { return { ID: g } as IStaff })))\n }\n };\n\n //Set the Client\n useEffect(() => {\n //Single end user\n //if (bulkUsers.length === 1)\n // dispatch(TicketSlice.SetEndUserUid(bulkUsers[0].UId))\n if (bulkUsers?.length > 0) {\n //No client / project etc.\n let clients = [...new Set(bulkUsers.map(item => item.Company_Id))];\n console.log('multiple clients?', clients)\n dispatch(TicketSlice.SetEndUserUid(null))\n dispatch(TicketSlice.SetEndUserName(\"\"))\n dispatch(TicketSlice.SetEndUser(null))\n dispatch(TicketSlice.SetForm(null))\n if (clients.length === 1) {\n dispatch(TicketSlice.SetClient(clients[0]))\n } else {\n dispatch(TicketSlice.SetProject(null))\n }\n }\n\n }, [bulkUsers])\n\n return (\n <div>\n <ListBox\n style={{ height: 100, width: \"100%\" }}\n data={bulkUsersFormatted}\n textField=\"Display_Name\"\n selectedField={SELECTED_FIELD}\n onItemClick={(e: ListBoxItemClickEvent) => setSelectedId(e.dataItem.ID)}\n toolbar={() => {\n return (\n <ListBoxToolbar\n dataConnected={null}\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.newTicket.TaggedUsers\n );\n const Call_Desc = useReduxSelector(\n (state) => state.newTicket.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 { MultiColumnComboBox } from '@progress/kendo-react-dropdowns'\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport React, { FunctionComponent, useRef } from 'react'\nimport {\n Label,\n Error,\n} from \"@progress/kendo-react-labels\";\nimport { ProjectApi } from '../../redux/api/ProjectApi';\nimport { IWorkstream } from '../../types/Gameplan/IWorkstream';\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 showValidationMessage = validationMessage;\n const errorId = showValidationMessage ? `${id}_error` : \"\";\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.newTicket.ticket\n );\n const projectTimeRemaining = selectedProject?.Available_Time - (Effort_Mins | 0);\n\n return (<>\n {/* <div className='inline-block w-1/2 sm:w-1/2 sm:pl-3'>\n <Field\n id={\"workstreamAssignment\"}\n name={\"workstreamAssignment\"}\n label={\"Assigned To\"}\n onChange={(e) => SetWorkstreamAssignment(e.value)}\n component={WorkstreamAssignment}\n staff={Workstream_Assignment} />\n </div> */}\n <div className='inline-block w-1/2 sm:w-1/2 sm:pl-3 align-top'>\n <Field\n id={\"workstream\"}\n name={\"workstream\"}\n label={\"workstream\"}\n component={WorkstreamList}\n onChange={e => dispatch(SetWorkstream(e.value))}\n projectId={Project_Id}\n required={true}\n value={{ Workstream_Id: WorkstreamId, Workstream_Name: WorkstreamName } as IWorkstream} />\n </div>\n <div className='inline-block w-1/2 sm:w-1/4 sm:pl-3'>\n <div>\n <Field\n id={\"workstreamStart\"}\n name={\"workstreamStart\"}\n label={\"Start\"}\n required={true}\n showValidationMessage={true}\n onChange={(e) => {\n console.log('start date changed', e.value)\n dispatch(SetStartDate(e.value))\n }}\n component={DatePicker}\n value={Start_Date} />\n </div>\n <div>\n <Field\n id={\"workstreamEnd\"}\n name={\"workstreamEnd\"}\n label={\"End\"}\n required={true}\n showValidationMessage={true}\n onChange={(e) => dispatch(SetEndDate(e.value))}\n component={DatePicker}\n value={End_Date} />\n </div>\n <div>\n <Field\n id={\"effort\"}\n name={\"effort\"}\n label={\"Effort\"}\n component={Time}\n mins={Effort_Mins}\n onChange={(e) => e.value && dispatch(SetEffort(e.value))}\n /> hrs / <span className={projectTimeRemaining > 0 ? 'k-text-success' : 'k-text-error'}>{toDigital(projectTimeRemaining, true)} {projectTimeRemaining > 0 ? 'remaining' : 'over'}</span>\n </div>\n </div>\n </>)\n}\n\nexport default TicketWorkstream;","import { FieldRenderProps, FieldWrapper } from \"@progress/kendo-react-form\";\nimport { FunctionComponent, useEffect, useRef, useState } from \"react\";\nimport { Api } from \"../../redux/api/BaseApi\";\nimport { Label, Error } from \"@progress/kendo-react-labels\";\nimport { MultiColumnComboBox, MultiSelect, MultiSelectFilterChangeEvent } from \"@progress/kendo-react-dropdowns\";\nimport { filterBy } from \"@progress/kendo-data-query\";\nimport { UserApi } from '../../redux/api/UserApi';\nimport { Checkbox, NumericTextBox } from \"@progress/kendo-react-inputs\";\nimport React from \"react\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { IWorkstreamAssignment } from \"../../types/Ticket/IWorkstreamAssignment\";\nimport { toDigital } from \"../../utils/utils\";\n\nconst WorkstreamAssignment: FunctionComponent<FieldRenderProps> = props => {\n const {\n label,\n id,\n valid,\n disabled,\n optional,\n teamId,\n staff,\n showMe,\n effort,\n assignmentChanged,\n validationMessage,\n } = props;\n console.log('WorkstreamAssignment staff=', staff)\n const { data: userProfile } = Api.useGetUserProfileQuery();\n //const assignedStaff = staff?.map(ass => { return { Contact_Name: ass?.Contact_Name, Contact_Id: ass.Contact_Id } as IWorkstreamAssignment });\n let { data: staffList, isLoading: staffLoading } = UserApi.useGetStaffQuery({ teamId: teamId, includeQueues: true, includeStaffPlusForCompanyId: 0 });\n const bindStaff = staffList?.map(s => {\n return {\n Contact_Name: s?.Full_Name,\n Contact_Id: s.ID,\n Assigned_Percent: staff?.find(a => a.Contact_Id === s.ID)?.Assigned_Percent || 0,\n Assigned_Mins: (effort | 0) * (staff?.find(a => a.Contact_Id === s.ID)?.Assigned_Percent | 0) / 100\n } as IWorkstreamAssignment\n })\n\n const [staffFiltered, setStaff] = useState([])\n const [isOpen, setOpen] = useState(false)\n\n const columns = [\n { field: 'Contact_ID', header: '', width: '30px' },\n { field: 'Contact_Name', header: 'Workstream', width: '300px' },\n { field: 'Assigned_Percent', header: 'Percent', width: '50px' },\n { field: 'Time', header: 'Time', width: '50px' }\n ];\n\n const onFilter = (event: MultiSelectFilterChangeEvent) => {\n console.log('Filter', event);\n setStaff(filterBy(staffList?.slice(), event.filter));\n }\n\n useEffect(() => {\n if (showMe)\n staffList = staffList?.map(s => s.ID === userProfile?.Id ? { ...s, Full_Name: '<Me>' } : s);\n\n setStaff(staffList)\n }, [staffList]);\n\n const itemRender = (li, itemProps) => {\n const itemChildren = (\n <> <div>\n <input\n type=\"checkbox\"\n name='selected'\n checked={itemProps.selected}\n onChange={(e) => itemProps.onClick(itemProps.index, e)}\n style={{ paddingRight: '10px' }}\n />\n <span style={{ display: 'inline-block', width: '200px', paddingLeft: '10px' }}>{li.props.children}</span>\n <span style={{ display: 'inline-block', width: '200px' }}>\n <input style={{ width: '45px', color: 'black', textAlign: 'left' }}\n onClick={(e) => {\n console.log('click textbox', e, itemProps)\n e.preventDefault();\n e.currentTarget.select();\n e.stopPropagation();\n }}\n onBlur={(e) => {\n console.log('onChange textbox', e, staff)\n //Update the percentage\n const percent = parseInt(e.currentTarget.value);\n let currentStaff = staff?.slice() || [];\n const foundIndex = currentStaff.findIndex(c => c.Contact_Id === itemProps.dataItem.Contact_Id)\n foundIndex > -1\n ? currentStaff[foundIndex] = { ...currentStaff[foundIndex], Assigned_Percent: percent }\n : currentStaff.push({ Contact_Id: itemProps.dataItem.Contact_Id, Assigned_Percent: percent } as IWorkstreamAssignment);\n assignmentChanged({ value: currentStaff });\n }}\n type=\"text\" name={'Percent'} defaultValue={itemProps.dataItem.Assigned_Percent} disabled={!itemProps.selected} autoFocus={true}\n />%\n </span>\n <label>{toDigital(itemProps.dataItem.Assigned_Mins)}</label>\n </div>\n </>\n );\n return React.cloneElement(li, li.props, itemChildren);\n }\n const handleCheckboxChange = (event, dataItem) => {\n\n };\n\n const itemRender2 = (li, props) => {\n const children = columns.map((col, i) => {\n return col.field === \"Contact_ID\" ? (\n <span\n className=\"k-table-td\"\n style={{\n width: col.width,\n }}\n key={col.width + i}\n >\n <Checkbox\n onChange={(e) => handleCheckboxChange(e, props.dataItem)}\n />\n </span>\n ) : (\n <span\n className=\"k-table-td\"\n style={{\n width: col.width,\n }}\n key={col.width + i}\n >\n {props.dataItem[col.field]}\n </span>\n );\n\n });\n return React.cloneElement(\n li,\n {\n ...li.props,\n },\n children\n );\n };\n\n useEventListener(\"click\", (e: MouseEvent) => {\n console.log('click', e)\n if (e.target && (e.target as HTMLElement)?.className?.indexOf && (e.target as HTMLElement)?.className?.indexOf('k-input-inner') == -1)\n setOpen(false);\n });\n const errorId = validationMessage ? `${id}_error` : \"\";\n const isValid = !validationMessage;\n const wrapper = useRef(null);\n return (\n <FieldWrapper >\n <Label\n editorId={id}\n editorValid={isValid}\n editorDisabled={disabled}\n optional={optional}>\n {label} {validationMessage && (<Error id={errorId}>{validationMessage}</Error>)}\n </Label>\n <div className={\"k-form-field-wrap\"} ref={wrapper}>\n <MultiSelect header={<div><span style={{ display: 'inline-block', width: '30px' }}> </span><span style={{ display: 'inline-block', width: '190px' }}>Name:</span><span style={{ display: 'inline-block', width: '200px' }}>Percent:</span><span>Time:</span></div>}\n valid={isValid} validationMessage={validationMessage} opened={isOpen} onOpen={() => setOpen(true)} itemRender={itemRender} filterable={false} popupSettings={{ className: 'z500' }} onFilterChange={onFilter} onChange={assignmentChanged} data={bindStaff} value={staff} dataItemKey=\"Contact_Id\" textField=\"Contact_Name\" loading={staffLoading} />\n </div>\n </FieldWrapper>\n )\n}\n\nexport default WorkstreamAssignment;","import { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs'\nimport React, { useEffect } from 'react'\nimport { Api } from '../../../../redux/api/BaseApi';\nimport { useReduxDispatch, useReduxSelector } from '../../../../redux/hooks';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport {\n Notification,\n} from \"@progress/kendo-react-notification\";\nimport { Icon } from '@progress/kendo-react-common';\nimport { SetLastFlaggedNoteConfirmedId } from '../../../../slices/TicketSlice';\nimport { ClientApi } from '../../../../redux/api/ClientApi';\nimport { ITicket } from '../../../../types/Ticket/ITicket';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { TextArea } from '@progress/kendo-react-inputs';\nimport './FlaggedNotes.scss'\nimport { PartialSpinny } from '../../../Nav/Spinny';\nimport { setFlaggedNotesExist, setFlaggedNotesExpanded } from '../../../../slices/TicketDetailUISlice';\nimport { ProjectApi } from '../../../../redux/api/ProjectApi';\n\nconst FlaggedNotes = ({ ticket, showPopup, showNotes }: { ticket: ITicket, showPopup: boolean, showNotes?: boolean }) => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { Company_Contact: endUserId, Company_Address_Id, Company_Id } = ticket//useReduxSelector(s => s.newTicket.ticket)\n const lastFlaggedNoteConfirmedId = useReduxSelector(s => s.newTicket.lastFlaggedNoteConfirmedId)\n const { flaggedNotes } = useReduxSelector(s => s.ticketDetailsUI)\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 { data: project, isFetching: projectFetching } = ProjectApi.useGetProjectQuery(ticket.Project_Id, { skip: !ticket.Project_Id });\n const [updateNotes, { isLoading }] = UserApi.useUpdateNotesMutation();\n const [popupVisible, setPopupVisible] = React.useState(false);\n const [editVisible, setEditVisible] = React.useState(false);\n const [notes, setNotes] = React.useState<string>();\n const dispatch = useReduxDispatch();\n\n useEffect(() => {\n setNotes(contact?.Notes)\n }, [contact?.Notes])\n\n //Show the popup when the contact has flagged notes.\n useEffect(() => {\n const clientNotes = client?.Flag_Notes && client?.Notes\n const projectNotes = project?.Flag_Notes && project?.Notes?.length > 0\n const officeNotes = office?.Flag_Notes && office?.Notes\n const contactNotes = contact?.Display_Notes && contact?.Notes\n const isLoading = contactFetching || officeFetching || clientFetching || projectFetching\n\n if ((clientNotes || officeNotes || contactNotes || projectNotes) && !isLoading && showPopup && 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 saveFlaggedNotes = () => {\n notes && updateNotes({ uid: contact?.UId, Notes: notes }).unwrap();\n setEditVisible(false);\n }\n\n const clientNotes = (showNotes || client?.Flag_Notes) && client?.Notes\n const projectNotes = (showNotes || project?.Flag_Notes) && project?.Notes?.length > 0\n const officeNotes = (showNotes || office?.Flag_Notes) && office?.Notes\n const contactNotes = (showNotes || contact?.Display_Notes) && contact?.Notes\n const hasAnyNotes = clientNotes || projectNotes || officeNotes || contactNotes\n const hasAnyFlaggedNotes = client?.Flag_Notes || project?.Flag_Notes || office?.Flag_Notes || contact?.Display_Notes\n\n //Update global state to show the flagged notes expanded if there are any notes.\n useEffect(() => {\n dispatch(setFlaggedNotesExpanded(hasAnyFlaggedNotes))\n\n dispatch(setFlaggedNotesExist(hasAnyNotes))\n\n }, [hasAnyNotes, hasAnyFlaggedNotes])\n\n\n if ((!hasAnyNotes) || !endUserId) return <></>;\n\n const display = <div key='5'>\n {contactNotes && <Button key='4' className='edit-button off' svgIcon={svg.pencilIcon} fillMode='flat' onClick={() => setEditVisible(true)}></Button>}\n {contactNotes && <div key='6'><b>{contact.FullName}</b> - {contact?.Notes.split('\\n').map(str => <>{str}<br /></>)}</div>}\n {officeNotes && <div key='7'><b>{office.Address_Name}</b> - {office?.Notes.split('\\n').map(str => <>{str}<br /></>)}</div>}\n {projectNotes && <div key='8'><b>{project.Project_Name}</b> - {project?.Notes.split('\\n').map(str => <>{str}<br /></>)}</div>}\n {clientNotes && <div key='9'><b>{client.Company_Name}</b> - {client?.Notes.split('\\n').map(str => <>{str}<br /></>)}</div>}\n </div>\n\n\n\n return (\n <div className='flagged-notes'>\n {flaggedNotes?.expanded && <Notification key='1'\n type={{\n style: \"info\",\n icon: true,\n }}\n style={{ 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 &&\n <Dialog key='2' width={Math.min(500, window.innerWidth)} 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', color: '#fff' }}\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 {editVisible && <Dialog key='3' width={Math.min(500, window.innerWidth)} height={270} className='cool-window' title={<><Icon name='edit' style={{ fontSize: '20px' }} className='pr-6'></Icon>Edit Flagged Notes</>} onClose={() => setEditVisible(false)} >\n {isLoading && <PartialSpinny />}\n <TextArea defaultValue={contact.Notes} value={notes} onChange={(e) => setNotes(e.value)} placeholder='Contact notes' rows={6} />\n <DialogActionsBar>\n <Button\n style={{ backgroundColor: '#f5f5f5', color: '#fff' }}\n className=\"k-button k-button-md k-rounded-md k-button-solid k-button-solid-base k-button-solid-primary\"\n onClick={() => saveFlaggedNotes()}\n >\n Save\n </Button>\n <Button onClick={() => setEditVisible(false)} fillMode='outline'>Cancel</Button>\n </DialogActionsBar>\n </Dialog>}\n </div>\n )\n}\n\nexport default FlaggedNotes","import React from 'react'\nimport { Api } from '../../redux/api/BaseApi';\nimport { ITicket } from '../../types/Ticket/ITicket';\n\nexport default function TimelineImage(ticket: ITicket) {\n //const { ticket } = useReduxSelector(state => state.newTicket);\n\n const { data: imageData } = Api.useGetTimelineImageQuery({ projectId: ticket.Project_Id, priorityId: ticket.Priority_Id, slaId: ticket.SLA_Id });\n const { data: ticketImageData } = Api.useGetTicketTimelineImageQuery(ticket.ID, { skip: !ticket.ID });\n\n return (\n (ticket?.ID ?\n <img alt='timeline' src={ticketImageData}></img>\n : <img alt='timeline' src={imageData}></img>\n ))\n}\n","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 CustomFormControl 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 { ClientTypeFilter } from '../../ClientType/ClientTypeFilter';\nimport { ITemplateListItem } from '../../../types/Ticket/ITemplate';\nimport * as ActionSlice from '../../../slices/ActionSlice';\nimport BulkContacts from '../ListControls/BulkContacts';\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/FlaggedNotes';\nimport { DropDownListChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { IClient } from '../../../types/Client/IClient';\nimport TimelineImage from '../TimelineImage';\nimport { Label } from \"@progress/kendo-react-labels\";\nimport * as FileSlice from '../../../slices/FileSlice';\nimport { ProjectApi } from '../../../redux/api/ProjectApi';\n\nconst SECTION_REQUIRED = \"section-required\";\n\nconst NewTicketDetails: 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, selectedForm } = useReduxSelector(state => state.newTicket);\n const { action: initialAction } = useReduxSelector(state => state.actionDetails);\n const { data: userProfile, isFetching: profileIsLoading } = Api.useGetUserProfileQuery();\n const { data: formData, isFetching: formIsLoading } = ProjectApi.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 } = ProjectApi.useGetFormConfigQuery();\n const { data: selectedProject, isFetching: projectIsLoading } = ProjectApi.useGetProjectQuery(ticket.Project_Id, { skip: !ticket.Project_Id });\n const { data: defaultProjectAssignment, isFetching: defAssignmentLoading } = ProjectApi.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 } = ProjectApi.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 } = TicketApi.useGetPriorityListQuery(selectedProject?.Priority_Set_Id, { skip: !selectedProject?.Priority_Set_Id });\n const { data: typesList } = TicketApi.useGetMyTypeListQuery(-1)\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) => {\n console.log('fieldChanged in TicketDetails', e)\n dispatch(TicketSlice.SetField(e.value));\n\n }\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 console.log('handleSubmit started ')\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 = `/ticket/${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 && (typesList?.length > 0) && !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-nope .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\n\n return (\n <>\n {/* {/* Success dialog */}\n {confirmDialogProps.visible && <TicketSavedDialog toggleDialog={() => setConfirmDialogProps({ ...confirmDialogProps, visible: false })} {...confirmDialogProps} />}\n <Form onSubmit={handleSubmit} validator={formValidator} ignoreModified={true} id='ticket-form'\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>\n {/* formRenderProps:{JSON.stringify(formRenderProps)} */}\n <div id='error-summary' ref={divErrorRef}>\n {/* Validation */}\n {saveTicketError?.[\"data\"] && saveTicketError?.[\"data\"] && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n {saveTicketError[\"data\"]?.Message || saveTicketError[\"data\"]}\n </div>)}\n {bulkSaveTicketError?.[\"data\"] && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n An unexpected application error occurred: \n {bulkSaveTicketError[\"data\"]?.Message || bulkSaveTicketError[\"data\"]}\n </div>)}\n {formRenderProps.errors &&\n formRenderProps.errors.VALIDATION_SUMMARY && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n {formRenderProps.errors.VALIDATION_SUMMARY}\n </div>\n )}\n\n </div>\n <div className='new-ticket '>\n <PanelBar isControlled={true} expanded={Object.assign([], formState)} onSelect={handleSelect}>\n <PanelBarItem id=\"details\" selected={true} title='Details' icon='user' className={formRenderProps.errors.top ? SECTION_REQUIRED : null} >\n <div>\n {userProfile?.Features.Show_Client_Type_Filter && formState.indexOf('client-type-filter') > -1 &&\n <div>\n <Field\n id={\"clientTypeFilter\"}\n name={\"clientTypeFilter\"}\n component={ClientTypeFilter}\n />\n </div>}\n <div>\n <div className='inline-block w-full'>\n\n <Field\n id={\"endUser\"}\n name={\"endUser\"}\n label={userProfile?.Phrases.EndUser + (bulkLog ? 's' : '')}\n component={UserFynd}\n onChange={endUserChangeHandler}\n onClientChange={clientChangeHandler}\n display={ticket.Contact_Name}\n companyId={ticket.Company_Id}\n endUserId={ticket.Company_Contact}\n filterClicked={filterClicked}\n toggleBulkLogging={toggleBulkLogging}\n bulkContactIds={ticket.Bulk_Contact_Ids}\n />\n\n </div>\n <FlaggedNotes ticket={ticket} showPopup={true} />\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 <Label >\n {\"Timeline\"}\n </Label>\n <TimelineImage {...ticket} />\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={CustomFormControl}\n form={selectedForm}\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={CustomFormControl}\n form={selectedForm}\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 NewTicketDetails;","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 getTicketFiles: build.query<IFile[], { ticketId: number }>({\n query: ({ ticketId }) => `Ticket/${ticketId}/File`,\n providesTags: [\"GetTicketFiles\"],\n }),\n getFileSettings: build.query<IFileSetting, void>({\n query: () => `File/Settings`,\n providesTags: [\"GetFileSetting\"],\n }),\n deleteFile: build.mutation<boolean, string>({\n query: (id) => ({\n url: `File/${id}`,\n method: \"DELETE\"\n }),\n invalidatesTags: [\"GetFiles\", \"GetTicketFiles\", \"GetActions\"]\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.newTicket);\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 minimizeButton={() => null} className='kb-preview cool-window' 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 React from 'react';\nimport { IKBSearchResult } from '../../../types/KB/IKBSearchResult';\nimport { Checkbox } from \"@progress/kendo-react-inputs\";\nimport { Grid, GridColumn as Column, GridDataStateChangeEvent } from \"@progress/kendo-react-grid\";\nimport { process, State } from '@progress/kendo-data-query';\nimport ReactTimeAgo from 'react-timeago'\nimport { trimChar } from \"../../../utils/utils\";\nimport { nanoid } from \"nanoid\";\nimport { UserApi } from '../../../redux/api/UserApi';\nimport KBPreview from './KBPreview';\n\n\ninterface KBResultsProps {\n results: IKBSearchResult[];\n linkedKBIds?: number[];\n kbSelected?: (e: IKBSearchResult) => void;\n}\n\nconst KBResults: React.FC<KBResultsProps> = ({ results, kbSelected, linkedKBIds }) => {\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const { data: tenant } = UserApi.useGetTenantQuery();\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 title='Open in new window' 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: \"Tags\",\n field: \"Keywords\",\n show: true,\n filter: \"text\",\n orderIndex: 1\n },\n {\n title: \"Updated\",\n field: \"Date_Updated\",\n show: true,\n width: 120,\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 userState = ({ state: { take: 10, 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 //Resset the page number when the data changes\n React.useEffect(() => {\n setDataState({ ...dataState, skip: 0 })\n }, [results?.length])\n\n return (\n <>\n {previewKBId && <KBPreview KB_ID={previewKBId} onClose={() => setPreviewKBId(null)} />}\n <Grid className='kb-results-grid'\n data={process(results || [], dataState)}\n {...dataState}\n onDataStateChange={dataStateChange}\n // onColumnReorder={columnReorder}\n sortable={true}\n groupable={false}\n pageable={true}\n reorderable={false}\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' }} className=\"chk\">\n <Checkbox title={`Link to ${userProfile?.Phrases.CallPhrase}`} checked={linkedKBIds?.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 </>\n );\n};\n\nexport default KBResults;","\nimport React from \"react\";\n\nimport { IKBSearchResult } from \"../../../types/KB/IKBSearchResult\";\nimport { useReduxDispatch, useReduxSelector } from \"../../../redux/hooks\";\n\nimport { Api, useGetTenantQuery } from \"../../../redux/api/BaseApi\";\nimport { PanelBar, PanelBarItem } from \"@progress/kendo-react-layout\";\nimport KBPreview from \"./KBPreview\";\nimport { SetLinkedKbs } from \"../../../slices/TicketSlice\";\n\nimport KBResults from \"./KBResuilts\";\n\nconst KnowledgeBase: React.FC = (props) => {\n const dispatch = useReduxDispatch();\n const { ticket } = useReduxSelector(state => state.newTicket);\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\n\n\n return <>\n <PanelBar>\n <PanelBarItem selected={true} expanded={true} title=\"Knowledge Base Results\" >\n <KBResults results={kbResults} kbSelected={kbSelected} linkedKBIds={ticket.Linked_Kb_Ids} />\n </PanelBarItem>\n </PanelBar>\n </>\n\n}\n\nexport default KnowledgeBase;","import { FunctionComponent, useEffect, useState } from \"react\";\nimport { Upload, UploadFileInfo, UploadFileStatus, UploadHttpHeaders, UploadOnAddEvent, UploadOnBeforeRemoveEvent, UploadOnBeforeUploadEvent, UploadOnProgressEvent, 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 { IFileUpload } from \"../../types/File/FileUpload\";\nimport { PartialSpinny } from \"../Nav/Spinny\";\nimport {\n Hint,\n} from \"@progress/kendo-react-labels\";\nimport * as FileSlice from \"../../slices/FileSlice\";\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 const newFiles = 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 dispatch(FileSlice.SetFiles(newFiles))\n }\n useEffect(() => {\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 progress: 100,\n status: UploadFileStatus.Uploaded,\n } as UploadFileInfo\n })\n setFiles(newFiles)\n }, [apifiles]);\n\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: UploadOnBeforeRemoveEvent) => {\n //event.additionalData = \n console.log('onRemove', event)\n\n //Make sure some files aren't uploading\n if (event.files.filter(n => n.status === 3).length > 0) {\n alert('Please wait for files to finish uploading')\n return\n }\n\n\n event.files.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)\n\n //Clears the current list of files so lets skip this\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 const uploadRef = React.createRef<Upload>();\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=\"start\">\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 {/* <ExternalDropZone uploadRef={uploadRef} style={{ width: 150, height: 150 }} className=\"d-inline\" /> */}\n <Upload ref={uploadRef}\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 onBeforeRemove={onRemove}\n onBeforeUpload={onBeforeUpload}\n autoUpload={true}\n saveUrl={revUploadUrl}\n removeUrl={revUploadUrl}\n showActionButtons={true}\n onProgress={onProgress}\n onStatusChange={onStatusChange}\n selectMessageUI={(props) => <div><img className=\"upload-image\" src=\"./images/button_async_attach.jpg\" title=\"drop files here to attach\"></img></div>}\n\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 { IKBItem, ILinkedKB } from '../../types/KB/ILinkedKB';\nimport { KBSearchProps } from '../../types/KB/KBSearchProps';\nimport { Api } from './BaseApi'\n\nconst KBApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getTicketKbs: build.query<IKBItem[], number>({\n query: (id) => `KB/Ticket/${id}`,\n providesTags: [\"GetTicketKBs\"],\n }),\n updateLinkedKbs: build.mutation<void, { ticketId: number, items: ILinkedKB[] }>({\n query: (info) => ({\n url: `KB/Ticket/${info.ticketId}`,\n method: \"POST\",\n body: info.items,\n }),\n invalidatesTags: [\"KBSearch\", \"GetActions\", \"GetTicketKBs\"]\n }),\n searchKB: build.mutation<IKBSearchResult[] | number, 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/Action/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.newTicket.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/NewTicketDetails'\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'\nimport { IKBSearchResult } from '../../types/KB/IKBSearchResult'\n\n\nconst TicketDrawer: FunctionComponent<TicketDrawerProps> = props => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { ticket, splitFromTicketOptions } = useReduxSelector(state => state.newTicket);\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/new') || location.pathname.endsWith('/ticket/new/') || location.pathname.endsWith('/ticket/new/details');\n }\n\n const items = [\n {\n text: `Templates`, route: \"/ticket/new/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 {\n text: `${userProfile?.Phrases.CallPhrase} Details`,\n route: \"/ticket/new/details\", selected: isDetailsPage(), icon: \"k-i-edit\", visible: 'true'\n },\n { separator: true, visible: 'true' },\n {\n title: \"Attachments\",\n text: \"Attachments\",\n route: \"/ticket/new/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: \"/ticket/new/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: \"/ticket/new/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: \"/ticket/new/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: \"/ticket/new/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: \"/ticket/new/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 as IKBSearchResult[]))\n\n setWordCount(currentWordCount);\n }\n }\n fetchResults();\n }, [ticket.Call_Desc])\n\n const requiredStyleClassV25 = ` \n .k-window.ticket-details .k-window-titlebar{\n background-color: ${userProfile?.Nav_Hex_Color};\n color:#fff;`\n\n return (\n <>\n <style id='required-section-styles'>\n {requiredStyleClassV25}\n </style>\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 {...ticket} Is_Loading={false} />} />\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('/ticket/new/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.newTicket);\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 navigate(`/ticket/${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 minimizeButton={() => null}\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 };","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 { 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';\nimport { Setting } from '../../../types/Setting/Setting';\nimport { useNavigate } from 'react-router-dom';\n\nexport const Revelations: React.FC<ToolProps> = (mainProps) => {\n const navigate = useNavigate();\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 navigate('/')\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, useNavigate } 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 navigate = useNavigate();\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 {f.ShowProfileIMages && <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={`/deeplink/?url=/calls/callhistory.aspx%3Fcall_id=${f.Call_Id}`} target={props.fullScreen ? '_blank' : '_self'} onClick={() => {\n //dispatch(RevelationSlice.updateIframeSrc(`/calls/callhistory.aspx?call_id=${f.Call_Id}`));\n //navigate(`/deeplink/?url=/calls/callhistory.aspx%3Fcall_id=${f.Call_Id}}`)\n props.itemSelected();\n }}>#{f.Call_Id}</Link>\n </td>\n </tr>\n <tr>\n <td colSpan={2}>\n {/* HTMLEllipsis is WAAAAAY SLow for 100+ entries */}\n <div dangerouslySetInnerHTML={{ __html: f.Text }} ></div>\n {/* lines: {f.Text.indexOf('feedDesc1lines') > -1 ? 3 : f.Text.indexOf('feedDesc2lines') > -1 ? 4 : f.Text.indexOf('feedDesc3lines') > -1 ? 5 : 5} */}\n {/* <HTMLEllipsis\n\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, useParams } 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';\nimport { updateToggleState } from \"../../../slices/RightBarSlice\";\nimport { ToggleState } from '../RightBar';\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 [expanded, setExpanded] = useState<string[]>() //all groups expanded by default\n const [contactSelected, setContactSelected] = useState<IContact>() //all groups expanded by default\n const { data: contacts, isFetching } = UserApi.useGetContactsQuery({ uid: profile.Uid, filter: filter, favsOnly: favOnly, pageLetter: page, groupByOffice: !config?.Contacts_Search_By_Name, thisContactId: contactSelected?.ID } as IContactSearchProps)\n const { data: mimicSetting } = UserApi.useGetSettingQuery(Setting.Mimic);\n\n useEffect(() => {\n console.log('props.selectedContact', props.selectedContact)\n setFavOnly(false)\n setFilterText(props.selectedContact?.FullName)\n setFilter(props.selectedContact?.FullName) //Will cause fetch\n setContactSelected(props.selectedContact)\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, contactSelected?.ID)\n if (contactSelected) {\n let newExpanded = [...groups, contactSelected.ID.toString()];\n\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, contactSelected]);\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/new/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 setContactSelected(null);\n //setSomething(true);\n setFilterText(e.value.toString())\n gotoPage(null);\n\n }}\n placeholder=\"Search...\"\n prefix={() => (\n <InputPrefix>\n <Icon name=\"search\" />\n </InputPrefix>)\n }\n suffix={() => (\n <>\n {filterText && (\n <InputClearValue onClick={() => {\n setContactSelected(null);\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 { ILink } from '../../types/ILink';\nimport { Api } from './BaseApi'\n\n\nconst LinkApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getLinks: build.query<ILink[], void>({\n query: () => `Link/My`,\n providesTags: [\"GetMyLinks\"],\n }),\n createLink: build.mutation<void, ILink>({\n query: (newLink) => ({\n url: `Link`,\n method: \"POST\",\n body: newLink\n }),\n invalidatesTags: [\"GetMyLinks\"],\n }),\n updateLink: build.mutation<void, ILink>({\n query: (link) => ({\n url: `Link/${link.Link_Id}`,\n method: \"PUT\",\n body: link\n }),\n invalidatesTags: [\"GetMyLinks\"],\n }),\n deleteLink: build.mutation<void, number>({\n query: (id) => ({\n url: `Link/${id}`,\n method: \"DELETE\"\n }),\n invalidatesTags: [\"GetMyLinks\"]\n }),\n }),\n overrideExisting: false,\n})\n\nexport { LinkApi };","import { useState } from \"react\";\nimport { LinkApi } from \"../../../redux/api/LinkApi\";\nimport { SvgIcon } from \"@progress/kendo-react-common\";\nimport * as svg from '@progress/kendo-svg-icons';\nimport { ILink } from \"../../../types/ILink\";\n\ninterface EditBarProps {\n link: ILink;\n setEditingLinkId: React.Dispatch<any>;\n newLink: boolean\n}\n\nexport const EditBar = (props: EditBarProps) => {\n const [updateLinkEndpoint] = LinkApi.useUpdateLinkMutation();\n const [createLinkEndpont] = LinkApi.useCreateLinkMutation();\n const [editedLink, setEditedLink] = useState<ILink>({ ...props.link });\n\n const handleUpdate = () => {\n if (!(editedLink.Link && editedLink.Link_Display)) return\n if (props.newLink) {\n createLinkEndpont(editedLink)\n } else {\n updateLinkEndpoint(editedLink);\n }\n\n props.setEditingLinkId(null);\n };\n\n return (\n <form className=\"edit-link-form\" >\n <div className=\"editing-fields\">\n <input\n placeholder=\"Display\"\n autoFocus\n type=\"text\"\n value={editedLink.Link_Display}\n onChange={(e) => setEditedLink({ ...editedLink, Link_Display: e.target.value.slice(0, 20) })}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \"Escape\") handleUpdate();\n }}\n />\n <input\n placeholder=\"Url\"\n type=\"text\"\n value={editedLink.Link}\n onChange={(e) => setEditedLink({ ...editedLink, Link: e.target.value })}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \"Escape\" || (event.key === \"Tab\" && !event.shiftKey)) handleUpdate();\n }}\n />\n </div>\n <div className=\"editing-icons\">\n <SvgIcon className=\"save-icon\" icon={svg.saveIcon} onClick={() => { if (editedLink.Link_Display && editedLink.Link) handleUpdate() }} />\n <SvgIcon className=\"cancel-icon\" icon={svg.xIcon} onClick={() => props.setEditingLinkId(null)} />\n </div>\n </form>\n );\n};\n","import { ErrorBoundary } from \"../../Common/ErrorBoundry\";\nimport { ToolProps } from \"../ActivityFeed/ActivityFeed\";\nimport React, { Suspense, useState, } from 'react'\nimport { LinkApi } from \"../../../redux/api/LinkApi\";\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { EditBar } from \"./EditBar\";\nimport './Links.scss'\n\nconst LinksMenu = () => {\n const { data } = LinkApi.useGetLinksQuery();\n const [deleteLinkEndpoint] = LinkApi.useDeleteLinkMutation();\n const [editingLinkId, setEditingLinkId] = useState(null);\n\n const deleteLink = (id: number) => {\n deleteLinkEndpoint(id)\n }\n\n const systemLinks = data?.filter(l => l.Is_System);\n const myLinks = data?.filter(l => !l.Is_System);\n\n if (!data) return <div className=\"m-2\">Loading...</div>\n\n return (\n <div className=\"links\">\n <div className=\"links-list-div\">\n {systemLinks?.length > 0 && <p className=\"title\">System links</p>}\n <ul className=\"links-list\">\n {systemLinks.map((link) => (\n <li\n key={link.Link_Id}\n title={link.Link}\n onClick={(event) => {\n // @ts-expect-error\n if (event.target.tagName.toLowerCase() === \"li\")\n window.open(\n link.Link.match(/(http(s*):\\/\\/)/) === null ? \"https://\" + link.Link : link.Link\n );\n }}\n >\n <div className=\"link-display\">\n <p className=\"list-item-title\">{link.Link_Display}</p>\n </div>\n </li>))\n }\n </ul>\n <p className=\"title\">Your links</p>\n <ul>\n {myLinks.map((link) => (\n <li\n key={link.Link_Id}\n title={link.Link}\n onClick={(event) => {\n // @ts-expect-error\n if (event.target.tagName.toLowerCase() === \"li\")\n window.open(\n link.Link.match(/(http(s*):\\/\\/)/) === null ? \"https://\" + link.Link : link.Link\n );\n }}\n >\n {editingLinkId === link.Link_Id ? (\n <EditBar link={link} setEditingLinkId={setEditingLinkId} newLink={false} />\n ) : (\n <div className=\"link-display\">\n <p className=\"list-item-title\">{link.Link_Display}</p>\n <div className=\"icons\">\n <SvgIcon\n className=\"edit-link-btn icon\"\n icon={svg.pencilIcon}\n onClick={() => setEditingLinkId(link.Link_Id)}\n />\n <SvgIcon\n className=\"delete-link-btn icon\"\n icon={svg.trashIcon}\n onClick={() => deleteLink(link.Link_Id)}\n />\n\n </div>\n </div>\n )}\n </li>\n ))}\n {editingLinkId === 0 ?\n <EditBar link={{ Link_Id: 0, Contact_Id: 0, Link: \"\", Link_Display: \"\", Is_System: false }} setEditingLinkId={setEditingLinkId} newLink={true} /> :\n <div title=\"Add new link\" className=\"add-link-btn\" onClick={() => setEditingLinkId(0)}>\n <SvgIcon className=\"add-link-btn-icon\" icon={svg.plusCircleIcon} />\n </div>\n }\n </ul>\n </div>\n </div>\n );\n}\n\nexport const Links = (props: ToolProps) => {\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 <Suspense fallback={'Loading...'}>\n {/* LOCK ICON IS A FEW PIXELS SQUISHED!! */}\n <header className='right-bar-header'><img className='icon' src='./images/Link-Out.png' /><span className='text'>Links</span>\n {!props.fullScreen && <button className='icon lock' onClick={props.unlocked} title='Lock side-bar' ><img src='./images/Lock.png' style={{ alignContent: 'center' }} /></button>}\n {!props.fullScreen && <button className='icon unlock' onClick={props.locked} title='Unlock side-bar' ><img src='./images/Unlock.png' style={{ alignContent: 'center' }} /></button>}\n </header>\n\n <LinksMenu />\n </Suspense>\n </ErrorBoundary>\n </section >\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\";\nimport { useParams } from \"react-router-dom\";\nimport { UserApi } from \"../../redux/api/UserApi\";\nimport { Links } from \"./Links/Links\";\n\n//@ts-expect-error\nconst ChatCount = React.lazy(() => import(\"chat/ChatCount\").catch());\n//@ts-expect-error\nconst PinnedChatModule = React.lazy(() => import(\"chat/PinnedChats\").catch());\n//@ts-expect-error\nconst ChatNotificationModule = React.lazy(() => import(\"chat/ChatNotification\").catch());\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 //Show the current contact from the ticket details page.\n const { contactId: ticketContactId } = useParams()\n const { data: ticketContact } = UserApi.useGetUserByIdQuery(parseInt(ticketContactId), { skip: !ticketContactId })\n\n useEffect(() => {\n if (ticketContact) {\n //Expand contacts\n setSelectedId(\"contacts\");\n setSelectedContact({\n ID: ticketContact.ID,\n FullName: ticketContact.FullName,\n } as IContact);\n\n //console.log('ticketContact', locked, ticketContact)\n if (locked)\n dispatch(updateToggleState(ToggleState.Free))\n }\n }, [ticketContact])\n\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 {\n id: \"links\",\n imageUrl: \"./images/Link-Out.png\",\n class: \"links-button\",\n element: <Links {...toolProps} />,\n title: \"Links\",\n badge: null,\n visible: profile?.Features.Link_Out,\n order: dockOrder?.indexOf(\"links\"),\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 = (props: { url?: string }) => {\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 ///The Url passed in from the Router\n useEffect(() => {\n if (props?.url)\n dispatch(updateIframeSrc(props.url))\n }, [props.url])\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/new/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\";\nimport { Setting } from \"../../types/Setting/Setting\";\nimport { UserApi } from \"../../redux/api/UserApi\";\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 const { data: newTicketPageSetting } = UserApi.useGetSettingQuery(Setting.NEW_TICKET_DETAILS);\n\n // Redux Selectors\n const revI = useReduxSelector((state) => state.revI);\n\n\n useEffect(() => {\n if (data && newTicketPageSetting) {\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 //New Ticket details page\n //newTicketPageSetting?.Bool_Value\n if (newTicketPageSetting?.Bool_Value && redirect?.toLocaleLowerCase().indexOf('callhistory.aspx') > -1) {\n\n // for (const [key, value] of new URLSearchParams(new URL(window.top.location.origin + redirect).search).entries()) {\n // console.log(`${key}, ${value}`);\n // }\n //Get the Id from the querystring 'call_id=12345'\n const queryString = new URL(window.top.location.origin + redirect).search;\n const params = new URLSearchParams(queryString?.toLocaleLowerCase())\n const dataItem = params?.get('call_id');\n const from = params?.get('from');\n if (from?.toLocaleLowerCase() !== 'newdetails') {\n params.delete(\"call_id\")\n navigate(`/ticket/${dataItem}${queryString.length > 0 ? `/?${params}` : ''}`);\n return;\n }\n }\n\n\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, newTicketPageSetting]);\n\n if (!revI?.currentIframeSrc) return <Spinny />\n\n return <RevelationIframe />;\n};\n\nexport default Deeplink;\n","import { useEffect } from \"react\";\nimport { createUserManager } from \"redux-oidc\";\nimport { useGetTenantQuery, useRenewlicenseMutation } from \"../../redux/api/BaseApi\";\nimport { oAuthSettings } from \"../Auth/AuthSettings\";\n\nconst LicenseManager = () => {\n const { data: tenant } = useGetTenantQuery();\n\n const [\n renewLicense,\n //{ error }\n ] = useRenewlicenseMutation();\n\n\n useEffect(() => {\n\n //if (loop === null)\n //setLoop(\n let thisLoop = window.setInterval(async () => {\n try {\n await renewLicense(null).unwrap();\n } catch (err) {\n console.log('ooof', err);\n if (\"status\" in err) {\n if (err.status === 401) {\n //Token expired go to login page\n console.log('Token expired go to login page');\n let settings = oAuthSettings;\n if (tenant?.Authority)\n settings.authority = tenant?.Authority\n\n console.log('Redirecting to signin page', settings);\n let userManager = createUserManager(settings)\n await userManager.signinRedirect();\n }\n if (err.status === 403) {\n console.log('Auto logout', err.data);\n let settings = oAuthSettings;\n if (tenant?.Authority)\n settings.authority = tenant?.Authority\n\n let userManager = createUserManager(settings)\n //Kill the loop\n //setLoop(null);\n await userManager.signoutRedirect({\n extraQueryParams: { logoutMessage: err.data?.message },\n });\n }\n }\n }\n }, 30000);\n\n console.log('useEffect in LicenseManager.tsx', thisLoop);\n //);\n return () => {\n console.log('Cleanup Licensemanager', thisLoop)\n window.clearInterval(thisLoop);\n }\n }, []);\n return <></>;\n};\n\nexport default LicenseManager;\n","import React, { useContext } from 'react'\nimport { RevUserContext } from '../../context/UserContext';\nimport { useReduxDispatch, useReduxSelector } from '../../redux/hooks';\nimport { cancelMimic } from '../../slices/RevelationSlice';\nimport { IUserProfile } from '../../types/User/IUserProfile';\n\nexport const MimicBar = () => {\n const profile = useContext<IUserProfile>(RevUserContext)\n const mimicUid = useReduxSelector((state) => state.revI.mimicUid);\n const dispatch = useReduxDispatch();\n const cancelMimicSession = () => {\n dispatch(cancelMimic());\n };\n if (!mimicUid)\n return <></>\n\n return (\n <>\n <div className='mimic-bar'>You are currently mimicing user account <u>{profile.F_Name} {profile.L_Name}</u>. Press X to cancel this mimic session.\n <button className=\"k-font-icon k-i-close\" title='Cancel mimic session' onClick={cancelMimicSession}>\n </button></div></>\n )\n}\n","import { AppBarSection } from \"@progress/kendo-react-layout\";\nimport { updateIframeSrc } from \"../../slices/RevelationSlice\";\nimport { useReduxDispatch } from \"../../redux/hooks\";\n// import testImage from \"./images/Host_Images/Login/revelationLogo_login_Syn.gif\"\n\n/** For testing purposes only.\n * In order to manually test styles by manually changing numbers the\n * following must occur:\n * 1. export the navStyle below.\n * 2. Uncomment the SetLogoNavStyle(navStyle) and comment out the one with props.navStyleNavButton.tsx\n * 3. In NavButton.tsx, uncomment out the navStyle import.\n * 4. In NavButton.tsx, comment out navStyle.*/\n// export let navStyle = 0;\n\nexport type NavLogoProps = {\n imgUrl: string;\n navStyle?: number;\n};\nconst NavLogo = ({ props }: { props: NavLogoProps }) => {\n // Left here for testing purposes\n // const maxHeight = SetLogoNavStyle(navStyle);\n const maxHeight = SetLogoNavStyle(props.navStyle);\n const imgClass = \"w-auto \" + maxHeight;\n const dispatch = useReduxDispatch();\n return (\n\n <AppBarSection\n style={{\n // width: 128,\n display: \"grid\",\n justifyContent: \"center\",\n }}\n >\n <div className=\"flex justify-center\">\n <a href=\"#\" title=\"Home\" onClick={(e) => {\n e.preventDefault()\n e.stopPropagation()\n e.nativeEvent.stopImmediatePropagation()\n e.nativeEvent.preventDefault()\n\n dispatch(updateIframeSrc(\"/Calls/OpenCalls.aspx\"))\n }\n }>\n <img\n className={imgClass} src={`${props.imgUrl}`} alt=\"Site logo\"\n /></a>\n </div>\n </AppBarSection>\n );\n};\nexport default NavLogo;\n\nfunction SetLogoNavStyle(navStyle: number): string {\n const normalSize = \"h-[70px]\";\n const halfSize = \"h-[43px]\";\n switch (navStyle) {\n case 1:\n return normalSize;\n case 2:\n return halfSize;\n case 3:\n return halfSize;\n default:\n return normalSize;\n }\n}\n","import { IAlertConfig } from '../../types/Alert/IAlertConfig';\nimport { Api } from './BaseApi'\n\nconst AlertApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getAlertConfig: build.query<IAlertConfig, void>({\n query: () => ({\n url: \"Alert/Config\",\n method: \"GET\"\n }),\n providesTags: [\"GetAlertConfig\"]\n }),\n }),\n overrideExisting: false,\n})\n\nexport { AlertApi };","import { CSSProperties, MouseEvent, useContext, useEffect, useState } from \"react\";\nimport { AlertApi } from \"../../../redux/api/AlertApi\";\nimport { IAlert } from \"../../../types/Alert/IAlert\";\nimport { IUserProfile } from \"../../../types/User/IUserProfile\";\nimport { RevUserContext } from \"../../../context/UserContext\";\n\n// const sampleNotifications = [\n// \"notification 1\",\n// \"notification 2 medium medium medium medium medium medium medium medium medium medium medium medium length notification\",\n// \"notification 3 very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very very long notification\",\n// ];\n\nexport interface INotificationsProps {\n navColor: string;\n}\n\nexport const Notifications = ({ props }: { props: INotificationsProps }) => {\n const profile = useContext<IUserProfile>(RevUserContext);\n const { navColor } = props;\n const [notifications, setNotifications] = useState<IAlert[]>([]);\n const [showNotification, setShowNotification] = useState(0);\n const { data: alertConfig } = AlertApi.useGetAlertConfigQuery(undefined, { skip: profile.Features?.External_Interface });\n\n useEffect(() => {\n //Fetch alerts from webservice\n if (alertConfig) {\n fetch(alertConfig.Alerts_Get_Url).then((data) => {\n if (data.ok)\n return data.json()\n }).catch((err) => console.warn(err)).then((data) => {\n console.log('data', data);\n setNotifications(data)\n\n //Mark the first message as seen\n if (data?.length > 0) {\n seen(data.at(0).uid);\n }\n });\n }\n return () => {\n\n }\n }, [alertConfig])\n\n\n const notificationStyle: CSSProperties = {\n backgroundColor: navColor,\n borderTop: \"solid 2px white\",\n borderRight: \"solid 2px white\",\n borderLeft: \"solid 2px white\",\n display: \"flex\",\n placeContent: \"space-between\",\n color: \"white\",\n boxShadow: \"5px 5px 4px 0px rgba(0,0,0,0.03)\",\n };\n function handleRemoveNotification(event: MouseEvent<HTMLButtonElement>) {\n //Post to the API that the message has been closed.\n if (alertConfig) {\n var messageId = event.currentTarget.getAttribute(\"data-uid\")\n fetch(alertConfig.Read_Post_Url.replace('{AlertUid}', messageId), {\n method: 'post',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n \"ClientInfoEncrypted\": alertConfig.ClientInfoEncrypted\n })\n }).then(() => {\n //Remove the message\n setNotifications((note) => note.filter((f) => f.uid !== messageId))\n\n //Back to message 1\n setShowNotification(0);\n });\n }\n }\n //Marks the notifcation as 'Seen'\n async function seen(messageId) {\n return fetch(alertConfig.Seen_Post_Url.replace('{AlertUid}', messageId), {\n method: 'post',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n \"ClientInfoEncrypted\": alertConfig.ClientInfoEncrypted\n })\n });\n }\n function handleNotificationIteration(event: MouseEvent<HTMLButtonElement>) {\n const workingIndex = parseInt(\n event.currentTarget.getAttribute(\"data-index\")\n );\n const calculatedIndex = workingIndex % notifications.length;\n console.log(\"calculatedIndex\", calculatedIndex);\n setShowNotification(calculatedIndex);\n\n //Mark the message as seen\n if (notifications.length > calculatedIndex) {\n var messageId = notifications.at(calculatedIndex).uid\n seen(messageId);\n }\n }\n\n\n return (\n <>\n {notifications?.length > 0 && (\n <ul className=\"relative z-[100]\">\n <li style={notificationStyle} className=\"alert-item\">\n <div className=\"flex\">\n <div className=\"bg-black w-[50px] min-w-[50px] mr-2\">\n <span className=\"flex place-content-center text-xs pt-1\">\n {showNotification >= 0\n ? Math.abs(showNotification) + 1\n : showNotification + notifications.length + 1}{\" \"}\n of {notifications.length}\n </span>\n <div className=\"flex place-content-center h-full\">\n <button\n className=\"flex flex-grow place-content-end pr-2 pt-2 pb-1 hover:animate-pulse\"\n onClick={handleNotificationIteration}\n data-index={showNotification - 1}\n >\n <img\n src=\"./images/img_arrow_left.png\"\n alt=\"previous notification\"\n />\n </button>\n <button\n className=\"flex flex-grow pl-2 pt-2 pb-2 hover:animate-pulse\"\n onClick={handleNotificationIteration}\n data-index={showNotification + 1}\n >\n <img\n src=\"./images/img_arrow_right.png\"\n alt=\"next notification\"\n />\n </button>\n </div>\n </div>\n <span className=\"grid place-content-center\">\n {notifications.length >= showNotification && <div dangerouslySetInnerHTML={{ __html: notifications.at(showNotification).message }} ></div>}\n </span>\n </div>\n <button\n className=\"pl-1 pr-5 hover:animate-pulse\"\n data-uid={notifications.at(showNotification).uid}\n onClick={handleRemoveNotification}\n >\n <img\n className=\"w-[15px] min-w-[15px]\"\n src={\"./images/img-cancel.png\"}\n alt=\"close\"\n />\n </button>\n </li>\n </ul>\n )}\n </>\n );\n};\n","import { Drawer, DrawerItem, DrawerItemProps, Menu } from \"@progress/kendo-react-layout\";\nimport { Popup } from \"@progress/kendo-react-popup\";\nimport useEventListener from \"@use-it/event-listener\";\nimport { nanoid } from \"nanoid\";\nimport React, { useMemo, useRef, useState } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { useReduxDispatch } from \"../../../../redux/hooks\";\nimport { updateIframeSrc } from \"../../../../slices/RevelationSlice\";\nimport { INavTransform } from \"../../../../types/INavTransform\";\nimport { NavItems } from \"../../../../types/User/IUserProfile\";\nimport {\n AddTextAndItemsAttrToHamburgerItems,\n trimChar,\n} from \"../../../../utils/utils\";\nimport { TicketLocationState } from \"../../../Ticket/TicketRoute\";\n\nexport interface IHamburgerMenuProps {\n navItems: NavItems[];\n baseUrl: string;\n}\n\nexport const HamburgerMenu = ({ props }: { props: IHamburgerMenuProps }) => {\n // console.log(props);\n let location = useLocation();\n let navigate = useNavigate();\n const anchor = useRef<HTMLButtonElement | null>(null);\n const menu = useRef(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 navigate(\"/\");\n\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\";\n//import { RSSValue } from \"react-smart-select\";\nimport { ISearchType } from \"../../../../types/ISearch\";\nimport CustomSmartSelect from \"../../../DropdownCheckbox/CustomSmartSelect\";\nimport { CSSProperties, ReactNode } from \"react\";\n\ntype RSSLabel = string | ReactNode;\ntype RSSOption = {\n label: RSSLabel;\n value: any;\n [key: string]: any;\n};\ntype RSSOptions = Array<RSSOption>;\ntype RSSValue = RSSOptions | RSSOption | null;\n\n\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\";\nimport { useNavigate } from \"react-router-dom\";\nimport { UserApi } from \"../../../../redux/api/UserApi\";\nimport { Setting } from \"../../../../types/Setting/Setting\";\n\nconst QuickSearch = () => {\n const navigate = useNavigate();\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 const { data: newTicketPageSetting } = UserApi.useGetSettingQuery(Setting.NEW_TICKET_DETAILS);\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 //New Ticket details page\n if (newTicketPageSetting?.Bool_Value && dataItem.Url_Format?.toLocaleLowerCase().indexOf('callhistory.aspx') > -1) {\n navigate(`/ticket/${dataItem.Id}?from=quicksearch`)\n return;\n }\n\n navigate('/');\n dispatch(\n updateIframeSrc(\n `${dataItem.Url_Format.replace(\"={0}\", `=${dataItem.Id}`)}`\n )\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\n setFindTicketId(null);\n //console.warn('Go to the ticket if found', findTicketId, foundTicket)\n navigate(`/deeplink?url=/Calls/CallHistory.aspx?Call_Id=${foundTicket.ID}`);\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\";\nimport { useNavigate } from \"react-router-dom\";\n\nexport interface IAdminAreaProps {\n access: boolean;\n}\n\nexport const AdminArea = ({ props }: { props: IAdminAreaProps }) => {\n const navigate = useNavigate();\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(\"/admin\");\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\n //trim leading . from URL if it starts with a .\n let trimmedStr = item.Url.startsWith('.') ? item.Url.substring(1) : item.Url;\n console.warn('navigate', trimmedStr, item.Url, ticketState)\n navigate(trimmedStr, { 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 console.warn('handleOnClick', props.Url);\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\n //trim leading . from URL if it starts with a .\n let trimmedStr = props.Url.startsWith('.') ? props.Url.substring(1) : props.Url;\n console.warn('navigate', trimmedStr, props.Url, ticketState)\n navigate(trimmedStr, { state: ticketState });\n\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\n let trimmedStr = item.Url.startsWith('.') ? item.Url.substring(1) : item.Url;\n console.warn('navigate', trimmedStr, item.Url, ticketState)\n navigate(trimmedStr, { 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 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/Action/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, { useContext, useEffect } from 'react';\nimport { ITicket } from '../../../../types/Ticket/ITicket';\nimport { Form, FormElement, Field, FieldRenderProps } from '@progress/kendo-react-form';\nimport { Card, CardHeader, CardBody, PanelBarItem, PanelBar } from '@progress/kendo-react-layout';\nimport CustomFormControl from '../../../CustomForms/CustomForm';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { Button, SplitButton, Toolbar } from '@progress/kendo-react-buttons';\nimport { useReduxDispatch, useReduxSelector } from '../../../../redux/hooks';\nimport { setField, setForm } from '../../../../slices/TicketDetailSlice';\nimport { toast } from 'react-toastify';\nimport { PartialSpinny } from '../../../Nav/Spinny';\n\ninterface CustomFormProps extends ITicket {\n showSaveButton?: boolean;\n}\n\nconst CustomForm: React.FC<CustomFormProps> = (ticket) => {\n const profile = useContext<IUserProfile>(RevUserContext)\n const { data: ticketForm } = TicketApi.useGetTicketFormQuery(ticket?.ID, { skip: !(ticket.CustomFormId > 0) });\n const [updateFormFields, { isLoading: isUpdating }] = TicketApi.useUpdateTicketFormMutation();\n const SECTION_REQUIRED = \"section-required\";\n const apiError = '';\n const { form: stateFields } = useReduxSelector(state => state.ticketDetails);\n const dispatch = useReduxDispatch();\n\n //Put the form fields into the state slice\n useEffect(() => {\n if (ticketForm) {\n dispatch(setForm(ticketForm));\n }\n }, [ticketForm]);\n\n const fieldChanged = (e) => {\n console.log('fieldChanged', e)\n //update the Ticket details Slice with the new field value\n dispatch(setField(e.value))\n };\n const handleFormSubmit = () => {\n updateFormFields({ ticketId: ticket.ID, formId: ticket.CustomFormId, fields: stateFields?.Fields }).unwrap().then(() => {\n toast.success('Form saved successfully.')\n }).catch((e) => {\n console.error(e);\n toast.error('Error saving form. Status:' + (e.status ?? '(unknown)') + ' Message:' + (e.data ?? '(empty)'))\n });\n };\n const customFormTop = true;\n //INternal users OR external users IF the form is setup to show on the external interface\n const userHasAccess = (ticketForm?.View_External && profile?.Features.External_Interface) || !profile?.Features.External_Interface;\n\n if (stateFields == null || !profile?.Features.Custom_Fields) return <></>;\n\n\n return (\n ticket.CustomFormId > 0 && userHasAccess\n ?\n <div className=\"mt-3 pop\">\n <Form ignoreModified={true} onSubmit={handleFormSubmit} id='custom-form' render={(formRenderProps) =>\n <FormElement>\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 <PanelBar expanded={[\"form\"]}>\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 {isUpdating && <PartialSpinny />}\n {<Field\n id={\"customform\"}\n name={\"customform\"}\n label={\"form\"}\n component={CustomFormControl}\n form={ticketForm}\n fields={stateFields.Fields}\n companyId={ticket.Company_Id}\n onChange={fieldChanged} />}\n\n {ticket.showSaveButton !== false && <div className='ms-auto p-1 d-flex flex-row-reverse' >\n <Button form='custom-form' type={\"submit\"} style={{ width: '150px', color: '#fff', background: profile?.Nav_Hex_Color }}>\n <img src='./images/Log-Ticket-White.png' className='inline mr-2 w-5' />\n Save\n </Button>\n </div>}\n </PanelBarItem>\n </PanelBar>\n\n </FormElement>} />\n </div>\n : <></>\n );\n\n};\n\nexport default CustomForm;","import React from 'react';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport { Button, ChipList, ChipProps } from '@progress/kendo-react-buttons';\nimport * as FilterSlice from '../../../../../../slices/FilterSlice';\nimport { useReduxDispatch, useReduxSelector } from '../../../../../../redux/hooks';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Link, useParams } from 'react-router-dom';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\n\ninterface FilterBannerProps {\n filterDescription?: string;\n onCancel?: () => void;\n}\n\nconst FilterBanner: React.FC<FilterBannerProps> = ({ filterDescription, onCancel }) => {\n const { ticketId } = useParams();\n const { data: actionTypes } = TicketApi.useGetTicketActionTypesQuery(parseInt(ticketId));\n const { data: staffList } = TicketApi.useGetTicketAuthorsQuery(parseInt(ticketId));\n const filterState = useReduxSelector(state => state.filter);\n const updateState = useReduxDispatch();\n\n const resetClicked = (e: any) => {\n updateState(FilterSlice.resetFilters());\n }\n\n const hasFilterApplied = Object.keys(filterState).some(key => {\n var areDifferent = filterState[key] !== FilterSlice.initialState[key]\n //if (areDifferent)\n //console.log('key', key, filterState[key], FilterSlice.initialState[key], filterState[key] === FilterSlice.initialState[key]);\n\n\n return areDifferent;\n });\n\n\n\n //Create the filter description\n let chips = [];\n let filterDescriptionString = '';\n if (filterState.authorIds.length > 0) {\n const selectedAuthors = staffList?.filter(at => filterState.authorIds.includes(at.ID)).map(at => at.Full_Name).join(', ')\n const filterCancelButton = <Button size='small' fillMode='flat' svgIcon={svg.xIcon} title='Clear filters' onClick={() => {\n updateState(FilterSlice.setAuthors(FilterSlice.initialState.authorIds))\n updateState(FilterSlice.setAuthorAndOr(FilterSlice.initialState.authorAndOr))\n }\n }></Button>\n chips.push({ text: <><Link className='nav-link d-inline-block' to='filter'>Authors: <b title={selectedAuthors}>{selectedAuthors}</b></Link> {filterCancelButton}</>, svgIcon: svg.userIcon });\n if (filterState.authorAndOr === 'or' && (filterState.actionTypeIds.length > 0 || filterState.dateRange || filterState.searchTerm !== '' || filterState.hasReactions)) {\n const filterCancelButton = <Button size='small' fillMode='flat' svgIcon={svg.xIcon} title='Clear filters' onClick={() => {\n updateState(FilterSlice.setAuthorAndOr(FilterSlice.initialState.authorAndOr))\n }}></Button>\n chips.push({ text: <><Link className='nav-link d-inline-block' to='filter'><b>Or</b></Link> {filterCancelButton}</> });\n }\n }\n if (filterState.actionTypeIds.length > 0) {\n const selectedActionTypes = actionTypes?.filter(at => filterState.actionTypeIds.includes(at.ID)).map(at => at.Action_Type).join(', ')\n const filterCancelButton = <Button size='small' fillMode='flat' svgIcon={svg.xIcon} title='Clear filters' onClick={() => {\n updateState(FilterSlice.setActionTypes(FilterSlice.initialState.actionTypeIds))\n updateState(FilterSlice.setActionTypeAndOr(FilterSlice.initialState.actionTypeAndOr))\n }}></Button>\n //filterDescriptionString += `${filterState.searchTermOption} Phrase: \"${filterState.searchTerm}\" `\n chips.push({ text: <><Link className='nav-link d-inline-block' to='filter'>Types: <b title={selectedActionTypes}>{selectedActionTypes}</b></Link> {filterCancelButton}</>, svgIcon: svg.categorizeIcon });\n if (filterState.actionTypeAndOr === 'or' && (filterState.dateRange || filterState.searchTerm !== '') || filterState.hasReactions) {\n const filterCancelButton = <Button size='small' fillMode='flat' svgIcon={svg.xIcon} title='Clear filters' onClick={() => updateState(FilterSlice.setActionTypeAndOr(FilterSlice.initialState.actionTypeAndOr))}></Button>\n chips.push({ text: <><Link className='nav-link d-inline-block' to='filter'><b>Or</b></Link> {filterCancelButton}</> });\n }\n }\n //date range\n if (filterState.dateRange) {\n const rangeString = filterState.dateRange === 'Custom' ? `${new Date(filterState.customStartDate).toDateString()} - ${new Date(filterState.customEndDate).toDateString()}` : filterState.dateRange;\n const filterCancelButton = <Button size='small' fillMode='flat' svgIcon={svg.xIcon} title='Clear filters' onClick={() => {\n updateState(FilterSlice.setDateRange(FilterSlice.initialState.dateRange))\n updateState(FilterSlice.setStartDate(FilterSlice.initialState.customStartDate))\n updateState(FilterSlice.setEndDate(FilterSlice.initialState.customEndDate))\n }\n }></Button>\n chips.push({ text: <><Link className='nav-link d-inline-block' to='filter'>Range: <b title={rangeString}>{rangeString}</b></Link> {filterCancelButton}</>, svgIcon: svg.calendarIcon });\n }\n //Text filter\n if (filterState.searchTerm !== '') {\n const filterCancelButton = <Button size='small' fillMode='flat' svgIcon={svg.xIcon} title='Clear filters' onClick={() => {\n updateState(FilterSlice.setSearchTerm(FilterSlice.initialState.searchTerm))\n updateState(FilterSlice.setSearchTermOption(FilterSlice.initialState.searchTermOption))\n }}></Button>\n //filterDescriptionString += `${filterState.searchTermOption} Phrase: \"${filterState.searchTerm}\" `\n chips.push({ text: <><Link className='nav-link d-inline-block' to='filter'>{filterState.searchTermOption}s: <b title={filterState.searchTerm}> {filterState.searchTerm}</b></Link> {filterCancelButton}</>, svgIcon: svg.textboxIcon });\n }\n //reations\n if (filterState.hasReactions) {\n //filterDescriptionString += `Range: ${filterState.dateRange}, `\n const filterCancelButton = <Button size='small' fillMode='flat' svgIcon={svg.xIcon} title='Clear filters' onClick={() => updateState(FilterSlice.setHasReaction(FilterSlice.initialState.hasReactions))}></Button>\n chips.push({ text: <><Link className='nav-link d-inline-block' to='filter'>Has Reactions: <b>yes</b></Link> {filterCancelButton}</>, svgIcon: svg.thumbUpIcon });\n }\n //no system actions\n if (filterState.showSystemActions === false) {\n //filterDescriptionString += `Range: ${filterState.dateRange}, `\n const filterCancelButton = <Button size='small' fillMode='flat' svgIcon={svg.xIcon} title='Clear filters' onClick={() => updateState(FilterSlice.setShowSystemActions(FilterSlice.initialState.showSystemActions))}></Button>\n chips.push({ text: <><Link className='nav-link d-inline-block' to='filter'>System actions: <b>no</b></Link> {filterCancelButton}</>, svgIcon: svg.gearsIcon });\n }\n\n if (!hasFilterApplied) return null;\n\n return (\n <div className=\"filter-banner\">\n <div className='inline-block'>\n <div className='d-none'><SvgIcon icon={svg.filterIcon} style={{ marginRight: '2px' }} />Filters:</div>\n <ChipList data={chips} className='ms-2'></ChipList>\n </div>\n <Button size='small' fillMode='flat' svgIcon={svg.filterClearIcon} className='p-2' title='Clear all filters'\n onClick={resetClicked} >\n </Button>\n </div >\n );\n};\n\nexport default FilterBanner;","//import AuthService from './AuthService'\nimport { ITenant } from \"../../types/Tenant/ITenant\";\nimport { IHostConfig } from \"../../types/Tenant/IHostConfig\";\nimport { Api } from \"./BaseApi\";\n\nconst AccountApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getTenant: build.query<ITenant, string>({\n query: (tenantUrl) => \"Account/TenantConfig/?tenantUrl=\" + tenantUrl,\n providesTags: [\"GetTenant\"],\n }),\n getHostConfig: build.query<IHostConfig, string>({\n query: (tenantUid) => `Account/${tenantUid}/SystemConfig`,\n providesTags: [\"GetHostConfig\"],\n }),\n })\n});\n\nexport const {\n useGetTenantQuery,\n useGetHostConfigQuery,\n} = AccountApi;","import React from 'react';\nimport { Pager, PageChangeEvent } from '@progress/kendo-react-data-tools';\nimport { useGetHostConfigQuery } from '../../../../redux/api/AccountApi';\nimport { useGetUserProfileQuery } from '../../../../redux/api/BaseApi';\nimport { isMobile } from 'react-device-detect';\n\nexport type PagerProps = {\n skip: number;\n total: number;\n onChange: (e: PageChangeEvent) => void;\n}\n\nconst ActionPager: React.FC<PagerProps> = (props) => {\n const { data: userProfile } = useGetUserProfileQuery()\n //Page size is and System setting\n const { data: hostConfig } = useGetHostConfigQuery(userProfile?.Tenant_Uid, { skip: !userProfile?.Tenant_Uid });\n\n //If the skip is greater than the total, reset the skip\n if (props.skip > props.total) {\n props.onChange({ skip: 0, take: hostConfig?.Call_Action_Page_Size } as PageChangeEvent);\n }\n\n if (props.total <= hostConfig?.Call_Action_Page_Size) return null;\n\n if (!hostConfig) return null;\n\n return (\n <>\n <Pager\n responsive={true}\n skip={props.skip}\n take={hostConfig?.Call_Action_Page_Size}\n total={props.total}\n onPageChange={props.onChange}\n buttonCount={isMobile ? 5 : 10}\n info={true}\n previousNext={true}\n type=\"numeric\"\n pageSizeValue={hostConfig?.Call_Action_Page_Size}\n />\n </>\n )\n};\n\nexport default ActionPager;","import { Api } from './BaseApi'\n\nconst WorkflowApi = Api.injectEndpoints({\n endpoints: (build) => ({\n applyWorkflow: build.mutation<number, { id: number, ticketId: number }>({\n query: (props) => ({\n url: `Workflow/${props.id}/Apply/${props.ticketId}`,\n method: \"POST\"\n }),\n invalidatesTags: [\"GetActions\", \"GetTicket\", \"GetTicketDetails\"]\n }),\n completeAction: build.mutation<number, { id: number }>({\n query: (props) => ({\n url: `Workflow/Action/${props.id}/Complete`,\n method: \"POST\"\n }),\n invalidatesTags: [\"GetActions\"]\n }),\n }),\n\n overrideExisting: false,\n})\n\nexport { WorkflowApi };","import { IReaction } from \"../../types/Ticket/IReaction\";\nimport { Api } from \"./BaseApi\";\n\nconst reactionsApi = Api.injectEndpoints({\n endpoints: (builder) => ({\n getReactions: builder.query<IReaction[], number>({\n query: (id) => `Ticket/${id}/Reaction`,\n providesTags: [\"GetReactions\"],\n }),\n creatReaction: builder.mutation<any, IReaction>({\n query: (info) => ({\n url: `Ticket/${info.Call_Id}/Reaction`,\n method: \"POST\",\n body: info,\n }),\n invalidatesTags: [\"GetReactions\"],\n }),\n deleteReaction: builder.mutation<any, IReaction>({\n query: (reaction) => ({\n url: `Ticket/${reaction.Call_Id}/Reaction/${reaction.Id}`,\n method: 'DELETE'\n }),\n invalidatesTags: ['GetReactions'],\n }),\n }),\n});\n\nexport default reactionsApi;","import React, { useContext, useState } from 'react';\nimport { Button } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Popover, PopoverActionsBar, Tooltip } from '@progress/kendo-react-tooltip';\nimport { FacebookCounter, GithubCounter, GithubSelector } from '@charkour/react-reactions';\nimport { IAction } from '../../../../types/Action/IAction';\nimport reactionsApi from '../../../../redux/api/ReactionApi';\nimport { Action } from '@progress/kendo-react-dateinputs';\nimport { IReaction } from '../../../../types/Ticket/IReaction';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\n\nconst LikeButton: React.FC<IAction> = (action) => {\n const profile = useContext<IUserProfile>(RevUserContext)\n const { data: reactions } = reactionsApi.useGetReactionsQuery(action?.Call_Id, { skip: !profile?.Features.Like });\n const [addReaction, { isLoading }] = reactionsApi.useCreatReactionMutation();\n const [removeReaction, { isLoading: isDeleting }] = reactionsApi.useDeleteReactionMutation();\n\n const anchor = React.useRef(null);\n const [showSelector, setShowSelector] = React.useState(false);\n const myReaction = reactions?.find(r => r.Action_Id == action.ID && r.Staff_Id == profile?.Id);\n\n const handleRemove = (item) => {\n console.log('handleRemove', item, myReaction);\n if (myReaction) {\n removeReaction(myReaction).unwrap().then(() => {\n console.log('reaction removed');\n });\n }\n\n };\n\n const handleAdd = (item) => {\n //Hide the selector\n setShowSelector(false);\n\n var newReaction = {\n Id: myReaction ? myReaction.Id : 0,\n Call_Id: action?.Call_Id,\n Action_Id: action?.ID,\n Staff_Id: profile?.Id\n } as IReaction\n\n switch (item) {\n case 'ðŸ‘':\n newReaction.Reaction_Type = 1;\n break;\n case '👎':\n newReaction.Reaction_Type = 2;\n break;\n case '😄':\n newReaction.Reaction_Type = 3;\n break;\n case '🎉':\n newReaction.Reaction_Type = 4;\n break;\n case '😕':\n newReaction.Reaction_Type = 5;\n break;\n case 'â¤ï¸':\n newReaction.Reaction_Type = 6;\n break;\n default:\n // code block\n }\n\n console.log('handleAdd', item, item == 'ðŸ‘', newReaction);\n\n addReaction(newReaction).unwrap().then(() => {\n console.log('reaction added');\n });\n }\n\n const TooltipContentTemplate = (props: any) => {\n return (\n <GithubSelector onSelect={handleAdd} />\n );\n }\n\n const actualReactions = reactions?.filter(r => r.Action_Id == action.ID)?.map((reaction) => {\n var em = 'ðŸ‘'\n switch (reaction.Reaction_Type) {\n case 2:\n em = '👎'\n break;\n case 3:\n em = '😄'\n break;\n case 4:\n em = '🎉'\n break;\n case 5:\n em = '😕'\n break;\n case 6:\n em = 'â¤ï¸'\n break;\n default:\n // code block\n }\n\n return {\n emoji: em,\n by: reaction.Staff_Id == profile?.Id ? 'You' : reaction.Staff_Name.toString()\n }\n });\n\n //Create a window click event to close the popover\n React.useEffect(() => {\n const handleClick = (e) => {\n if (anchor.current && !anchor.current.contains(e.target)) {\n setShowSelector(false);\n }\n };\n window.addEventListener('click', handleClick);\n return () => window.removeEventListener('click', handleClick);\n }, []);\n\n if (!actualReactions || !action || action?.Is_System_Action || !profile?.Features.Like || action?.Action_Type_Id == 8) return <></>;\n\n return (\n <div ref={anchor} className='like-button'>\n <Popover className='reactions' anchor={anchor.current} offset={{ left: -15, top: 0 }} show={showSelector} position='top' callout={false}>\n <GithubSelector onSelect={handleAdd} />\n </Popover>\n <GithubCounter counters={actualReactions} user={profile?.F_Name + ' ' + profile?.L_Name} onSelect={handleRemove} onAdd={() => setShowSelector((s) => !s)} />\n </div>\n );\n};\n\nexport default LikeButton;","import React from 'react';\nimport { IAction } from '../../../../types/Action/IAction';\nimport { Button, ButtonHandle } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Link } from 'react-router-dom';\nimport { FileApi } from '../../../../redux/api/FileApi';\nimport { FileType } from '../../../../types/File/FileType';\nimport { UserApi } from '../../../../redux/api/UserApi';\n\nconst AttachmentButton: React.FC<IAction> = ({ File_Count, ID }) => {\n const { data: isFileActiveInternal } = FileApi.useIsActiveQuery(FileType.Call_Action_Internal)\n const { data: isFileActiveExternal } = FileApi.useIsActiveQuery(FileType.Call_Action_External)\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const isActive = (userProfile?.Features.External_Interface && isFileActiveExternal) || (!userProfile?.Features.External_Interface && isFileActiveInternal);\n\n const anchor = React.useRef<ButtonHandle | null>(null);\n const [show, setShow] = React.useState(false);\n const handleClick = () => {\n setShow((show) => !show);\n };\n\n //Close the popup when the user clicks outside of it\n React.useEffect(() => {\n //doesn't work, always closing\n const listener = (e: MouseEvent) => {\n if (!anchor.current?.element.contains(e.target as Node)) {\n setShow(false);\n }\n };\n\n\n document.addEventListener('mousedown', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n };\n }, []);\n\n if (!isActive) return null;\n if (File_Count == 0) return null;\n\n return (<>\n\n {/* <Popup popupAlign={{ horizontal: 'right', vertical: 'top' }} anchorAlign={{ horizontal: 'left', vertical: 'top' }}\n anchor={anchor.current && anchor.current.element} style={{ width: 400 }}\n show={show}\n popupClass={'p-4'}\n >\n <FileUpload Primary_Id={ID} FileType={6} />\n </Popup> */}\n {/* <BadgeContainer className='mr-3'>\n <Badge align={{ horizontal: 'end', vertical: 'top' }} >{File_Count}</Badge>\n </BadgeContainer> */}\n <Link to={`action/${ID}/files`}> <Button ref={anchor} svgIcon={svg.paperclipIcon} fillMode='outline' title='Attachments' onClick={handleClick} >{File_Count}</Button></Link>\n\n </>\n );\n};\n\nexport default AttachmentButton;","import React, { useRef } from 'react';\nimport { IAction } from '../../../../types/Action/IAction';\nimport { Button, ButtonGroup, ButtonHandle } from '@progress/kendo-react-buttons';\nimport LikeButton from './LikeButton';\nimport * as svg from '@progress/kendo-svg-icons';\nimport AttachmentButton from './AttachmentButton';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { Api } from '../../../../redux/api/BaseApi';\nimport { Link } from 'react-router-dom';\nimport { isMobile } from 'react-device-detect';\nimport { ContextMenu, Menu, MenuItem, MenuItemModel, MenuSelectEvent } from '@progress/kendo-react-layout';\n\nconst ActionButtons: React.FC<IAction> = (action) => {\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const [updateAction, { isLoading: unpinning }] = TicketApi.useUpdateActionPinMutation();\n const [showMenu, setShowMenu] = React.useState(false);\n //Decides if the user can edit this action\n const canEdit = (action: IAction) => {\n //temporarily enabled for testing\n //return true;\n\n if (action.Is_System_Action || action?.ID === 0) return false;\n if (userProfile?.Features.Edit_Any_Action) return true;\n if (userProfile?.Features.Edit_My_Actions && action.Staff_Id == userProfile?.Id) return true;\n return false;\n }\n\n //Decides if the user can edit this action\n const canDelete = (action: IAction) => {\n //temporarily enabled for testing\n //return true;\n\n if (action.Is_System_Action || action?.ID === 0) return false;\n if (userProfile?.Features.Delete_Any_Action) return true;\n if (userProfile?.Features.Delete_My_Actions && action.Staff_Id === userProfile?.Id) return true;\n return false;\n }\n\n const unPinAction = (action: IAction) => {\n updateAction({ TicketId: action?.Call_Id, Id: action.ID, Pinned: false }).unwrap();\n };\n\n const menuItems = [\n { text: 'Edit', icon: 'edit' },\n ] as MenuItemModel[]\n\n const menuButton = useRef<ButtonHandle>(null);\n\n const menuItemClicked = (e: MenuSelectEvent) => {\n }\n\n\n return (\n false ? <>\n <div className='flex'>\n <LikeButton {...action} />\n <Menu vertical={false} onSelect={menuItemClicked} >\n <MenuItem text='' svgIcon={svg.moreHorizontalIcon}>\n {action.Pinned && <MenuItem text='Unpin' svgIcon={svg.unpinIcon} />}\n <MenuItem text='Attach' svgIcon={svg.paperclipIcon} />\n <MenuItem text='Edit' icon='edit' />\n <MenuItem text='Delete' icon='delete' />\n </MenuItem>\n </Menu>\n </div ></>\n :\n <>\n <ButtonGroup>\n {action.ID > 0 && <LikeButton {...action} />}\n <AttachmentButton {...action} />\n {action.Pinned && <Button title={'Pinned. Click to unpin.'} svgIcon={svg.unpinIcon} fillMode='solid' onClick={() => unPinAction(action)}></Button>}\n </ButtonGroup>\n {canEdit(action) && <Link to={`action/${action.ID}`} title='Edit' className='nav-link'><Button svgIcon={svg.pencilIcon} className='off' fillMode='outline'></Button></Link>}\n {canDelete(action) && <Link to={`action/${action.ID}/delete`} title='Delete' className='nav-link'><Button svgIcon={svg.trashIcon} className='off' fillMode='outline' title='Delete'></Button></Link>}\n </>\n );\n};\n\nexport default ActionButtons;","import React from 'react';\nimport ReadMoreReact from 'read-more-react';\n\ninterface AutoLinkerProps {\n text: string;\n}\n\nconst AutoLinker: React.FC<AutoLinkerProps> = ({ text }) => {\n const replaceWithLink = (text: string) => {\n let regex = /\\[\\[(?:<[\\w\\sa-z0-9=\"'();\\-:]*)*(?:>)*(?:\\s)?([0-9]+)(?:\\s)?(?:<\\/\\w*>)*\\]\\]/g;\n text = text.replace(regex, (match, p1) => {\n return `<a class=\"Ticket-Link\" href=\"./ticket/${p1}\">${p1}</a>`;\n });\n regex = /\\[\\[KB([0-9]+)\\]\\]/ig;\n text = text.replace(regex, (match, p1) => {\n return `<a class=\"KB-Link\" href=\"./KBase/Default.aspx?KB_Id=${p1}\">KB${p1}</a>`;\n });\n\n regex = /\\[\\[(@[a-z,A-Z,0-9, ]+)\\]\\]/ig;\n return text.replace(regex, (match, p1) => {\n return `<span class=\"Tag-Link\">${p1}</span>`;\n });\n };\n\n if (!text) return null;\n\n return (\n <div dangerouslySetInnerHTML={{ __html: replaceWithLink(text).replaceAll('\\r\\n', '<br/>') }} />\n // <ReadMoreReact text={replaceWithLink(text).replaceAll('\\r\\n', '<br/>')}></ReadMoreReact>\n );\n};\n\nexport default AutoLinker;","import React, { useMemo } from 'react';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { IAction } from '../../../../types/Action/IAction';\nimport ActionButtons from './ActionButtons';\nimport { Button, SplitButton } from '@progress/kendo-react-buttons';\nimport { Avatar } from '@progress/kendo-react-layout';\nimport ReactTimeAgo from 'react-timeago'\nimport { Setting } from '../../../../types/Setting/Setting';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport AutoLinker from './Tools/AutoLinker';\n\ninterface ActionNoteProps {\n action: IAction;\n userProfile: IUserProfile;\n workflowStepCompleted: (action: IAction, edit: boolean) => void;\n}\n\nconst Action: React.FC<ActionNoteProps> = ({ action, userProfile, workflowStepCompleted }) => {\n const { data: notesColorSetting } = UserApi.useGetSettingQuery(Setting.END_USER_NOTES_COLOR);\n const getBackgroundColor = (action: IAction) => {\n if (action?.Pinned) return '#e1f8b9';\n\n return action?.Is_Client_Role && !action.Is_System_Action && notesColorSetting?.Bool_Value && notesColorSetting?.String_Value\n }\n\n\n //Action the action while the ID doesn't change\n const actionControl = useMemo(() => {\n if (action.Is_System_Action)\n return systemAction(action, userProfile);\n\n return (\n <div className='action' key={action.ID}>\n {/* rendered:{new Date().toLocaleTimeString()} */}\n <div className=\"d-flex header\" style={{ backgroundColor: getBackgroundColor(action) }}>\n {action.Staff_Id > 0 && userProfile?.Features?.Profile_Action_Images && <Avatar className='me-1' rounded='full'><img src={action.Is_System_Action ? './images/Host_Images/System_Action/Gears.png' : action.Profile_Image_Url || './images/placeholder_sml.png'} alt=\"Profile\" width=\"50\" height=\"50\" /></Avatar>}\n <div className='ms-2'>\n <h6 className='text-info action-author'>\n {action.Is_System_Action ? 'System' : <>{action.Staff_Name} {action.Role_Name && !userProfile.Features.External_Interface && <small>({action.Role_Name})</small>}</>}{actionIcon(action)}\n {action.Action_Type_Id === 14 && <SplitButton title={'Complete this step'} svgIcon={svg.checkboxIcon} items={[{ text: 'Complete and Edit Action' }]}\n onItemClick={() => workflowStepCompleted(action, true)}\n onButtonClick={() => workflowStepCompleted(action, false)} className=\"complete-workflow-step\" text='Complete'></SplitButton>}\n {action.Action_Type_Id === 15 && <SplitButton disabled title={'Complete this step'} svgIcon={svg.checkboxIcon} fillMode='outline' style={{ width: '150px' }} text='Complete'></SplitButton>}\n </h6>\n {action.ID > 0 && <small className=\"text-muted\">{userProfile.Show_Friendly_Dates\n ? <ReactTimeAgo date={new Date(action.Action_Dt + 'Z')} title={new Date(action.Action_Dt + 'Z').toLocaleDateString() + ' ' + new Date(action.Action_Dt + 'Z').toLocaleTimeString()} ></ReactTimeAgo>\n : new Date(action.Action_Dt + 'Z').toLocaleDateString() + ' ' + new Date(action.Action_Dt + 'Z').toLocaleTimeString()}</small>}\n </div>\n <div className='d-flex ms-auto bg-pink-50'>\n <div className='d-flex flex-row-reverse flex-wrap align-items-start' style={{ color: action.Action_Type_Id === 15 && 'gray' }}>\n <div className='d-flex' >\n <ActionButtons {...action} />\n </div>\n {!userProfile.Features.External_Interface && action?.Action_Type_Id != 8 && !action.Is_System_Action && <div className='time me-2 mt-1'>\n <div><small className=\"text-muted\">{userProfile?.Features?.Non_Bill_Time ? \"Bill:\" : \"Time:\"}</small> {action.Bill_Min}</div>\n {userProfile?.Features?.Non_Bill_Time && <div className='ms-3'><small className='text-muted'>Non-Bill:</small> {action.Non_Bill_Min}</div>}</div>}\n </div>\n\n </div>\n </div>\n <p className='note ms-3' style={{ color: action.Action_Type_Id === 15 && 'gray' }}><AutoLinker text={action.HTML_Notes ?? action.Action_Notes} /></p>\n </div>)\n }\n , [action]);\n\n return actionControl;\n};\n\nconst systemAction = (action: IAction, userProfile: IUserProfile) => {\n return (\n <div className='system-action d-flex justify-content-center align-items-center'>\n <div className='vertical-line'></div>\n <div className='notes'>{actionIcon(action)} <AutoLinker text={action.HTML_Notes ?? action.Action_Notes} />\n {action.ID > 0 && <div className=\"action-date text-muted\">{userProfile.Show_Friendly_Dates\n ? <ReactTimeAgo date={new Date(action.Action_Dt + 'Z')} title={new Date(action.Action_Dt + 'Z').toLocaleDateString() + ' ' + new Date(action.Action_Dt + 'Z').toLocaleTimeString()} ></ReactTimeAgo>\n : new Date(action.Action_Dt + 'Z').toLocaleDateString() + ' ' + new Date(action.Action_Dt + 'Z').toLocaleTimeString()}</div>}\n </div>\n <div className='vertical-line'></div>\n </div>\n )\n}\n\n\nconst actionIcon = (action: IAction) => {\n\n var icon = null;\n if (action.Is_System_Action) {\n //System\n icon = <SvgIcon icon={svg.gearIcon} className='' />\n } else if (action.Action_Type_Id === 20) {\n //Timesheet\n icon = <SvgIcon icon={svg.clockIcon} className='mr-1' />\n } else if (action.Action_Type_Id === 7) {\n //Private\n icon = <SvgIcon icon={svg.lockIcon} className='mr-1' />\n } else if (action.Action_Type_Id === 30) {\n //Email to action\n icon = <SvgIcon icon={svg.paperPlaneIcon} className='mr-1' />\n } else if (action.Action_Type_Id === 17) {\n //Calendar\n icon = <SvgIcon icon={svg.calendarIcon} className='mr-1' />\n }\n\n if (icon)\n return <span title={action.Action_Type_Name} >{icon}</span>\n}\n\nexport default Action;","import React, { useEffect, useMemo } from 'react';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { PartialSpinny } from '../../../Nav/Spinny';\nimport { CardBody, CardHeader } from '@progress/kendo-react-layout';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { IAction, IActionDTO } from '../../../../types/Action/IAction';\nimport { Api } from '../../../../redux/api/BaseApi';\nimport { useReduxSelector } from '../../../../redux/hooks';\nimport FilterBanner from './Tools/Filter/FilterBanner';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport { Skeleton } from '@progress/kendo-react-indicators';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport { Setting } from '../../../../types/Setting/Setting';\nimport { PageChangeEvent } from '@progress/kendo-react-data-tools';\nimport ActionPager from './Pager';\nimport { useGetHostConfigQuery } from '../../../../redux/api/AccountApi';\nimport { Card } from 'react-bootstrap';\nimport { WorkflowApi } from '../../../../redux/api/WorkflowApi';\nimport { useNavigate } from 'react-router-dom';\nimport Action from './Action';\n\nconst Actions: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const [page, setPage] = React.useState<PageInterface>({ skip: 0, take: null });\n //Filter the actions\n const filter = useReduxSelector(state => state.filter);\n const { data: userProfile } = Api.useGetUserProfileQuery();\n const { data: actions, refetch, isFetching } = TicketApi.useGetActionsQuery({ ticketId: Number(ticket?.ID), take: page.take, skip: page.skip, ...filter }, { skip: ticket?.ID === undefined || page.take === null, pollingInterval: 30000 });\n const [updateAction, { isLoading: unpinning }] = TicketApi.useUpdateActionPinMutation();\n //Page size is and System setting\n const { data: hostConfig } = useGetHostConfigQuery(userProfile?.Tenant_Uid, { skip: !userProfile?.Tenant_Uid });\n const [completeWorkflowAction, { isLoading: completing }] = WorkflowApi.useCompleteActionMutation();\n\n //group actions by Step_Name\n //const steps = [...new Set(actions?.Items?.slice().sort((a, b) => b?.Step_Order - a?.Step_Order).map(a => { return { Step_Id: a.Step_Id, Step_Name: a.Step_Name } }))];\n const hasWorkflow = actions?.Items?.some(a => a.Step_Id > 0);\n const steps = actions?.Items?.slice().sort((a, b) => b?.Step_Order - a?.Step_Order).map(a => { return { Step_Id: a.Step_Id, Step_Name: a.Step_Name, Workflow_Processing: a.Workflow_Processing } }).filter((value, index, self) =>\n index === self.findIndex((t) => (\n t.Step_Id === value.Step_Id && t.Step_Name === value.Step_Name\n ))\n );\n\n useEffect(() => {\n if (hostConfig)\n setPage(page => {\n return { ...page, take: hostConfig?.Call_Action_Page_Size }\n });\n }, [hostConfig]);\n // Moved to server filtering, otherwise action paging doesn't work.\n //Sorting happens server side\n const filteredActions = actions?.Items //.slice().sort((a, b) => new Date(b.Action_Dt)?.getTime() - new Date(a.Action_Dt)?.getTime()).sort((b, a) => a.Pinned - b.Pinned);\n\n const handlePageChange = (event: PageChangeEvent) => {\n setPage({ skip: event.skip, take: event.take });\n };\n\n const workflowStepCompleted = (action: IAction, edit: boolean) => {\n completeWorkflowAction({ id: action.Workflow_Action_Id }).unwrap().then(newActionId => {\n if (edit)\n navigate(`/ticket/${ticket.ID}/action/${newActionId}`);\n });\n }\n\n\n if (!actions?.Items || ticket.Is_Loading) return <>\n <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '60px', marginBottom: '10px' }} />\n <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '60px', marginBottom: '10px' }} />\n <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '60px', marginBottom: '10px' }} />\n <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '60px', marginBottom: '10px' }} />\n </>;\n\n return (\n <div>\n {((!actions && isFetching) || unpinning || completing) && <PartialSpinny />}\n\n <FilterBanner />\n <ActionPager onChange={handlePageChange} skip={page.skip} total={actions?.RowCount} />\n {steps?.map(step => {\n const stepActions = filteredActions.filter(a => a.Step_Id === step.Step_Id);\n const actionNotes = stepActions.map((action) =>\n <Action action={action} userProfile={userProfile} workflowStepCompleted={workflowStepCompleted} key={action.ID} />\n );\n\n\n return (\n hasWorkflow ? <Card>\n <CardHeader className='workflow-header'>\n <h5>{step.Workflow_Processing !== null && <><img className='processing-image' src={step.Workflow_Processing === 0 ? './images/sequential-workflow.png' : './images/parallel-workflow.png'} title={step.Workflow_Processing === 0 ? 'sequential processing' : 'parallel processing'} />Workflow: </>}{step.Step_Name}</h5></CardHeader>\n <CardBody><div className='actions'>{actionNotes}</div></CardBody>\n </Card>\n : <div className='actions' key={step.Step_Id}>{actionNotes}</div>\n )\n })}\n\n {actions?.RowCount === 0 && <h6 className='m-3'>No actions found</h6>}\n <ActionPager onChange={handlePageChange} skip={page.skip} total={actions?.RowCount} />\n </div >\n\n );\n};\n\ninterface PageInterface {\n skip: number;\n take: number;\n}\n\nexport default Actions;","import { IAIResponse } from '../../types/AI/IAIResponse';\nimport { IAITranslate } from '../../types/AI/IAITranslate';\nimport { Api } from './BaseApi'\n\nconst aiApi = Api.injectEndpoints({\n endpoints: (build) => ({\n getTicketSummary: build.query<IAIResponse, { ticketId: number }>({\n query: ({ ticketId }) => `AI/Ticket/${ticketId}/Summary`,\n providesTags: [\"GetTicketAISummary\"],\n }),\n translateNote: build.mutation<IAIResponse, IAITranslate>({\n query: (props) => ({\n url: `AI/Translate`,\n method: \"POST\",\n body: props\n }),\n })\n })\n})\n\nexport { aiApi };","import React, { useState } from 'react';\nimport { DropDownButton, DropDownButtonItemClickEvent } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport { Checkbox } from '@progress/kendo-react-inputs';\nimport * as ActionSlice from '../../../../slices/ActionSlice';\nimport * as EmailActionSlice from '../../../../slices/EmailActionSlice';\nimport { useReduxDispatch, useReduxSelector } from '../../../../redux/hooks';\nimport { aiApi } from '../../../../redux/api/AIApi';\n\ntype mode = 'action' | 'email';\n\nconst AINotes: React.FC<{ controlMode?: mode }> = ({ controlMode }) => {\n const dispatch = useReduxDispatch();\n const [translate] = aiApi.useTranslateNoteMutation();\n const { action, translateOption, originalNote } = useReduxSelector(state => state.actionDetails);\n const { email, translateOption: emailTranslateOption, originalNote: originalEmailBody } = useReduxSelector(state => state.emailAction);\n const handleSelect = (event: DropDownButtonItemClickEvent) => {\n\n //Set the selected option in the ACTION sLICE\n dispatch(ActionSlice.SetTranslationOption(event.itemIndex));\n\n //Save the original note\n if (originalNote === null) dispatch(ActionSlice.SetOriginalNote(action.HTML_Notes));\n\n //Translate the note\n if (event.itemIndex === 0) {\n //Original\n dispatch(ActionSlice.SetHTML_Notes(originalNote));\n //Remove the NOte \"backup'\"\n dispatch(ActionSlice.SetOriginalNote(null));\n } else {\n //More Professional, More Concise, More Friendly\n translate({ Notes: action.HTML_Notes, TransformId: event.itemIndex }).unwrap().then((data) => {\n dispatch(ActionSlice.SetHTML_Notes(data.Content[0].Text));\n }).catch((e) => { });\n }\n };\n\n const handleEmailSelect = (event: DropDownButtonItemClickEvent) => {\n\n //Set the selected option in the ACTION sLICE\n dispatch(EmailActionSlice.setTranslationOption(event.itemIndex));\n\n //Save the original note\n if (originalEmailBody === null) dispatch(EmailActionSlice.setOriginalNote(email.HTML_Note));\n\n //Translate the note\n if (event.itemIndex === 0) {\n //Original\n dispatch(EmailActionSlice.setNotes(originalEmailBody));\n //Remove the NOte \"backup'\"\n dispatch(EmailActionSlice.setOriginalNote(null));\n } else {\n //More Professional, More Concise, More Friendly\n translate({ Notes: email.HTML_Note, TransformId: event.itemIndex }).unwrap().then((data) => {\n dispatch(EmailActionSlice.setNotes(data.Content[0].Text));\n }).catch((e) => { });\n }\n };\n const optionSelectred = controlMode === 'email' ? emailTranslateOption : translateOption;\n\n const settings = [\n <><Checkbox checked={optionSelectred === 0} /> Original</>,\n <><Checkbox checked={optionSelectred === 1} /><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" className=\"bi bi-briefcase\" viewBox=\"0 0 16 16\">\n <path d=\"M6.5 1A1.5 1.5 0 0 0 5 2.5V3H1.5A1.5 1.5 0 0 0 0 4.5v8A1.5 1.5 0 0 0 1.5 14h13a1.5 1.5 0 0 0 1.5-1.5v-8A1.5 1.5 0 0 0 14.5 3H11v-.5A1.5 1.5 0 0 0 9.5 1zm0 1h3a.5.5 0 0 1 .5.5V3H6v-.5a.5.5 0 0 1 .5-.5m1.886 6.914L15 7.151V12.5a.5.5 0 0 1-.5.5h-13a.5.5 0 0 1-.5-.5V7.15l6.614 1.764a1.5 1.5 0 0 0 .772 0M1.5 4h13a.5.5 0 0 1 .5.5v1.616L8.129 7.948a.5.5 0 0 1-.258 0L1 6.116V4.5a.5.5 0 0 1 .5-.5\" />\n </svg><span className='ps-1'>More Professional</span></>\n , <><Checkbox checked={optionSelectred === 2} /><SvgIcon icon={svg.minHeightIcon} /><span className='ps-1'>More Concise</span></>\n , <><Checkbox checked={optionSelectred === 3} /><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" fill=\"currentColor\" className=\"bi bi-emoji-smile\" viewBox=\"0 0 16 16\">\n <path d=\"M8 15A7 7 0 1 1 8 1a7 7 0 0 1 0 14m0 1A8 8 0 1 0 8 0a8 8 0 0 0 0 16\" />\n <path d=\"M4.285 9.567a.5.5 0 0 1 .683.183A3.5 3.5 0 0 0 8 11.5a3.5 3.5 0 0 0 3.032-1.75.5.5 0 1 1 .866.5A4.5 4.5 0 0 1 8 12.5a4.5 4.5 0 0 1-3.898-2.25.5.5 0 0 1 .183-.683M7 6.5C7 7.328 6.552 8 6 8s-1-.672-1-1.5S5.448 5 6 5s1 .672 1 1.5m4 0c0 .828-.448 1.5-1 1.5s-1-.672-1-1.5S9.448 5 10 5s1 .672 1 1.5\" />\n </svg><span className='ps-1'>More Friendly</span></>\n ];\n\n const nope = false;\n return (\n <>\n <div className=\"mr-2\">\n <DropDownButton onItemClick={controlMode === 'email' ? handleEmailSelect : handleSelect} className=\"ai-translate-button\" popupSettings={{ popupClass: 'ai-translate-popup' }} items={settings} svgIcon={svg.sparklesIcon} text=\"AI Assist\" endIcon={<SvgIcon icon={svg.chevronDownIcon} />} />\n </div>\n </>\n );\n};\n\nexport default AINotes;","import { Button } from '@progress/kendo-react-buttons';\nimport React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\n\nconst AddKBButton: React.FC<{ from?: string }> = (props) => {\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n\n //Check if the feature is enabled\n if (!userProfile?.Features.KnowledgeBase || !userProfile?.Features.View_KB) return null;\n\n return (\n <Button onClick={() => navigate('Kbase/?from=' + props?.from || 'action')} title={'Add links to Knowledge base articles'} imageUrl='./images/Toolbar/kb.png' >\n + KBase\n </Button>\n );\n};\n\nexport default AddKBButton;","import { useNavigate } from 'react-router-dom';\nimport * as AccountApi from '../redux/api/AccountApi';\nimport { UserApi } from '../redux/api/UserApi';\n\n/// Redirects to the home page when the user closes the browser tab.\nconst useRedirectOnClose = () => {\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const { data: hostConfig } = AccountApi.useGetHostConfigQuery(userProfile?.Tenant_Uid, { skip: !userProfile?.Tenant_Uid });\n\n const handleRedirect = (ticketId?: number) => {\n if (hostConfig?.Close_Call_Page_Action === 1) {\n navigate('/');\n } else if (ticketId) {\n navigate(`/ticket/${ticketId}`);\n }\n };\n\n return handleRedirect;\n};\n\nexport default useRedirectOnClose;","import React, { useState } from 'react';\nimport { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Button } from '@progress/kendo-react-buttons';\n\nexport type GroupAssignedProps = {\n show?: boolean\n onClose: (yes: boolean) => void;\n message?: string;\n}\n\nconst GroupAssigned: React.FC<GroupAssignedProps> = (props) => {\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n\n const handleClose = () => {\n props.onClose && props.onClose(false);\n };\n\n const handleConfirm = () => {\n // Logic to assign the ticket to the current user before closing\n //console.log('Ticket assigned to the current user and closed.');\n props.onClose && props.onClose(true);\n };\n\n if (!props.show) return null;\n\n return (\n <div>\n <Dialog className='cool-window' title={\"Assign to yourself?\"} onClose={handleClose} width={400}>\n <p>{props.message ? props.message : `The ${userProfile?.Phrases.CallPhrase} cannot be closed when exclusively assigned to a Group. Would you like to assign the ${userProfile?.Phrases.CallPhrase} to yourself before closing?`}</p>\n <DialogActionsBar layout='center'>\n <Button size='large' svgIcon={svg.checkIcon} onClick={handleConfirm} style={{ backgroundColor: 'rgb(115, 169, 19)', color: 'white' }}>\n Yes\n </Button>\n <Button size='large' svgIcon={svg.xIcon} fillMode='outline' onClick={handleClose}>\n No\n </Button>\n </DialogActionsBar>\n </Dialog>\n </div >\n );\n};\n\nexport default GroupAssigned;","import React, { createContext, useContext, useState } from 'react';\nimport GroupAssigned, { GroupAssignedProps } from './GroupAssigned';\n\nconst CloseDialogContext = createContext<CloseDialogContextProps>({} as CloseDialogContextProps);\n//CloseDialogContext.displayName = 'CloseDialogContext';\nexport const CloseDialogProvider = ({ children }) => {\n const [dialog, setDialog] = useState<GroupAssignedProps>();\n\n const showDialog = (props) => {\n console.log('showDialog', props);\n setDialog({ ...props, show: true });\n };\n\n const hideDialog = () => {\n setDialog({ show: false, message: '', onClose: null });\n };\n\n return (\n <CloseDialogContext.Provider value={{ dialog, showDialog, hideDialog }}>\n <GroupAssigned {...dialog} />\n {children}\n </CloseDialogContext.Provider>\n );\n};\nexport type CloseDialogContextProps = {\n dialog: GroupAssignedProps\n showDialog: (props: GroupAssignedProps) => void;\n hideDialog: () => void;\n};\nexport const useCloseDialog = () => useContext(CloseDialogContext);","import { useState } from 'react';\nimport { ITicket } from '../types/Ticket/ITicket';\nimport { ISetStatusProps } from '../types/Ticket/Status/ISetStatusProps';\nimport { IUserProfile } from '../types/User/IUserProfile';\nimport { TicketApi } from '../redux/api/TicketApi';\nimport { GroupAssignedProps } from '../components/Ticket/TicketDetails/Sections/Tools/Close/GroupAssigned';\nimport useRedirectOnClose from './useRedirectOnClose';\nimport { useNavigate } from 'react-router-dom';\nimport { useCloseDialog } from '../components/Ticket/TicketDetails/Sections/Tools/Close/CloseDialogContext';\nimport { set, update } from 'lodash';\nimport { useSelector } from 'react-redux';\nimport { useReduxDispatch, useReduxSelector } from '../redux/hooks';\nimport { setIsClosing } from '../slices/TicketDetailSlice';\n\ninterface UseCloseTicketLogicReturn {\n closeTicket: (ticket: ITicket, closeStatusId?: number) => void;\n isClosing: boolean;\n error: string | null;\n}\n\nexport const useCloseTicketLogic = (profile: IUserProfile): UseCloseTicketLogicReturn => {\n const { isClosing } = useReduxSelector(s => s.ticketDetails);\n const updateState = useReduxDispatch();\n //const [isClosing2, setIsClosing] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [setAssigned, { isLoading: settingOwnership }] = TicketApi.useReassignMutation();\n const [setStatus, { isLoading }] = TicketApi.useSetStatusMutation();\n //const [configGroupProps, setConfirmDialogProps] = useState<GroupAssignedProps>(null);\n const handleRedirect = useRedirectOnClose();\n const { data: allStatuses } = TicketApi.useGetStatusesQuery();\n const defaultCloseStatus = allStatuses?.find(s => s.Closed_default === true);\n const navigate = useNavigate();\n const { showDialog, hideDialog } = useCloseDialog();\n\n\n //Close the current ticket and assign the specified status id\n const closeTicket = (ticket: ITicket, statusId?: number) => {\n console.log('profile.Features.Require_Ticket_Ownership_To_Close', profile.Features.Require_Ticket_Ownership_To_Close, ticket.Call_Assignment);\n\n //Check if the ticket is assigned only to a queue - need to show a dialog to confirm assignment to the current user\n if (ticket.Call_Assignment.length === 1 && ticket.Call_Assignment[0].Access_Level_Id === 6) {\n showDialog({\n show: true, onClose: (yes) => {\n //Assign to ME\n if (yes) {\n setAssigned({ TicketId: ticket.ID, New_Assignees: [profile?.Id] }).unwrap().then(() => {\n //Close \n //setConfirmDialogProps(p => { return { ...p, show: false } })\n hideDialog();\n continueClose({ ...ticket, CloseValidationCodes: ticket.CloseValidationCodes?.filter(c => c !== -7) }, statusId);\n });\n } else {\n hideDialog();\n }\n }\n });\n return\n } else {\n //Require Ownership to close FEATURE\n if (profile.Features.Require_Ticket_Ownership_To_Close && ticket.Call_Assignment.find(a => a.Contact_Id === profile.Id) === undefined) {\n showDialog({\n message: `${profile?.Phrases.CallPhrase} ownership is required. Would you like to assign the ${profile?.Phrases.CallPhrase} to yourself before closing it?`,\n show: true, onClose: (yes) => {\n //Assign to ME\n if (yes) {\n setAssigned({ TicketId: ticket.ID, New_Assignees: [profile?.Id] }).unwrap().then(() => {\n //Close \n hideDialog();\n\n continueClose({ ...ticket, CloseValidationCodes: ticket.CloseValidationCodes?.filter(c => c !== -7) }, statusId);\n });\n } else {\n hideDialog();\n }\n }\n });\n return\n }\n }\n\n continueClose(ticket, statusId);\n }\n\n const continueClose = (ticket: ITicket, statusId?: number) => {\n console.log('continueClose', ticket, statusId);\n //if there is no close validation then just close the ticekt otherwise navigate to the close page\n if (ticket.CloseValidationCodes.length === 0) {\n updateState(setIsClosing(true));\n\n //DefaULT CLOSE\n setStatus({\n Ticket_Id: ticket.ID,\n New_Status_Id: statusId || defaultCloseStatus?.ID\n } as ISetStatusProps).unwrap().then(() => {\n updateState(setIsClosing(false));\n\n //Close the ticket\n handleRedirect(ticket?.ID);\n\n setError('Testing');\n }).catch((err) => {\n updateState(setIsClosing(false));\n\n //if the api returns a 400 error them open the validation popup\n if (err.originalStatus === 400) {\n navigate(`close/${statusId}`);\n }\n });\n\n return false;\n }\n\n navigate(`close/${statusId || ''}`);\n }\n\n return { closeTicket, isClosing, error };\n};\n\n","import React, { useContext, useMemo } from 'react';\nimport { Field, Form, FormElement } from '@progress/kendo-react-form';\nimport { ITicket } from '../../../../types/Ticket/ITicket';\nimport { useReduxDispatch, useReduxSelector } from '../../../../redux/hooks';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport * as ActionSlice from '../../../../slices/ActionSlice';\nimport ActionNote from '../../../Action/ActionNote/ActionNote';\nimport { Button, SplitButton } from '@progress/kendo-react-buttons';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { Card, CardBody, CardHeader } from '@progress/kendo-react-layout';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Link } from 'react-router-dom';\nimport { PartialSpinny } from '../../../Nav/Spinny';\nimport { IActionDTO } from '../../../../types/Action/IAction';\nimport AINotes from './AINotes';\nimport FileUpload from '../../../Attachment/FileUpload';\nimport { CardFooter } from 'react-bootstrap';\nimport { FileType } from '../../../../types/File/FileType';\nimport { FileApi } from '../../../../redux/api/FileApi';\nimport { isObject } from 'lodash';\nimport { nanoid } from 'nanoid';\nimport AddKBButton from './Tools/KB/AddKBButton';\nimport { useCloseTicketLogic } from '../../../../hooks/useCloseTicketLogic';\n\ninterface AddActionProps {\n ticket: ITicket\n onsubmitted?: () => void\n onclosed?: () => void\n showHeader?: boolean\n showSaveButton?: boolean\n actionId?: number\n}\n\nconst AddAction: React.FC<AddActionProps> = ({ actionId, ticket, onsubmitted, onclosed, showHeader, showSaveButton }) => {\n const profile = useContext<IUserProfile>(RevUserContext)\n const { data: isFileActiveInternal } = FileApi.useIsActiveQuery(FileType.Call_Action_Internal)\n const { data: isFileActiveExternal } = FileApi.useIsActiveQuery(FileType.Call_Action_External)\n const isFileActive = (profile?.Features.External_Interface && isFileActiveExternal) || (!profile?.Features.External_Interface && isFileActiveInternal);\n const { action: newAction } = useReduxSelector(state => state.actionDetails);\n const [postAction, { isLoading: savingAction }] = TicketApi.useCreateActionMutation();\n const [updateAction, { isLoading: updatingAction }] = TicketApi.useUpdateActionMutation();\n const dispatch = useReduxDispatch();\n const [apiError, setApiError] = React.useState<string>()\n //Get existing action\n const { data: action, isFetching: fetchingAction } = TicketApi.useGetActionQuery({ actionId: actionId, ticketId: ticket?.ID }, { skip: (!actionId || !ticket?.ID) });\n //Create a unique form name\n const formName = useMemo(() => 'new-action_' + nanoid(), [actionId]);\n const { closeTicket, isClosing, error: closeError } = useCloseTicketLogic(profile);\n\n //const { data: newTicket, refetch } = TicketApi.useGetTicketDetailsQuery({ ticketId: ticket?.ID ?? 0 }, { skip: !ticket?.ID });\n\n //Put the existing action in state when it is fetched from the API\n React.useEffect(() => {\n if (action) {\n //Update the HTML action if it is blank (some system generated notes)\n dispatch(ActionSlice.SetAction({ ...action, HTML_Notes: action.HTML_Notes || action.Action_Notes, Action_Dt: new Date(action.Action_Dt + 'Z') }));\n }\n }, [action])\n\n const onCloseClicked = () => {\n if (newAction?.HTML_Notes?.length > 0 && !window.confirm('You have unsaved changes. Are you sure you want to cancel this Action note?')) return;\n\n onclosed();\n }\n\n\n const handleActionSubmit = (saveAndClose: boolean) => {\n\n let actionTypeId = newAction.Action_Type_Id ?? (profile.Features.External_Interface ? 8 : 1);\n let saveAction = { ...newAction, Call_Id: ticket.ID, Notes: newAction.HTML_Notes, Action_Type_Id: actionTypeId, Contact_Id: newAction.Staff_Id } as IActionDTO\n let updateProps = { Id: saveAction.ID, ticketId: saveAction.Call_Id, action: saveAction };\n\n //Add or update\n newAction.ID === 0 ?\n postAction(saveAction).unwrap().then(() => {\n //Reset the action in state\n dispatch(ActionSlice.ResetAction(null));\n\n onsubmitted();\n\n if (saveAndClose) {\n //remove the close validation code = -1 for action which has just been fulfilled\n let codes = ticket.CloseValidationCodes.filter(c => c !== -1);\n closeTicket({ ...ticket, CloseValidationCodes: codes });\n\n }\n\n\n }).catch((e) => {\n //Probably a validation error\n //console.error('caught', e, ('Message' in e.data), ('title' in e.data), ('length' in e.data.errors?.Notes), e.data.errors.Notes[0]);\n (isObject(e.data) && 'title' in e.data) ?\n (setApiError(e.data.title + ': ' + ('length' in e.data.errors?.Notes) ? e.data.errors.Notes.join(',') : 'unknonwn'))\n : setApiError(e.data.toString())\n\n if (isObject(e.data) && 'Message' in e.data) setApiError(e.data.Message)\n\n })\n :\n updateAction(updateProps).unwrap().then(() => {\n //Reset the action in state\n dispatch(ActionSlice.ResetAction(null));\n console.log('onsubmitted', onsubmitted)\n onsubmitted();\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(JSON.stringify(e.data))\n })\n }\n const externalUser = profile?.Features.External_Interface;\n const canSaveAndClose = !externalUser && ticket.Open_Status !== 0 && !actionId;\n const saveAndClose = () => {\n handleActionSubmit(true);\n }\n\n const saveButtonClicked = () => {\n handleActionSubmit(false);\n }\n return (\n <div>\n <div>\n <Card className='no-pop p-0 action-form'>\n {showHeader && <CardHeader className='action-header' style={{ color: '#fff', background: profile?.Nav_Hex_Color }}>\n <div className='d-flex align-items-center flex-row flex-grow justify-content-between'>\n New {profile?.Phrases.Action}\n {/*Link goes on the far right */}\n <div>\n <Link className='align-items-right' to={`./action`} title='Pop out' style={{ color: '#fff' }}>\n <Button fillMode='flat' size='medium' svgIcon={svg.windowRestoreIcon} className='off'></Button>\n </Link>\n <Button fillMode='flat' size='medium' svgIcon={svg.xIcon} title='close' onClick={onCloseClicked}></Button>\n </div>\n </div>\n </CardHeader>}\n <CardBody>\n {/* <button className=\"accordion-button\" type=\"button\" data-bs-toggle=\"collapse\" data-bs-target=\"#collapseActionheader\" aria-expanded=\"true\" aria-controls=\"collapseActionheader\"><</button> */}\n {(savingAction || fetchingAction || updatingAction) && <PartialSpinny />}\n <Form ignoreModified={true} onSubmit={() => handleActionSubmit(false)} id={actionId ? 'edit-action-form' : formName}\n render={(formRenderProps) =>\n <FormElement >\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 <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\n </FormElement>} />\n </CardBody>\n <CardFooter>\n {/* file attachments */}\n <div className=''>\n {isFileActive && <div className={`inline-block col-12 align-top ms-3`}>\n <FileUpload Primary_Id={actionId} FileType={profile?.Features.Self_Service ? FileType.Call_Action_External : FileType.Call_Action_Internal} />\n </div>}\n <div className='ms-auto p-1 d-flex flex-row-reverse col-12' >\n {showSaveButton !== false &&\n (canSaveAndClose ?\n <SplitButton onButtonClick={saveButtonClicked} items={[{ text: 'Save and Close' }]} text='Save Action' onItemClick={saveAndClose}\n className='rev-primary-button save-action-button' imageUrl='./images/Log-Ticket-White.png' >\n Save {profile?.Phrases.Action} </SplitButton>\n : <Button form={actionId ? 'edit-action-form' : formName} type={\"submit\"} style={{ color: '#fff', background: profile?.Nav_Hex_Color }} className='save-action-button'>\n <img src='./images/Log-Ticket-White.png' className='inline mr-2 w-5' alt=\"Save Action\" />\n Save {profile?.Phrases.Action}\n </Button>)}\n {!profile?.Features.External_Interface && <AINotes />}\n <div className='mr-2'><AddKBButton from='action' /></div>\n </div>\n </div>\n </CardFooter>\n </Card>\n </div>\n\n </div>\n );\n};\n\nexport default AddAction;","import { Api } from './BaseApi'\nimport { IPinItem } from '../../types/Pin/IPinItem';\n\nexport const PinApi = Api.injectEndpoints({\n endpoints: (builder) => ({\n getPins: builder.query<IPinItem[], void>({\n query: () => 'pin',\n providesTags: ['Pins'],\n }),\n addPin: builder.mutation<any, IPinItem>({\n query: (newPin) => ({\n url: 'pin',\n method: 'POST',\n body: newPin,\n }),\n invalidatesTags: ['Pins'],\n }),\n deletePin: builder.mutation<any, IPinItem>({\n query: (pin) => ({\n url: `pin/${pin.Id}`,\n method: 'DELETE'\n }),\n invalidatesTags: ['Pins'],\n }),\n deletePins: builder.mutation<any, undefined>({\n query: (pin) => ({\n url: `pin`,\n method: 'DELETE'\n }),\n invalidatesTags: ['Pins'],\n }),\n }),\n});\n\nexport const { useGetPinsQuery, useAddPinMutation, useDeletePinMutation } = PinApi;","import React, { useContext } from 'react';\nimport { PinApi } from '../../../../../redux/api/PinApi';\nimport { IUserProfile } from '../../../../../types/User/IUserProfile';\nimport { RevUserContext } from '../../../../../context/UserContext';\nimport { Link, useParams } from 'react-router-dom';\nimport { Button } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { ITicket } from '../../../../../types/Ticket/ITicket';\n\nconst Dockbar: React.FC<ITicket> = (ticket) => {\n const [selected, setSelected] = React.useState(0);\n const profile = useContext<IUserProfile>(RevUserContext)\n var { data } = PinApi.useGetPinsQuery(undefined, { skip: !profile?.Features?.Pin_Dock });\n //get the ticket Id from the route variable\n const { ticketId } = useParams()\n\n\n if (!profile?.Features?.Pin_Dock)\n return <></>;\n\n const handleSelect = e => {\n setSelected(e.selected);\n };\n //Bootstrap tabs\n return (\n <div className='d-none d-lg-block'>\n {/* <ul className='dock-bar'>\n {data?.map((p) =>\n <li><Link to={`/ticket/${p.Call_Id}`}>{p.Call_Id}</Link></li>\n )}\n </ul> */}\n <ul className='nav-dock-bar nav nav-tabs justify-content-end flex' >\n {data?.map((p, i) =>\n <li key={p.Id} title={p.Tooltip} className={\"nav-item\"} > <Link className={ticketId == p.Call_Id.toString() ? \"nav-link \" + (ticket.StateCssClass || \"BlueBG\") : \"nav-link\"} to={`/ticket/${p.Call_Id}`}><Link to={`unpin/${p.Id}`}><Button className='pin-button' size='small' fillMode='flat' imageUrl='./images/pin-dock-white.png' /></Link>{p.Call_Id}</Link></li>\n )}\n </ul>\n </div>\n );\n};\n\nexport default Dockbar;","import React from 'react';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { aiApi } from '../../../../redux/api/AIApi';\nimport { ITicket } from '../../../../types/Ticket/ITicket';\nimport { Card, CardBody, CardHeader, PanelBar, PanelBarItem } from '@progress/kendo-react-layout';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\n\nconst AISummary: React.FC<ITicket> = (ticket) => {\n\n\n return (\n <div className=\"ai-summary\">\n {/* <PanelBar>\n <PanelBarItem id=\"ai-summary\" title='AI Summary' svgIcon={svg.sparklesIcon}> \n </PanelBarItem>\n </PanelBar> */}\n <Card className='no-pop'>\n <CardHeader>\n <SvgIcon icon={svg.sparklesIcon}></SvgIcon> AI Summary\n </CardHeader>\n <CardBody className='pt-4'>\n <AISummaryText {...ticket} /></CardBody>\n </Card>\n\n </div>\n );\n};\n\nconst AISummaryText: React.FC<ITicket> = (ticket) => {\n const { data: summary, isFetching } = aiApi.useGetTicketSummaryQuery({ ticketId: ticket.ID });\n const { data: userProfile } = TicketApi.useGetUserProfileQuery();\n\n if (isFetching) return <div className='ms-4 mb-4'>Summarizing Ticket Details...</div>\n\n return (<>\n <div dangerouslySetInnerHTML={{ __html: summary?.Content[0]?.Text.replace('```html', '').replace('```', '') }} ></div>\n <div className=\"alert alert-warning text-center mt-5\" role=\"alert\"><SvgIcon icon={svg.warningTriangleIcon}></SvgIcon> {userProfile?.Phrases.CallPhrase} summaries are generated by AI and may not always reflect the complete accuracy or details of the original {userProfile?.Phrases.CallPhrase} .</div>\n </>\n );\n\n}\n\nexport default AISummary;","import React, { LegacyRef, MutableRefObject, useContext, useRef } from 'react';\nimport { Button, SplitButton } from '@progress/kendo-react-buttons';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { expandedState, processTreeData } from '../../../../utils/TreeDataOperations';\nimport { TreeView, TreeViewExpandChangeEvent } from '@progress/kendo-react-treeview';\nimport { Popup, PopupHandle } from '@progress/kendo-react-popup';\nimport { IQuickNote } from '../../../../types/Ticket/IQuickNotes';\nimport { ResetAction, SetQuickNote } from '../../../../slices/ActionSlice';\nimport { useReduxDispatch, useReduxSelector } from '../../../../redux/hooks';\nimport { setActionExpanded } from '../../../../slices/TicketDetailUISlice';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { isMobile } from 'react-device-detect';\nimport { useNavigate } from 'react-router-dom';\n\n\nconst AddActionButton: React.FC = () => {\n const navigate = useNavigate();\n const updateState = useReduxDispatch();\n const quickNoteId = 0;\n const selectField = \"selected\";\n const expandField = \"expanded\";\n const dataItemKey = \"Id\";\n const subItemsField = \"QuickNotes\";\n const fields = { selectField, expandField, dataItemKey, subItemsField };\n const profile = useContext<IUserProfile>(RevUserContext)\n const { data: quickNotes, refetch } = TicketApi.useGetQuickNotesQuery();\n const [show, setShow] = React.useState(false);\n const [expanded, setExpanded] = React.useState(quickNotes?.length > 0 ? [quickNotes?.[0][dataItemKey]] : []);\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 { actionExpanded } = useReduxSelector(state => state.ticketDetailsUI);\n const { HTML_Notes } = useReduxSelector(state => state.actionDetails.action);\n const treeData = React.useMemo(\n () => {\n return processTreeData(quickNotes || [], { expanded, value }, fields)\n },\n\n [quickNotes, expanded, value]\n );\n const onExpandChange = React.useCallback(\n (event: TreeViewExpandChangeEvent) =>\n setExpanded(expandedState(event.item, dataItemKey, expanded)),\n [expanded]\n );\n\n const quickNoteSelected = (event) => {\n console.log('quickNoteSelected', event?.item)\n\n //Top level category clicked\n if (event?.item && event?.item.QuickNotes) {\n if (!expanded.includes(event?.item.Id))\n setExpanded([event?.item.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?.item.Id), 1)\n return newVal;\n }); //collaps\n //setShow(true); //stay open\n\n return\n }\n\n\n updateState(setActionExpanded(1))\n\n setShow(false);\n\n updateState(SetQuickNote(event.item));\n }\n\n const parent = useRef(null);\n const popupRef = useRef<PopupHandle>(null);\n\n //A listener to close the popu if the user clicks outside of it\n React.useEffect(() => {\n const listener = (e) => {\n // console.log('listener', e.target)\n if (!popupRef?.current.element?.contains(e.target)) {\n setShow(false);\n }\n }\n document.addEventListener('mousedown', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n }\n }, [popupRef]);\n\n const addAction = () => {\n\n if (actionExpanded === 1 && HTML_Notes?.length > 0 && !window.confirm('You have unsaved changes. Are you sure you want to cancel this Action note?')) return;\n\n //need to reset the action state so it doesn't show a previously partially filled action\n updateState(ResetAction(null));\n\n if (isMobile)\n navigate('action');\n else {\n updateState(setActionExpanded(actionExpanded !== 1 ? 1 : 0))\n }\n }\n\n\n return (<div ref={parent}>\n {(profile?.Features?.Quick_Notes && !profile?.Features.External_Interface && !isMobile) ?\n <SplitButton onButtonClick={addAction} title='Add Action' opened={show} imageUrl='./images/button_add_action.png' className=\"add-action\" onOpen={() => setShow((s) => !s)} items={[{ text: '' }]} ></SplitButton>\n : <Button onClick={addAction} title='Add Action' imageUrl='./images/button_add_action.png' className=\"add-action\" ></Button>}\n\n <Popup ref={popupRef} anchor={parent?.current} popupClass='quick-notes-popup' show={show}>\n <h6 className='ms-2'> Quick notes</h6>\n <TreeView className='' expandIcons={true} data={treeData} textField='Name' childrenField={subItemsField} onExpandChange={onExpandChange} onItemClick={quickNoteSelected}\n key={dataItemKey}\n selectField={selectField}\n expandField={expandField}\n\n />\n </Popup>\n {/* treeData = {JSON.stringify(treeData)} */}\n </div>\n );\n};\n\nexport default AddActionButton;","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { SplitButton, SplitButtonItemClickEvent } from '@progress/kendo-react-buttons';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { Spinny } from '../../../../../Nav/Spinny';\n\nconst HierarchyButton: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [updateHierarchy, { isLoading: updatingTicket, error: saveTicketError }] = TicketApi.useUpdateTicketHierarchyMutation();\n\n const contextOptions = [\n { text: 'Add Child', key: 'add', visible: ticket.Is_Parent, imageUrl: './images/child.png' },\n { text: 'Make Parent', key: 'parent', visible: (!ticket.Is_Parent && ticket.Parent_Call_Id === null), imageUrl: './images/parent.png' },\n { text: 'Change Hierarchy...', key: 'change', visible: true, icon: 'pencil' }\n ];\n\n const onItemClick = (event: SplitButtonItemClickEvent) => {\n switch (event.item.key) {\n case 'add':\n navigate('/ticket/new/?parentCallId=' + ticket.ID);\n break;\n case 'parent':\n //Make the current ticekt a parent\n updateHierarchy({ ticketId: ticket.ID, info: { Is_PArent: true, Parent_Ticket_Id: null } }).unwrap().then(() => {\n //onWindowClose();\n });\n break;\n case 'change':\n navigate('parent-child');\n break;\n default:\n break;\n }\n }\n\n //if (updatingTicket) return <Spinny />\n\n return (\n <SplitButton disabled={ticket.Is_Loading || updatingTicket} onItemClick={onItemClick} items={contextOptions.filter(c => c.visible)} onButtonClick={() => navigate('parent-child')} title={ticket?.Is_Parent ? 'Parent ' + userProfile?.Phrases.CallPhrase : ticket?.Parent_Call_Id > 0 ? 'Child ' + userProfile?.Phrases.CallPhrase : 'No hierarchy, click to edit'} imageUrl={ticket?.Is_Parent ? './images/parent.png' : ticket?.Parent_Call_Id > 0 ? './images/child.png' : './images/Toolbar/parent-child.png'} />\n );\n};\n\nexport default HierarchyButton;","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Button, SplitButton } from '@progress/kendo-react-buttons';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { KBSearchProps } from '../../../../../../types/KB/KBSearchProps';\nimport { KBApi } from '../../../../../../redux/api/KBApi';\n\nconst KBButton: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [searchKB] = KBApi.useSearchKBMutation();\n const [kbResults, setKBResults] = React.useState<number>();\n const canAdd = userProfile?.Features.Add_Ticket_To_KnowledgeBase;\n const { data: ticketKbs } = KBApi.useGetTicketKbsQuery(ticket?.ID, { skip: !ticket?.ID });\n\n //Set the ticket details into the formstate\n React.useEffect(() => {\n if (ticket) {\n searchKB({ Description: ticket.Call_Desc, EndUserId: userProfile.Id, Ticket_Id: ticket?.ID, Count_Only: true } as KBSearchProps).unwrap().then((data) => {\n if (typeof data === 'number')\n setKBResults(parseInt(data.toString()));\n })\n }\n }, [ticket]);\n\n const itemClicked = (event: any) => {\n navigate(`/deeplink/?url=${encodeURIComponent('/KBase/Default.aspx?Action=FromTicket&Call_ID=' + ticket.ID)}`);\n }\n\n const buttonLabel = `${ticketKbs?.length || 0} / ${kbResults?.toString() || 0}`;\n\n //Check if the feature is enabled\n if (!userProfile?.Features.KnowledgeBase || !userProfile?.Features.View_KB) return null;\n\n return (\n canAdd\n ? <SplitButton disabled={ticket.Is_Loading} onItemClick={itemClicked} items={[{ text: 'Add to Knowledge Base' }]} onButtonClick={() => navigate('Kbase')} title={'Knowledge base: linked / results '} imageUrl='./images/Toolbar/kb.png' text={buttonLabel} />\n : <Button disabled={ticket.Is_Loading} onClick={() => navigate('Kbase')} title={'Knowledge base: linked / results '} imageUrl='./images/Toolbar/kb.png'>{buttonLabel}</Button>\n\n );\n};\n\nexport default KBButton;","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Button, SplitButton, SplitButtonItemClickEvent } from '@progress/kendo-react-buttons';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Badge, BadgeContainer } from '@progress/kendo-react-indicators';\n\nconst RelatedButton: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n return (\n <Button disabled={ticket.Is_Loading} className='related-button' onClick={() => navigate('related')} title={`Open Tickets: ${ticket.Contact_Name} / ${ticket.Company_Name}`} svgIcon={svg.clockArrowRotateIcon} size='large' >{`${ticket.Open_User_Tickets > 99 ? '99+' : ticket.Open_User_Tickets} / ${ticket.Open_Client_Tickets > 99 ? '99+' : ticket.Open_Client_Tickets}`}</Button>\n );\n};\n\nexport default RelatedButton;","import React from 'react';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { Link, useParams } from 'react-router-dom';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { useGetTenantQuery } from '../../../../../../redux/api/BaseApi';\nimport { ITicket, ITicketProps } from '../../../../../../types/Ticket/ITicket';\n\n\nconst PrintButton: React.FC<ITicketProps> = (ticket) => {\n const { ticketId } = useParams();\n const { data: tenant } = useGetTenantQuery()\n //{`${tenant.Tenant_Url}/calls/CallHistoryPrint.aspx?Call_Id=${ticketId}`}\n return (\n <Link to='print' title='Print'><Button disabled={ticket.Is_Loading} title='Print Ticket' svgIcon={svg.printIcon} className='off' size='large'>\n </Button></Link>\n );\n};\n\nexport default PrintButton;","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Button, SplitButton } from '@progress/kendo-react-buttons';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { KBSearchProps } from '../../../../../../types/KB/KBSearchProps';\nimport { KBApi } from '../../../../../../redux/api/KBApi';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { AssetApi } from '../../../../../../redux/api/AssetApi';\n\nconst AssetButton: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [searchKB] = KBApi.useSearchKBMutation();\n const canAdd = userProfile?.Features.Add_Asset;\n const { data: ticketAssets } = TicketApi.useGetLinkedAssetsQuery(ticket?.ID, { skip: !ticket?.ID });\n const { data: allAssets } = AssetApi.useGetAssetsQuery({ companyId: ticket.Company_Id, locationId: ticket.Company_Address_Id, contactId: 0 }, { skip: !ticket.Company_Id })\n\n\n const itemClicked = (event: any) => {\n //Add asset popup for URl ./Asset.aspx?Origin=AssetPopup&Contact_Id=6129\n navigate(`add-asset`);\n }\n\n const buttonLabel = `${ticketAssets?.length || 0} / ${allAssets?.length || 0}`;\n\n //Check if the feature is enabled\n if (!userProfile?.Features.KnowledgeBase || !userProfile?.Features.View_KB) return null;\n\n return (\n canAdd\n ? <SplitButton disabled={ticket.Is_Loading} onItemClick={itemClicked} items={[{ icon: 'hyperlink-open', text: 'Add Asset' }]} onButtonClick={() => navigate('assets')} title={'Assets: linked / results '} svgIcon={svg.toggleFullScreenModeIcon} text={buttonLabel} />\n : <Button disabled={ticket.Is_Loading} onClick={() => navigate('assets')} title={'Assets: linked / results '} svgIcon={svg.toggleFullScreenModeIcon}>{buttonLabel}</Button>\n\n );\n};\n\nexport default AssetButton;","import React, { useRef } from 'react';\nimport { Button, SplitButton } from '@progress/kendo-react-buttons';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { TreeView, TreeViewExpandChangeEvent, TreeViewItemClickEvent } from '@progress/kendo-react-treeview';\nimport { Popup, PopupHandle } from '@progress/kendo-react-popup';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { expandedState, processTreeData } from '../../../../../../utils/TreeDataOperations';\nimport { WorkflowApi } from '../../../../../../redux/api/WorkflowApi';\nimport _ from 'lodash';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\n\nconst WorkflowButton: React.FC<ITicketProps> = (ticket) => {\n const selectField = \"selected\";\n const expandField = \"expanded\";\n const dataItemKey = \"Id\";\n const subItemsField = \"Templates\";\n const fields = { selectField, expandField, dataItemKey, subItemsField };\n const [show, setShow] = React.useState(false);\n const parent = useRef(null);\n const popupRef = useRef<PopupHandle>(null);\n\n const { data: template } = TicketApi.useGetTemplateQuery(ticket.Template_Id, { skip: !ticket.Template_Id });\n const { data: templates, isLoading } = TicketApi.useGetMyTemplatesQuery();\n const { data: userProfile } = TicketApi.useGetUserProfileQuery();\n const [applyWorkflow, { isLoading: applyingTemplate }] = WorkflowApi.useApplyWorkflowMutation();\n\n const selectedTemplate = { Id: ticket.Template_Id, Name: ticket.Template_Id ? template?.Call_Template_Name : null } //templates?.map(t => t.Templates.filter(t2=>t2.Id === props.templateId)\n const [value, setValue] = React.useState(null);\n const [expanded, setExpanded] = React.useState([templates?.length && templates?.[0][dataItemKey]]);\n\n React.useEffect(() => {\n (selectedTemplate && !value) && setValue(selectedTemplate);\n }, [template, selectedTemplate]);\n\n\n //A listener to close the popu if the user clicks outside of it\n React.useEffect(() => {\n const listener = (e) => {\n // console.log('listener', e.target)\n if (!popupRef?.current.element?.contains(e.target)) {\n setShow(false);\n }\n }\n document.addEventListener('mousedown', listener);\n return () => {\n document.removeEventListener('mousedown', listener);\n }\n }, [popupRef]);\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 const onChange = (event: TreeViewItemClickEvent) => {\n console.log('event', event.item, expanded, expanded.includes(event?.item.value?.Id))\n if (event?.item && event?.item.Id < 0) {\n if (!expanded.includes(event?.item.Id))\n setExpanded([event?.item.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?.item.Id), 1)\n return newVal;\n }); //collaps\n setShow(true); //stay open\n\n return\n }\n\n if ((event.item.Id && !ticket.Template_Id) || (ticket.Template_Id && window.confirm(`Changing the Template / Workflow will REPLACE the ${userProfile.Phrases.CallPhrase} ${userProfile.Phrases.Description} and remove any incomplete workflow actions. Are you sure you want to continue?`))) {\n setValue(event.item);\n //props.onChange(event)\n applyWorkflow({ id: event.item.Id, ticketId: ticket.ID }).unwrap().then(() => {\n setShow(undefined);\n });\n } else {\n setShow(undefined); //Close\n }\n }\n const onExpandChange = React.useCallback(\n (event: TreeViewExpandChangeEvent) =>\n setExpanded(expandedState(event.item, dataItemKey, expanded)),\n [expanded]\n );\n\n if (treeData?.length === 0) return null;\n\n return (\n <div ref={parent}>\n {/* selectedTemplate:{selectedTemplate?.Name} - value:{value?.Name} */}\n <Button title={selectedTemplate?.Name || 'Apply template / workflow'} disabled={ticket.Is_Loading} className={`${selectedTemplate?.Id && 'on'}`} size='large' imageUrl='./images/Toolbar/workflow.png' onClick={() => setShow((s) => !s)} ></Button>\n <Popup ref={popupRef} anchor={parent?.current} popupClass='quick-notes-popup' show={show}>\n {applyingTemplate && <PartialSpinny />}\n <h6 className='ms-2'>Templates / Workflows</h6>\n <TreeView className='' expandIcons={true} data={treeData} textField='Name' childrenField={subItemsField} onExpandChange={onExpandChange} onItemClick={onChange}\n key={dataItemKey}\n selectField={selectField}\n expandField={expandField}\n\n />\n </Popup></div>\n );\n};\n\nexport default WorkflowButton;","import React, { useEffect } from 'react';\nimport { Link } from 'react-router-dom';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport * as FilterSlice from '../../../../../../slices/FilterSlice';\nimport { useReduxDispatch, useReduxSelector } from '../../../../../../redux/hooks';\nimport { Setting } from '../../../../../../types/Setting/Setting';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\n\n\nconst ActionFilterButton: React.FC<ITicketProps> = ({ Is_Loading }) => {\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const { data: myFilterSettings } = UserApi.useGetSettingQuery(Setting.Ticket_Action_Filter, { skip: !userProfile?.Features.Call_Action_Filter });\n const updateState = useReduxDispatch();\n const filterState = useReduxSelector(state => state.filter);\n\n //Load the user's personal settings into state\n useEffect(() => {\n if (myFilterSettings) {\n\n var filterValues = myFilterSettings?.String_Value?.split(';');\n if (!filterValues) return;\n\n //Authors\n filterValues.length > 0 && filterValues[0].length > 0 && updateState(FilterSlice.setAuthors(filterValues[0].split(',').map(a => parseInt(a))));\n //Authors And Or\n filterValues.length > 1 && updateState(FilterSlice.setAuthorAndOr(filterValues[1]?.toLocaleLowerCase() === 'or' ? 'or' : 'and'));\n //Action Types\n filterValues.length > 2 && filterValues[2].length > 0 && updateState(FilterSlice.setActionTypes(filterValues[2].split(',').map(a => parseInt(a))));\n //Action Types And Or\n filterValues.length > 3 && updateState(FilterSlice.setActionTypeAndOr(filterValues[3]?.toLocaleLowerCase() === 'or' ? 'or' : 'and'));\n //Include / Exclude search term\n filterValues.length > 4 && updateState(FilterSlice.setSearchTermOption(filterValues[4] === '1' ? 'Include' : 'Exclude'));\n //Search Term\n filterValues.length > 5 && updateState(FilterSlice.setSearchTerm(filterValues[5]));\n //System actions\n filterValues.length > 6 && updateState(FilterSlice.setShowSystemActions(filterValues[6].toLocaleLowerCase() === 'true'));\n //Date range\n filterValues.length > 7 && filterValues[7].length > 0 && filterValues[7] != 'None' && updateState(FilterSlice.setDateRange(filterValues[7] as dateRangeOptions));\n //From date\n filterValues.length > 8 && filterValues[8].length > 0 && updateState(FilterSlice.setStartDate(new Date(filterValues[8])));\n //To date\n filterValues.length > 9 && filterValues[9].length > 0 && updateState(FilterSlice.setEndDate(new Date(filterValues[9])));\n //HAs reactions\n filterValues.length > 10 && updateState(FilterSlice.setHasReaction(filterValues[10].toLocaleLowerCase() === 'true'));\n }\n }, [myFilterSettings]);\n\n //Checks if the user has a filter applied by looping through the object keys / properties and comparing them to the default state\n const hasFilterApplied = Object.keys(filterState).some(key => {\n var areDifferent = filterState[key] !== FilterSlice.initialState[key]\n //if (areDifferent)\n // console.log('key', key, filterState[key], FilterSlice.initialState[key], filterState[key] === FilterSlice.initialState[key]);\n\n\n return areDifferent;\n });\n\n if (!userProfile?.Features.Call_Action_Filter) return null;\n\n return (\n <Link to={Is_Loading ? '' : 'filter'}>\n <Button disabled={Is_Loading} className={hasFilterApplied && 'on'} imageUrl={hasFilterApplied ? './images/cancel-filters.png' : './images/toolbar/filter.png'} size='medium'></Button>\n </Link>\n );\n};\n\nexport default ActionFilterButton;","import React from 'react';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { isMobile } from 'react-device-detect';\nimport { useNavigate } from 'react-router-dom';\nimport { useReduxDispatch, useReduxSelector } from '../../../../../../redux/hooks';\nimport { setActionExpanded } from '../../../../../../slices/TicketDetailUISlice';\nimport { Button } from '@progress/kendo-react-buttons';\n\ninterface SendEmailButtonProps {\n onClick: () => void;\n}\n\nconst SendEmailButton: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const dispatch = useReduxDispatch();\n const actionExpanded = useReduxSelector(state => state.ticketDetailsUI.actionExpanded);\n\n const onNewActionClick = () => {\n if (isMobile)\n navigate('email');\n else\n dispatch(setActionExpanded(actionExpanded !== 2 ? 2 : 0));\n }\n\n return (\n <Button disabled={ticket.Is_Loading} onClick={onNewActionClick} className={`${actionExpanded === 2 && 'on'}`} size='large' imageUrl='./images/toolbar/email.png' title='Send email' ></Button>\n );\n};\n\nexport default SendEmailButton;","import { Button } from '@progress/kendo-react-buttons';\nimport HierarchyButton from './Hierarchy/HierarchyButton';\nimport KBButton from './KB/KBButton';\nimport RelatedButton from './Related/RelatedButton';\nimport PrintButton from './Print/PrintButton';\nimport * as svg from '@progress/kendo-svg-icons';\nimport AssetButton from './Assets/AssetButton';\nimport WorkflowButton from './Workflow/WorkflowButton';\nimport { IUserProfile } from '../../../../../types/User/IUserProfile';\nimport { ITicketProps } from '../../../../../types/Ticket/ITicket';\nimport { Link } from 'react-router-dom';\nimport ActionFilterButton from './Filter/ActionFilterButton';\nimport { isMobile } from 'react-device-detect';\nimport SendEmailButton from './Email/SendEmailButton';\n\nconst Tools = (userProfile: IUserProfile) => [{\n id: 12,\n header: \"Send Email\",\n route: 'email',\n body: (ticket: ITicketProps) => <SendEmailButton {...ticket} />,\n resizable: false,\n className: 'tile',\n visible: true,\n img: './images/toolbar/email.png',\n order: 0,\n docked: true\n}, {\n id: 7,\n header: \"Hierarchy\",\n route: 'parent-child',\n body: (ticket: ITicketProps) => <HierarchyButton {...ticket} />,\n resizable: false,\n className: 'tile',\n visible: userProfile?.Features.Call_Hierarchy,\n img: './images/Toolbar/parent-child.png',\n order: 1,\n docked: true\n}, {\n id: 1,\n icon: 'toggle-full-screen-mode',\n header: \"Asset\",\n route: 'assets',\n body: (ticket: ITicketProps) => <AssetButton {...ticket} />,\n resizable: false,\n className: 'tile',\n visible: !isMobile,\n order: 2,\n docked: true\n}, {\n id: 8,\n header: \"Filter\",\n route: 'filter',\n body: (ticket: ITicketProps) => <ActionFilterButton {...ticket} />,\n resizable: false,\n className: 'tile',\n visible: true,\n img: './images/toolbar/filter.png',\n order: 4,\n docked: true\n}, {\n id: 10,\n header: \"Calendar\",\n body: (ticket: ITicketProps) => <></>,\n resizable: false,\n className: 'tile',\n visible: false,\n order: 5,\n docked: false,\n icon: 'calendar'\n}, {\n id: 11,\n header: \"Apply Template\",\n body: (ticket: ITicketProps) => <WorkflowButton {...ticket} />,\n resizable: false,\n className: 'tile',\n visible: true,\n img: './images/Toolbar/workflow.png',\n order: 6,\n docked: false\n}, {\n id: 2,\n header: \"Knowledge Base\",\n route: 'kbase',\n body: (ticket: ITicketProps) => <KBButton {...ticket} />,\n resizable: false,\n className: 'tile',\n visible: userProfile?.Features.KnowledgeBase,\n img: './images/Toolbar/kb.png',\n order: 7,\n docked: false\n}, {\n id: 4,\n header: \"Merge\",\n body: (ticket: ITicketProps) => <></>,\n resizable: false,\n className: 'tile',\n visible: false,\n icon: 'print',\n order: 8,\n docked: false\n}, {\n id: 5,\n header: \"Split\",\n body: (ticket: ITicketProps) => <></>,\n resizable: false,\n className: 'tile',\n visible: false,\n icon: 'print',\n order: 9,\n docked: false\n}, {\n id: 6,\n header: \"Print\",\n route: 'print',\n body: (ticket: ITicketProps) => <PrintButton {...ticket} />,\n resizable: false,\n className: 'tile',\n visible: true,\n icon: 'print',\n order: 10,\n docked: false\n}, {\n id: 13,\n header: \"Share\",\n route: 'share',\n body: (ticket: ITicketProps) => <Link to={`share`} title='Share'><Button disabled={ticket.Is_Loading} size='large' svgIcon={svg.shareIcon} className='off' ></Button></Link>,\n resizable: false,\n className: 'tile',\n visible: !isMobile,\n icon: 'share',\n docked: false\n}\n , {\n id: 14,\n header: \"Related \" + userProfile?.Phrases.CallPhrase + \"s\",\n route: 'related',\n body: (ticket: ITicketProps) => <RelatedButton {...ticket} />,\n resizable: false,\n className: 'tile',\n visible: !isMobile,\n icon: 'clock-arrow-rotate',\n docked: false\n}\n] as ITools[];\n\nexport default Tools;\n\nexport type ITools = {\n id: number,\n header: string,\n body: (ticket: ITicketProps) => JSX.Element,\n resizable?: boolean,\n className: string,\n visible: boolean,\n img?: string,\n icon?: string,\n order: number,\n route?: string,\n docked: boolean\n}","import React, { useEffect } from 'react';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { Button, DropDownButton, DropDownButtonItemClickEvent } from '@progress/kendo-react-buttons';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { useReduxDispatch } from '../../../../redux/hooks';\nimport { isMobile } from 'react-device-detect';\nimport { ISetting } from '../../../../types/User/ISetting';\nimport { Setting } from '../../../../types/Setting/Setting';\nimport AddActionButton from './AddActionButton';\nimport Tools, { ITools } from './Tools/Tools';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Align } from '@progress/kendo-react-popup';\nimport { Sortable, SortableItemUIProps, SortableOnDragOverEvent } from '@progress/kendo-react-sortable';\nimport { Checkbox } from '@progress/kendo-react-inputs';\nimport { PartialSpinny } from '../../../Nav/Spinny';\n\n\nconst ActionToolbar: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const dispatch = useReduxDispatch();\n const [rightExpanded, setRightExpanded] = React.useState(false);\n const { data: userState } = UserApi.useGetSettingQuery(Setting.TOOLBAR_STATE);\n //const [defaultPosition, setDefaultPosition] = React.useState<TilePosition[]>();\n //const [positions, setPositions] = React.useState<TilePosition[]>();\n const [editMode, setEditMode] = React.useState(false);\n const [showMenu, setShowMenu] = React.useState(false);\n const [userOptions, setUserOptions] = React.useState<ToolbarItem[]>();\n const [updateContactSetting, { isLoading: isSaving }] = UserApi.useSaveSettingMutation();\n const [toolState, setToolState] = React.useState<Array<ITools>>();\n\n useEffect(() => {\n if (userState?.Big_String_Value) {\n try {\n var options = JSON.parse(userState.Big_String_Value) as ToolbarItem[];\n setUserOptions(options)\n } catch (e) {\n throw e;\n console.error('Error parsing toolbar state', e);\n }\n }\n\n }, [userState]);\n\n\n const onSave = (state) => {\n //Update the order and visibility of the user's options\n let newTools = [] as ToolbarItem[];\n let saveOptions = userOptions.map((o, i) => {\n let tool = toolState.find(t => t.id === parseInt(o.value));\n\n if (tool) {\n o.order = toolState.indexOf(tool);\n o.visibility = tool.docked ? \"1\" : \"0\";\n }\n console.warn('saveOptions', o, tool?.order, tool?.docked, toolState.indexOf(tool));\n\n return o;\n });\n\n //Add any new tools that are not in the user's options\n toolState.filter(t => t.visible && !userOptions.find(u => u.value === t.id.toString())).map(t => {\n console.warn('Adding new tool', t)\n saveOptions.push({ Title: t.header, value: t.id.toString(), order: toolState.indexOf(t), visibility: t.docked ? \"1\" : \"0\" } as ToolbarItem);\n });\n\n const saveData = {\n Setting_Id: Setting.TOOLBAR_STATE,\n Big_String_Value: saveOptions ? JSON.stringify(saveOptions) : null\n } as ISetting\n\n updateContactSetting(saveData).then(() => {\n\n setEditMode(false);\n });\n }\n\n const onCancel = () => {\n //setData(defaultTileArray);\n setEditMode(false);\n }\n\n const resetLayout = () => {\n if (!window.confirm('Are you sure you want to reset the sidebar layout?')) return;\n\n //console.log('resetting layout', defaultState, data);\n //setPositions(() => defaultPosition);\n //console.log('resetting layout 1', defaultState, data);\n //saveChanges\n //onSave(defaultPosition);\n }\n\n let tools = Tools(userProfile);\n\n //Load the tools and the user's order of the tools into state\n useEffect(() => {\n if (tools?.length && !toolState && userState) {\n if (userState?.Big_String_Value) {\n try {\n var _userOptions = JSON.parse(userState.Big_String_Value.replaceAll('\\r\\n', '')) as ToolbarItem[];\n console.warn('userOptions', _userOptions);\n //reorder the tools based on the user's order\n _userOptions.map(o => {\n var t = tools.find(t => t.id === parseInt(o.value));\n if (t) {\n t.order = o.order;\n t.docked = parseInt(o.visibility) === 1 && !isMobile;\n }\n })\n setUserOptions(_userOptions);\n console.warn('userOptions', tools, userOptions, userState.Big_String_Value)\n } catch (e) {\n //throw e;\n console.error('Error parsing toolbar state', e);\n }\n }\n\n //Sort and put in state\n tools.sort((a, b) => a.order - b.order);\n setToolState(tools);\n }\n }, [tools, userState]);\n\n //Not for self service\n //if (!tiles?.length) return null;\n\n const menuItemClicked = (e: DropDownButtonItemClickEvent) => {\n console.log('menuItemClicked', e)\n if (e.item.id === -1) {\n setEditMode(true);\n return;\n }\n navigate(e.item.route);\n }\n const getBaseItemStyle = (isActive: boolean) => ({\n height: 70,\n lineHeight: '68px',\n fontSize: '16px',\n textAlign: 'center',\n outline: 'none',\n border: '1px dashed',\n cursor: 'move',\n display: 'inline-block',\n paddingLeft: 6,\n paddingRight: 6,\n marginRight: 6,\n borderColor: '#000',\n width: 'aUTO',\n });\n\n const SortableItemUI = (props: SortableItemUIProps) => {\n const { isDisabled, isActive, style, attributes, dataItem, forwardRef } = props;\n const classNames = ['col-xs-6 col-sm-3'];\n\n if (isDisabled) {\n classNames.push('k-disabled');\n }\n\n return (\n <div\n ref={forwardRef}\n {...attributes}\n style={{\n ...getBaseItemStyle(isActive),\n ...style\n }}\n className={classNames.join(' ')}\n >\n <div className='sortable-item' title={dataItem.Title}>\n <Checkbox\n checked={dataItem.docked}\n onChange={(e) => {\n dataItem.docked = e.value;\n setToolState([...toolState]);\n }} />\n {(dataItem as ITools).body({ ...ticket, Is_Loading: true })}</div>\n </div>\n );\n };\n\n const onDragOver = (event: SortableOnDragOverEvent) => {\n setToolState(event.newState as Array<ITools>);\n };\n\n // const menuItems2 = toolState && [...toolState?.filter(t => !t.docked && t.visible), { id: -1, header: 'Configure toolbar items', icon: 'gears' } as ITools].map(t => <div className='d-flex' key={t.id}>\n // {t.icon ? <Icon name={t.icon} size='large' className=' mr-2' /> : <img src={t.img} alt={t.header} className='toolbar-menu-item mr-2' />}{t.header}</div>);\n\n const menuItems = toolState && [...toolState?.filter(t => !t.docked && t.visible), { id: -1, header: 'Configure toolbar items...', icon: 'gears' } as ITools].map(t => {\n return { ...t, text: t.header, imageUrl: t.img }\n });\n\n if (!toolState) return null;\n return (\n <>\n <div className=\"action-toolbar\">\n {isSaving && <PartialSpinny />}\n <AddActionButton />\n {!userProfile?.Features.External_Interface &&\n (editMode ? <>\n <Sortable idField={'id'} data={toolState.filter(t => t.visible)} itemUI={SortableItemUI} onDragOver={onDragOver}>\n\n </Sortable>\n <Button svgIcon={svg.saveIcon} className='m-2' fillMode='solid' title='Save' onClick={onSave}></Button>\n <Button svgIcon={svg.cancelIcon} className='m-2' fillMode='solid' title='Cancel' onClick={onCancel}></Button>\n </>\n : toolState.filter(t => t.docked && t.visible).map((t, i) => <div key={i}>{t.body(ticket)}</div>))\n }\n\n {/* <DropDownButton fillMode='flat' svgIcon={svg.moreVerticalIcon} items={tools.map(t => t.body)}></DropDownButton> */}\n {/* <ContextMenu onClose={() => setShowMenu(false)} show={showMenu} items={tools.map(t => t as MenuItemModel)} offset={{ left: 0, top: 0 }} /> */}\n\n {/* <NavBarTest /> */}\n {/* <ToggleView {...ticket} /> */}\n {!userProfile?.Features.External_Interface && !editMode &&\n <DropDownButton size='large' title='More options...' fillMode='flat' onItemClick={menuItemClicked} items={menuItems} svgIcon={svg.moreHorizontalIcon} popupSettings={{ animate: false, anchorAlign: { horizontal: 'left', vertical: 'bottom' }, popupAlign: { horizontal: 'left' } as Align }}>\n </DropDownButton>}\n <div className='action-toggle-view'></div>\n </div >\n\n </>\n );\n};\n\n\ntype ToolbarItem = {\n Name: string\n Title: string\n value: string\n image: string\n onClick: string\n visibility: string\n feature_Enum: number\n postBack: boolean\n order: number\n showContext: boolean\n asset_Count: number\n}\n\n\nexport default ActionToolbar;","import { DropDownTree, DropDownTreeChangeEvent, DropDownTreeExpandEvent } from \"@progress/kendo-react-dropdowns\";\nimport React from \"react\";\nimport { TicketApi } from \"../../../redux/api/TicketApi\";\nimport { expandedState, processTreeData } from \"../../../utils/TreeDataOperations\";\nimport { ITemplateListItem } from '../../../types/Ticket/ITemplate';\nimport { Api } from '../../../redux/api/BaseApi';\nimport { FilterDescriptor } from '@progress/kendo-data-query';\n\nexport const EmailTemplateList: React.FunctionComponent<TemplateListProps> = props => {\n const selectField = \"selected\";\n const expandField = \"expanded\";\n const dataItemKey = \"Id\";\n const subItemsField = \"Templates\";\n const textField = \"Name\";\n\n //const { data: template } = TicketApi.useGetTicketEmailTemplatesQuery(props.templateId, { skip: !props.templateId });\n const { data: templates, isLoading } = TicketApi.useGetTicketEmailTemplatesQuery();\n const { data: userProfile } = Api.useGetUserProfileQuery();\n\n //const selectedTemplate = { Id: props.templateId, Name: props.templateId ? null : null } //templates?.map(t => t.Templates.filter(t2=>t2.Id === props.templateId)\n const selectedTemplate = templates?.map(t => t.Templates.find(qn => qn.Id === props.templateId)).find(qn => qn?.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] : undefined]);\n const [filter, setFilter] = React.useState<FilterDescriptor>();\n\n const onChange = (event: DropDownTreeChangeEvent) => {\n //console.log('event', event?.value)\n if (event?.value && event?.value[subItemsField]) {\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 //event.nativeEvent.preventDefault();\n return\n }\n\n if (!event.value || !props.hasDescription || window.confirm(`Changing the template will REPLACE the ${userProfile.Phrases.Action}. 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, textField };\n //console.log('processTreeData', selectedTemplate, value)\n let tree = processTreeData(templates || [], { expanded, value, filter }, fields)\n //console.log('processTreeData2', tree, expanded)\n return tree\n }, [expanded, value, templates, filter]\n );\n\n return (\n <div className={\"k-form-field-wrap\"}>\n {/* selectedTemplate:{JSON.stringify(selectedTemplate?.Id)} - props:{props.templateId} */}\n <DropDownTree size='large' data={treeData} loading={isLoading} placeholder=\"Select...\" filterable={true} filter={filter?.value} onFilterChange={(e) => setFilter(e.filter)}\n onBlur={() => setOpen(undefined)}\n opened={open}\n value={selectedTemplate}\n dataItemKey={dataItemKey}\n textField={textField}\n subItemsField={subItemsField}\n onChange={onChange}\n selectField={selectField}\n expandField={expandField}\n onExpandChange={onExpandChange}\n popupSettings={{ height: 400 }}\n />\n </div>\n )\n}\n\ntype TemplateListProps = {\n templateId?: number;\n hasDescription?: boolean;\n onChange?: (e: { value: ITemplateListItem; }) => void;\n}","import React, { ReactElement, useMemo, useState } from 'react';\nimport { MultiSelect, MultiSelectChangeEvent, MultiSelectFilterChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { Button, ButtonGroup } from '@progress/kendo-react-buttons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { filterBy, FilterDescriptor } from '@progress/kendo-data-query';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { FieldRenderProps, Form, FormElement } from '@progress/kendo-react-form';\nimport { Avatar } from '@progress/kendo-react-layout';\nimport { toast } from 'react-toastify';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport { useReduxDispatch, useReduxSelector } from '../../../../../../redux/hooks';\nimport Time from '../../../../../Common/Time';\nimport { TextBox } from '@progress/kendo-react-inputs';\nimport * as EmailActionSlice from '../../../../../../slices/EmailActionSlice';\nimport { Editor, EditorIFrameInitEvent } from '@progress/kendo-react-editor';\nimport { CommonTools, MobileTools } from '../../../../../Common/CommonTools';\nimport { EmailTemplateList } from '../../../../ListControls/EmailTemplateList';\nimport { IStaff } from '../../../../../../types/IStaff';\nimport { Badge, BadgeContainer } from '@progress/kendo-react-indicators';\nimport { isMobile } from 'react-device-detect';\nimport FileUpload from '../../../../../Attachment/FileUpload';\nimport { FileApi } from '../../../../../../redux/api/FileApi';\nimport { FileType } from '../../../../../../types/File/FileType';\n\ninterface EmailFormProps {\n onsubmitted?: () => void\n onclosed?: () => void\n showSaveButton?: boolean\n formName?: string\n}\n\nconst EmailForm: React.FC<EmailFormProps> = (props) => {\n const { ticketId } = useParams();\n const formState = useReduxSelector(state => state.emailAction);\n const { settings } = useReduxSelector(state => state.actionDetails);\n const dispatch = useReduxDispatch();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [filter, setFilter] = useState<FilterDescriptor>({ operator: 'contains' })\n const [filterCC, setFilterCC] = useState<FilterDescriptor>({ operator: 'contains' })\n const [filterBCC, setFilterBCC] = useState<FilterDescriptor>({ operator: 'contains' })\n //const [form, setFilter] = useState\n const { data: isFileActiveInternal } = FileApi.useIsActiveQuery(FileType.Call_Action_Internal)\n let { data: ToList, isFetching: toLoading } = UserApi.useSearchContactsQuery(filter?.value, { skip: !filter?.value || filter?.value?.length < 3 });\n let { data: CCList, isFetching: ccLoading } = UserApi.useSearchContactsQuery(filter?.value, { skip: !filter?.value || filter?.value?.length < 3 });\n let { data: BCCList, isFetching: bccLoading } = UserApi.useSearchContactsQuery(filter?.value, { skip: !filter?.value || filter?.value?.length < 3 });\n const { data: template, isFetching: loadingTemplate, error: fetchTemplateError } = TicketApi.useGetQuickNoteAsActionQuery({ id: formState?.email?.Template_Id, ticketId: parseInt(ticketId) }, { skip: !formState?.email?.Template_Id })\n const [sendEmailAction, { isLoading: sendingEmail, error: sendEmailError }] = TicketApi.useSendEmailMutation();\n const filteredTo = useMemo(() => ToList?.length && filter?.value ? filterBy(ToList?.slice(), filter) : ToList, [filter, ToList]);\n const filteredCC = useMemo(() => CCList?.length && filterCC?.value ? filterBy(CCList?.slice(), filterCC) : CCList, [filterCC, CCList]);\n const filteredBCC = useMemo(() => BCCList?.length && filterBCC?.value ? filterBy(BCCList?.slice(), filterBCC) : BCCList, [BCCList, BCCList]);\n\n const { data: ticket } = TicketApi.useGetTicketQuery({ ticketId: parseInt(ticketId) })\n const { data: status } = TicketApi.useGetStatusQuery(ticket?.Call_Status_Id, { skip: !ticket?.Call_Status_Id || userProfile?.Features?.External_Interface })\n const { data: defaultFormState, isLoading } = TicketApi.useGetEmailConfigQuery(parseInt(ticketId), { skip: userProfile?.Features?.External_Interface });\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\n const onFilter = (event: MultiSelectFilterChangeEvent) => {\n //console.log('Filter', event);\n //setStaff(filterBy(staffList?.slice(), event.filter));\n setFilter(event.filter);\n }\n\n //Load the default form state\n React.useEffect(() => {\n if (defaultFormState && formState.ticketId != parseInt(ticketId)) {\n dispatch(EmailActionSlice.setTicketId(parseInt(ticketId)));\n dispatch(EmailActionSlice.resetForm(defaultFormState));\n }\n }, [defaultFormState]);\n\n //Update the note when the quick note (template) changes\n React.useEffect(() => {\n if (template) {\n dispatch(EmailActionSlice.setNotes(template?.Action_Notes));\n dispatch(EmailActionSlice.setBillable(template?.Billable_Time));\n dispatch(EmailActionSlice.setNonBillable(template?.Non_Billable_Time));\n }\n }, [template]);\n\n const handleSend = async (values, event) => {\n event.preventDefault();\n try {\n //create a new share item \n console.log('SENDING', formState);\n\n //Prevent null notes\n const sendData = { ...formState.email, HTML_Note: formState.email.HTML_Note || '' };\n\n sendEmailAction({ ticketId: parseInt(ticketId), info: sendData }).unwrap()\n .then(() => {\n\n //nom nom toast\n toast.success('Email sent successfully');\n\n //reset the form\n dispatch(EmailActionSlice.resetForm(defaultFormState));\n\n console.log('sendEmailAction submitted', props.onsubmitted);\n\n //go back\n //navigate(-1);\n props.onsubmitted && props.onsubmitted();\n\n }).catch((error) =>\n toast.error('Error sending email: ' + JSON.stringify(error))\n )\n } catch (error) {\n console.error('Error sending email:', error);\n toast.error('Error sending email: ' + JSON.stringify(error));\n }\n\n return false;\n };\n\n ///Render the 'chip' tag\n const renderTag = (tagData, tag: ReactElement) => {\n var data = tagData.data[0] as IStaff;\n var imgUrl = data?.Profile_Image_Path;\n var showIMage = tagData?.data[0].img_class != 'n';\n var customElement = <div key={data.ID} className='k-hbox' title={data.Full_Name + ' - ' + data.Company_Name}>\n {showIMage && <Avatar size='small' rounded='full' className='user-profile-image ' >\n {imgUrl?.indexOf('/images') == 0 ? <img src={`.${imgUrl}`} alt=\"Profile\" width=\"25\" height=\"25\" /> : (imgUrl ? <img src={imgUrl} alt=\"Profile\" width=\"25\" height=\"25\" /> : <img src={'./images/placeholder.png'} alt=\"Profile\" width=\"25\" height=\"25\" />)}\n </Avatar>}\n <div className='name'>{data.Full_Name} <{data.Email}></div>\n </div>\n\n return React.cloneElement(tag, tag.props, [\n (customElement) as any,\n tag.props.children\n ]);\n }\n const renderItem = (li, itemProps) => {\n var data = itemProps.dataItem as IStaff;\n var showIMage = true//data.img_class != 'n';\n var item = (\n\n <div className=\"k-hbox\" key={data.ID}>\n {showIMage && <Avatar size='medium' rounded='full' className='user-profile-image' >\n {data.Profile_Image_Path?.indexOf('/images') == 0 ? <img src={`.${data.Profile_Image_Path}`} alt=\"Profile\" width=\"30\" height=\"30\" /> : (data.Profile_Image_Path ? <img src={data.Profile_Image_Path} alt=\"Profile\" width=\"30\" height=\"30\" /> : <img src={'./images/placeholder.png'} alt=\"Profile\" width=\"30\" height=\"30\" />)}\n </Avatar>}\n <div className='ms-1 flex-nope'>\n <div className='flex'>{data.Full_Name} - {data.Company_Name}</div>\n <small className='user-sub-title' title={data.Email}> <{data.Email}></small>\n </div>\n </div>)\n\n return React.cloneElement(li, li.props, item);\n };\n\n const handleToChange = (event: MultiSelectChangeEvent) => {\n //console.log('handleToChange', event);\n\n const values = event.target.value;\n //console.log('values', values);\n\n dispatch(EmailActionSlice.setTo(validateEmails(values)));\n };\n const handleCChange = (event: MultiSelectChangeEvent) => {\n dispatch(EmailActionSlice.setCC(validateEmails(event.value)));\n };\n const handleBCChange = (event: MultiSelectChangeEvent) => {\n dispatch(EmailActionSlice.setBCC(validateEmails(event.value)));\n };\n\n const validateEmails = (values: IStaff[]) => {\n //Check for custom value which means ID is null and Full_Name is the email address OR the email address and name.\n //use Regex to extract the email address from between the < > or just use the Full_Name\n //const values = event.target.value;\n const lastItem = { ...values[values.length - 1] };\n if (values.length > 0 && lastItem && lastItem.ID == null && !lastItem.Email) {\n values.pop();\n var Regex = /<([^>]+)>/;\n var foundEmail = Regex.exec(lastItem?.Full_Name);\n\n //var name = lastItem?.Full_Name;\n if (foundEmail) {\n lastItem.Email = foundEmail[foundEmail.length - 1];\n //THe name should be the start of the string to the first < character\n lastItem.Full_Name = lastItem?.Full_Name.substring(0, lastItem?.Full_Name.indexOf('<')).trim();\n } else {\n lastItem.Email = lastItem.Full_Name;\n lastItem.Full_Name = '';\n }\n\n //use a regex to make sure the email is valid\n var emailRegex = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/;\n var isValid = emailRegex.test(lastItem.Email);\n console.log('isValid', isValid, lastItem);\n if (!isValid) return;\n\n values.push(lastItem);\n }\n\n return values;\n }\n\n const onMount = (event) => {\n //Set focus on the element in the iframe with 'k-content' as the class\n const iframeDocument = event.dom.ownerDocument;\n const element = iframeDocument.querySelector('.k-content');\n //wait 100ms\n // setTimeout(() => {\n // if (element) element.focus();\n // console.log('onMount', element);\n // }, 1000);\n\n\n };\n\n const formValidator = (values) => {\n let val = {\n ...(formState?.email?.To?.length < 1 && { \"to\": `At least one recipient is required in the TO field` }),\n ...(formState?.email?.Subject?.length < 1 && { \"subject\": `Subject field is required` }),\n ...(!formState?.email?.HTML_Note && { \"body\": `Email body is required` }),\n ...(fetchTemplateError && { \"template\": `Error loading template: ${JSON.stringify(fetchTemplateError)}` }),\n }\n\n //console.log('formValidator', val, formState?.email?.HTML_Note, values);\n\n if (Object.keys(val).length > 0) return val;\n return null;\n }\n\n\n const onIframeInit = (ev: EditorIFrameInitEvent) => {\n\n //located in public folder\n const stylesheets = [\n './style/emailTemplate.css'\n ];\n\n stylesheets.forEach(href => {\n if (href && ev.iframe && ev.iframe.contentWindow) {\n const iframeDocument = ev.iframe.contentWindow.document;\n const linkElementWithiFrameStyles = iframeDocument.createElement('link');\n linkElementWithiFrameStyles.rel = 'stylesheet';\n linkElementWithiFrameStyles.type = 'text/css';\n linkElementWithiFrameStyles.href = href;\n iframeDocument.head.appendChild(linkElementWithiFrameStyles);\n }\n });\n }\n\n //Not for end users\n if (userProfile?.Features.External_Interface) return <></>;\n\n return (\n <div className='position-relative'>\n\n {(sendingEmail || isLoading || loadingTemplate) && <PartialSpinny />}\n <Form id={props.formName || 'email-action-form'} onSubmit={handleSend} validator={formValidator} ignoreModified={true}\n render={(formRenderProps) => (\n <FormElement className='w-100 d-flex flex-column email-action-form p-1 '>\n {formRenderProps.errors && Object.keys(formRenderProps.errors).length > 0 && (\n <div className=\"k-messagebox k-messagebox-error p-2 m-0\" role=\"alert\">\n {Object.keys(formRenderProps.errors).map((key, index) => (\n <div key={index}>{formRenderProps.errors[key]}</div>\n ))}\n </div>\n )}\n {/* From */}\n <div className='row g-1 align-items-center'>\n <label className='col-12 col-lg-1'>From:</label>\n <div className='col-11'>\n <TextBox disabled size='large' readOnly={true} placeholder='From:' value={formState?.email.From}></TextBox>\n </div>\n </div>\n {/* TO */}\n <div className='row g-1 align-items-center'>\n <label className='col-12 col-lg-1'>To:</label>\n <div className='col-11'>\n <div className='w-5/6 inline-block' >\n <MultiSelect id='To' name='To' size='large' value={formState?.email.To} onChange={handleToChange} tagRender={renderTag} itemRender={renderItem} placeholder='To: Type 3 or more characters to search...' filterable={true} allowCustom={true}\n popupSettings={{ className: 'z500', height: 400 }} onFilterChange={onFilter} data={filteredTo} dataItemKey=\"ID\" textField=\"Full_Name\" loading={toLoading} />\n </div>\n <ButtonGroup className='w-1/6 inline-block'>\n <BadgeContainer >\n <Badge>{formState?.email.CC?.length && formState?.email.CC?.length}</Badge>\n <Button className='toggle-button' type='button' onClick={() => dispatch(EmailActionSlice.setShowCC(!formState.email.Show_CC))} size='large' fillMode={formState.email.Show_CC ? 'solid' : 'outline'} formNoValidate title='Toggle CC visibility'>CC</Button>\n </BadgeContainer>\n <BadgeContainer >\n <Badge>{formState?.email.BCC && formState?.email.BCC?.length}</Badge>\n <Button className='toggle-button' type='button' onClick={() => dispatch(EmailActionSlice.setShowBCC(!formState.email.Show_BCC))} size='large' fillMode={formState.email.Show_BCC ? 'solid' : 'outline'} formNoValidate>BCC</Button>\n </BadgeContainer>\n </ButtonGroup>\n </div>\n </div>\n {/* CC */}\n {formState?.email.Show_CC &&\n <div className='row g-1 align-items-center'>\n <label className='col-12 col-lg-1'>CC:</label>\n <div className='col-11'>\n <MultiSelect size='large' value={formState?.email.CC} onChange={handleCChange} tagRender={renderTag} itemRender={renderItem} placeholder='CC: Type 3 or more characters to search...' filterable={true} allowCustom={true}\n popupSettings={{ className: 'z500', height: 400 }} onFilterChange={onFilter} data={filteredCC} dataItemKey=\"ID\" textField=\"Full_Name\" loading={ccLoading} />\n </div>\n </div>}\n {/* BCC */}\n {formState?.email.Show_BCC &&\n <div className='row g-1 align-items-center'>\n <label className='col-12 col-lg-1'>BCC:</label>\n <div className='col-11'>\n <MultiSelect size='large' value={formState?.email.BCC} onChange={handleBCChange} tagRender={renderTag} itemRender={renderItem} placeholder='BCC: Type 3 or more characters to search...' filterable={true} allowCustom={true}\n popupSettings={{ className: 'z500', height: 400 }} onFilterChange={onFilter} data={filteredBCC} dataItemKey=\"ID\" textField=\"Full_Name\" loading={bccLoading} />\n </div>\n </div>}\n {/* Subject */}\n <div className='row g-1 align-items-center'>\n <label className='col-12 col-lg-1'>Subject:</label>\n <div className='col-11'>\n <TextBox value={formState?.email.Subject} size='large' required placeholder='Email Subject:' onChange={(e) => dispatch(EmailActionSlice.setSubject(e.target.value.toString()))}></TextBox>\n </div>\n </div>\n {/* template */}\n {userProfile?.Features.Email_Templates &&\n <div className='row g-1 align-items-center'>\n <label className='col-12 col-lg-1'>Template:</label>\n <div className='col-11'>\n <EmailTemplateList hasDescription={formState?.email.HTML_Note > ''} templateId={formState?.email.Template_Id}\n onChange={(e) => dispatch(EmailActionSlice.setTemplateId(e.value?.Id))}\n />\n </div>\n </div>}\n <div className='row g-1'>\n <div className='inline-block col-12 col-lg-1 pl-2'></div>\n <div className={`inline-block w-full align-top col-12 col-lg-11`}>\n <Editor\n onIFrameInit={onIframeInit}\n contentStyle={{ height: '370px' }}\n onChange={(e) => dispatch(EmailActionSlice.setNotes(e.html))}\n value={formState?.email.HTML_Note || ''}\n tools={isMobile ? MobileTools : CommonTools}\n onMount={onMount}\n />\n </div>\n\n {/* <JsonTreeViewer data={formState} title='tree' /> */}\n </div>\n {isFileActiveInternal && <div className='row g-1'>\n <div className='inline-block col-12 col-lg-1 pl-2'></div>\n <div className={`inline-block w-full align-top col-12 col-lg-11`}>\n <FileUpload FileType={6} /> </div>\n\n </div>}\n <div className='row g-1'>\n <div className='inline-block col-12 col-lg-1 pl-2'></div>\n {addTimeSettings.canAddTime && <div className='inline-block col pl-2'>\n <div className='inline-block'>\n <Time {...{} as FieldRenderProps} disabled={settings && !settings?.Bill_Time_Enabled} mins={formState?.email.Billable_Time}\n onChange={(e) => dispatch(EmailActionSlice.setBillable(e.value))}\n label={userProfile?.Features?.Non_Bill_Time ? \"Bill (hrs)\" : \"Time (hrs)\"}\n ></Time>\n </div>\n {userProfile?.Features?.Non_Bill_Time &&\n <div className='inline-block pl-2'>\n <Time {...{} as FieldRenderProps} disabled={settings && !settings?.NonBill_Time_Enabled} mins={formState?.email.Non_Billable_Time}\n onChange={(e) => dispatch(EmailActionSlice.setNonBillable(e.value))}\n label={\"Non-Bill (hrs)\"}\n ></Time>\n </div>}\n </div>}\n </div>\n </FormElement >\n )\n }></Form >\n\n </div >\n\n\n );\n};\n\nexport default EmailForm;","import React from 'react';\nimport { Dialog, DialogActionsBar } from '@progress/kendo-react-dialogs';\nimport { Button } from '@progress/kendo-react-buttons';\nimport * as EmailActionSlice from '../../../../../../slices/EmailActionSlice';\nimport { useReduxDispatch } from '../../../../../../redux/hooks';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\n\ninterface ConfirmCloseProps {\n ticketId: number;\n visible: boolean;\n onClose: () => void;\n onDiscard: () => void;\n}\n\nconst ConfirmClose: React.FC<ConfirmCloseProps> = ({ ticketId, visible, onClose, onDiscard }) => {\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const { data: defaultFormState, isLoading } = TicketApi.useGetEmailConfigQuery(ticketId, { skip: userProfile?.Features?.External_Interface });\n const dispatch = useReduxDispatch();\n //Reset the form to the default state\n const discardChanges = () => {\n dispatch(EmailActionSlice.resetForm(defaultFormState));\n if (onDiscard) onDiscard();\n }\n\n return (\n <div>\n {visible && (\n <Dialog className='cool-window' title=\"Confirm Close\" onClose={onClose}>\n <p>Are you sure you want to close and lose any changes?</p>\n <DialogActionsBar layout='center'>\n <Button size='large' themeColor={'primary'} onClick={discardChanges}>Close</Button>\n <Button size='large' fillMode='outline' onClick={onClose}>Cancel</Button>\n </DialogActionsBar>\n </Dialog>\n )}\n </div>\n );\n};\n\nexport default ConfirmClose;","import React from 'react';\nimport { Card, CardBody, CardFooter, CardHeader } from '@progress/kendo-react-layout';\nimport { Link, useParams } from 'react-router-dom';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport EmailForm from './EmailForm';\nimport ConfirmClose from './ConfirmClose';\nimport AINotes from '../../AINotes';\nimport AddKBButton from '../KB/AddKBButton';\n\ninterface EmailActionProps {\n onclosed?: () => void\n onsubmitted?: () => void\n onpopout?: () => void\n}\n\nconst EmailAction: React.FC<EmailActionProps> = (props) => {\n const { ticketId } = useParams();\n const [confirmCloseVisible, setConfirmCloseVisible] = React.useState(false);\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n\n const closeClicked = () => {\n setConfirmCloseVisible(true);\n };\n\n const closeConfirmed = () => {\n setConfirmCloseVisible(false);\n\n if (props.onclosed) {\n props.onclosed();\n }\n }\n\n return (\n <Card className=\"no-pop\">\n <CardHeader className='action-header' style={{ color: '#fff', background: userProfile?.Nav_Hex_Color }}>\n <div className='d-flex align-items-center flex-row flex-grow justify-content-between'>\n <div>\n <SvgIcon size='large' icon={svg.envelopIcon} className='mr-2' ></SvgIcon>Send Email</div>\n {/*Link goes on the far right */}\n <div>\n <Link onClick={() => props.onpopout && props.onpopout()} className='align-items-right' to={`./email`} title='Pop out' style={{ color: '#fff' }}>\n <Button fillMode='flat' size='medium' svgIcon={svg.windowRestoreIcon} className='off'></Button>\n </Link>\n <Button fillMode='flat' size='medium' svgIcon={svg.xIcon} title='close' onClick={closeClicked}></Button>\n </div>\n </div>\n </CardHeader>\n <CardBody>\n <ConfirmClose ticketId={parseInt(ticketId)} visible={confirmCloseVisible} onClose={() => setConfirmCloseVisible(false)} onDiscard={closeConfirmed} />\n <EmailForm onsubmitted={props.onsubmitted} />\n </CardBody>\n <CardFooter className='email-action-footer'>\n <div className='mr-2'><AddKBButton from='email' /></div>\n {!userProfile?.Features.External_Interface && <AINotes controlMode='email' />}\n <Button form='email-action-form' svgIcon={svg.paperPlaneIcon} type='submit' className='p-2' style={{ width: '100px', color: '#fff', backgroundColor: userProfile?.Nav_Hex_Color }}>\n Send\n </Button>\n </CardFooter>\n </Card>\n );\n};\n\nexport default EmailAction;","import { Api } from './BaseApi'\nimport { IStarItem } from '../../types/Star/IStarItem';\n\nexport const pinApi = Api.injectEndpoints({\n endpoints: (builder) => ({\n getStars: builder.query<IStarItem[], void>({\n query: () => 'star',\n providesTags: ['Stars'],\n }),\n addStar: builder.mutation<any, IStarItem>({\n query: (newPin) => ({\n url: 'star',\n method: 'POST',\n body: newPin,\n }),\n invalidatesTags: ['Stars'],\n }),\n deleteStar: builder.mutation<any, IStarItem>({\n query: (pin) => ({\n url: `star/${pin.Id}`,\n method: 'DELETE'\n }),\n invalidatesTags: ['Stars'],\n }),\n }),\n});\n\nexport default pinApi;","import React, { useContext } from 'react';\nimport { Button } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { PinApi } from '../../../../redux/api/PinApi';\nimport { ITicket, ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { IPinItem } from '../../../../types/Pin/IPinItem';\nimport { useGetTenantQuery, useGetUserProfileQuery } from '../../../../redux/api/BaseApi';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { Link } from 'react-router-dom';\nimport StarApi from '../../../../redux/api/StarApi';\nimport { Setting } from '../../../../types/Setting/Setting';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport { setFlaggedNotesExpanded, setMenuExpanded } from '../../../../slices/TicketDetailUISlice';\nimport { useReduxDispatch, useReduxSelector } from '../../../../redux/hooks';\nimport { isMobile } from 'react-device-detect';\nimport { useGetHostConfigQuery } from '../../../../redux/api/AccountApi';\nimport Tools from './Tools/Tools';\n\nconst Toolbar: React.FC<ITicketProps> = (ticket) => {\n const dispatch = useReduxDispatch();\n const { menuExpanded, flaggedNotes } = useReduxSelector(state => state.ticketDetailsUI);\n const { data: tenant } = useGetTenantQuery(null);\n const { data: allPins, isFetching } = PinApi.useGetPinsQuery();\n const { data: allStars, isFetching: isFetchingStars } = StarApi.useGetStarsQuery();\n const thisPin = allPins?.find(p => p.Call_Id === ticket.ID);\n const thisStar = allStars?.find(p => p.Call_Id === ticket.ID);\n const profile = useContext<IUserProfile>(RevUserContext)\n const { data: sourceFeature } = UserApi.useGetSettingQuery(Setting.TICKET_SOURCE);\n const { data: userProfile } = useGetUserProfileQuery()\n //Page size is and System setting\n const { data: hostConfig } = useGetHostConfigQuery(userProfile?.Tenant_Uid, { skip: !userProfile?.Tenant_Uid });\n const [pin, { isLoading: savingPin }] = PinApi.useAddPinMutation();\n const [unpin, { isLoading: deletingPin }] = PinApi.useDeletePinMutation();\n\n const [star, { isLoading: savingStar }] = StarApi.useAddStarMutation();\n const [unstar, { isLoading: deletingStar }] = StarApi.useDeleteStarMutation();\n\n const pinTicket = () => {\n pin({ Call_Id: ticket.ID } as IPinItem);\n\n }\n\n const unpinTicket = () => {\n if (thisPin?.Id)\n unpin(thisPin);\n }\n\n const starTicket = () => {\n star({ Call_Id: ticket.ID } as IPinItem);\n }\n\n const unStarTicket = () => {\n if (thisStar?.Id)\n unstar(thisStar);\n }\n\n const loadingButton = <Button imageUrl='./images/ajax-loader-small.gif'></Button>;\n //Check if this is a staff member or enduser\n var isStaff = profile?.Features?.External_Interface === false;\n var starEnabled = profile?.Features?.Starred_Tickets;\n var sharingEnabled = profile?.Features?.Tagging;\n var printActive = hostConfig?.Print_Layout;\n\n interface Option {\n text: string;\n value: string;\n };\n const summaryOptions: Option[] = [\n {\n text: 'Description',\n value: 'Description'\n }, {\n text: 'Summary',\n value: 'Summary'\n }]\n const toggleSideBar = () => {\n dispatch(setMenuExpanded(!menuExpanded));\n\n }\n\n const tools = Tools(profile);\n\n\n return (<>\n <div className='tool-bar d-flex flex-column flex-grow-1'>\n\n <div className='d-flex flex-row justify-content-between align-items-center'>\n\n <div className='d-flex align-items-center'>\n {isMobile && <Button svgIcon={svg.menuIcon} fillMode='flat' color='#fff' onClick={toggleSideBar}></Button>}\n <div className={(ticket.StateCssClass || 'BlueBG') + ' ticket-number'}>\n {sourceFeature?.Bool_Value && <div className='source user-select-none'>{ticket.Source_Name || '(unknown)'}</div>}\n #<span className='user-select-all'>{ticket.ID}</span></div>\n </div>\n <div className=\"d-flex '\">\n <ul className=\"m-0\">\n {/* {isStaff && <li className=\"nav-item ms-2 d-none d-md-inline\"> <RelatedButton {...ticket} Is_Loading={false} /> </li>} */}\n {isStaff && flaggedNotes?.hasNotes && <li className=\"nav-item ms-2 d-none d-md-inline\">\n <Button title='Flagged notes' size='large' imageUrl='./images/Flag.png' className={flaggedNotes?.expanded ? 'on' : 'off'} onClick={() => dispatch(setFlaggedNotesExpanded(!flaggedNotes?.expanded))} ></Button>\n </li>}\n\n {/* {printActive && isStaff && <li className=\"nav-item ms-2 d-none d-md-inline\">\n <Link to={`/ticket/${ticket.ID}/print`} title='Print'><Button size='medium' svgIcon={svg.printIcon} className=' off' ></Button></Link>\n </li>} */}\n {/* {isStaff && sharingEnabled && <li className=\"nav-item ms-2 d-none d-md-inline\">\n <Link to={`/ticket/${ticket.ID}/share`} title='Share'><Button size='medium' svgIcon={svg.shareIcon} className='off' ></Button></Link>\n </li>} */}\n {profile?.Features?.Pin_Dock &&\n <li className=\"nav-item ms-2 d-none d-md-inline\">\n {(savingPin || deletingPin || isFetching) ? loadingButton :\n thisPin?.Id ? <Button svgIcon={svg.unpinIcon} title='Un-Pin' onClick={unpinTicket} ></Button> : <Button className='off' svgIcon={svg.pinIcon} title='Pin to dock' onClick={pinTicket} ></Button>\n }\n </li>}\n {isStaff && starEnabled && <li className=\"nav-item ms-2 d-none d-md-inline\">\n {(savingStar || deletingStar || isFetchingStars) ? loadingButton :\n thisStar?.Id ? <Button svgIcon={svg.starIcon} title='Un-Star' onClick={unStarTicket} ></Button> : <Button className='off' svgIcon={svg.starOutlineIcon} title='Star' onClick={starTicket} ></Button>\n }\n </li>}\n {isStaff && <li className=\"nav-item ms-2 me-2 d-none d-md-inline\">\n <Link to={`/deeplink?url=/calls/callinfo.aspx?call_id=${ticket.ID}`} target='_top' title='Edit'><Button svgIcon={svg.pencilIcon} className='off'></Button></Link>\n </li>}\n\n {isStaff && <li className=\"nav-item d-md-none mr-2 d-inline\">\n <a data-bs-toggle=\"collapse\" href='#toolMenu'><Button svgIcon={svg.moreHorizontalIcon} className='off' ></Button></a>\n </li>}\n\n </ul>\n </div >\n </div>\n <div className=\"container-fluid\">\n <div className=\"navbar-collapse collapse hide\" id=\"toolMenu\" >\n <ul className=\"navbar-nav\">\n {tools.filter(t => t.visible).map((tool, i) => {\n return <li key={i} className=\"nav-item\">\n\n <Link className=\"nav-link\" to={tool.route} title={tool.header}><Button size='medium' icon={tool.icon} imageUrl={tool.img} className='mr-2' ></Button> {tool.header}</Link>\n\n </li>\n })}\n\n </ul>\n </div>\n </div>\n </div >\n </>\n );\n}\n\nexport default Toolbar;","import React from 'react';\nimport { Icon } from '@progress/kendo-react-common';\nimport { ITicket } from '../../../../types/Ticket/ITicket';\nimport ReactTimeAgo from 'react-timeago'\n\nconst AutoStatusBanner: React.FC<{ ticket: ITicket }> = ({ ticket }) => {\n\n if (ticket?.Auto_Status_Text === null) return null;\n\n return (\n <div className='auto-status-banner' >\n <Icon name=\"calendar\" style={{ marginRight: '8px' }} />\n {ticket?.Auto_Status_Text} \n <u><ReactTimeAgo title={new Date(ticket?.Auto_Status_Date + 'Z').toDateString() + ' ' + new Date(ticket?.Auto_Status_Date + 'Z').toLocaleTimeString()} date={new Date(ticket?.Auto_Status_Date + 'Z')} ></ReactTimeAgo></u>\n </div>\n );\n};\n\nexport default AutoStatusBanner; ","import React, { useContext } from 'react';\nimport { Card, CardHeader, CardBody } from '@progress/kendo-react-layout';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport Toolbar from './Toolbar';\nimport AutoStatusBanner from './AutoStatusBanner';\nimport AutoLinker from './Tools/AutoLinker';\nimport { Skeleton } from '@progress/kendo-react-indicators';\nimport FlaggedNotes from '../../FormControls/FlaggedNotes/FlaggedNotes';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\n\nconst TicketHeader: React.FC<ITicketProps> = (details) => {\n const profile = useContext<IUserProfile>(RevUserContext)\n return (\n <Card>\n <CardHeader className='main-header d-flex'>\n <Toolbar {...details} />\n </CardHeader>\n <CardBody className='p-0'>\n {details?.Is_Loading ?\n <>\n {/* <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '100px', marginTop: '10px' }} /> */}\n <h6 className='description'>...</h6></>\n : <>\n <h6 className='description'><AutoLinker text={details?.Call_Desc?.replaceAll('\\n', '<br>')} /></h6>\n <AutoStatusBanner ticket={details} />\n {!profile?.Features.External_Interface && <FlaggedNotes ticket={details} showPopup={false} showNotes={true} />}\n </>\n }\n </CardBody>\n </Card>\n );\n};\n\nexport default TicketHeader;","import { CSSProperties } from \"react\";\n\nexport default function createTheme(bodyHex: string, themeName: string, imageUrl: string): CSSProperties {\n //Read the background image from a JSON file and return a CSSProperties object\n try {\n const theme = (imageUrl || !themeName) ? null : require(`./themes/${themeName}.json`);\n const themeImage = theme?.backgroundImage && `url(${process.env.PUBLIC_URL}/images/Login/Patterns/${theme?.backgroundImage})`;\n const backgroundImageUrl = imageUrl ? `url(${imageUrl.trim()})` : themeImage;\n\n //console.log('backgroundImageUrl', backgroundImageUrl);\n\n if (!backgroundImageUrl && !theme?.backgroundColor && !bodyHex) return {};\n return {\n backgroundColor: theme?.backgroundColor || bodyHex,\n backgroundImage: backgroundImageUrl,\n backgroundRepeat: 'repeat',\n } as CSSProperties;\n\n } catch (e) {\n console.error(`Error loading theme: ${themeName}`, e);\n return {};\n }\n}\n\n","import React from 'react';\nimport { Window, WindowActionsBar, WindowMoveEvent } from '@progress/kendo-react-dialogs';\n\ninterface FeedbackFormModalProps {\n label: string\n url: string\n}\n\nconst FeedbackFormModal: React.FC<FeedbackFormModalProps> = ({ url, label }) => {\n const [isVisible, setIsVisible] = React.useState(false);\n\n const onClose = () => {\n setIsVisible(false);\n return false;\n }\n\n return (\n <>\n <label role=\"button\" className=\"nav-link\" onClick={() => setIsVisible(true)}><u>{label}</u></label>\n {isVisible && <Window width={750} height={780} title=\"\" onClose={onClose} modal={true} minimizeButton={() => null}\n maximizeButton={() => null}>\n <iframe src={url} width=\"700px\" height=\"700px\" style={{ border: 'none' }}></iframe>\n </Window>\n }\n </>\n );\n};\n\nexport default FeedbackFormModal;","import React, { useState } from 'react';\nimport { Window } from '@progress/kendo-react-dialogs';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { Icon } from '@progress/kendo-react-common';\nimport { ITicket } from '../../../../types/Ticket/ITicket';\nimport { useGetTenantQuery } from '../../../../redux/api/BaseApi';\n\n\nconst DashboardPopup: React.FC<ITicket> = (details) => {\n const [visible, setVisible] = useState(false);\n const { data: tenant } = useGetTenantQuery()\n\n const toggleWindow = () => {\n setVisible(!visible);\n };\n\n if (!details?.Dashboard_Url) return <></>;\n\n return (\n <div>\n <Button title='Dashbaord' fillMode='flat' icon=\"graph\" onClick={toggleWindow}>\n </Button>\n {visible && (\n <Window minimizeButton={() => null} className='dashboard cool-window' title=\"Dashboard\" onClose={toggleWindow} initialHeight={800} initialWidth={1000}>\n <iframe src={tenant.Tenant_Url + details?.Dashboard_Url} width=\"100%\" height=\"100%\" frameBorder=\"0\" />\n </Window>\n )}\n </div>\n );\n};\n\nexport default DashboardPopup;","import React, { useContext, useEffect, useRef } from 'react';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { Avatar, Card, CardBody, CardHeader } from '@progress/kendo-react-layout';\nimport { Button, DropDownButton } from '@progress/kendo-react-buttons';\nimport { useGetTenantQuery } from '../../../../redux/api/BaseApi';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport FeedbackFormModal from './FeedbackFormModal';\nimport DashboardPopup from './DashbaordPopup';\nimport { Link } from 'react-router-dom';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Skeleton } from '@progress/kendo-react-indicators';\n\nconst UserInfo: React.FC<ITicketProps> = (details) => {\n const { data: tenant } = useGetTenantQuery()\n const { data: config } = TicketApi.useGetTicketConfigQuery(details?.ID)\n const profile = useContext<IUserProfile>(RevUserContext)\n\n const renderMenuItem = (option: any) => {\n return (\n <div className=\"menu-item\">\n <Link className='nav-link' to={option.item.Value}>{option.item.Key}</Link>\n </div>\n );\n };\n\n //Check if this is a staff member or enduser\n var isStaff = profile?.Features?.External_Interface === false;\n\n //if (!config) return <></>;\n\n //Loading...\n //if (!config || details?.Is_Loading) return <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '150px', marginBottom: '10px' }} />;\n\n\n return (\n <Card className=\"user-info\">\n <CardHeader>\n {details?.Is_Loading ? <div className='flex'>\n <Avatar rounded='full' className='user-profile-image' ><img src='images/placeholder_sml.png' alt=\"Profile\" width=\"50\" height=\"50\" /></Avatar>\n <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '45px', marginBottom: '0px', marginLeft: '5px' }} />\n </div>\n :\n <div className=\"k-hbox\" key={1}>\n {profile?.Features?.Profile_Action_Images && <Avatar rounded='full' className='user-profile-image' >\n {details?.Contact?.Profile_Image_Path ? <img src={details?.Contact?.Profile_Image_Path} alt=\"Profile\" width=\"50\" height=\"50\" /> : <img src='images/placeholder_sml.png' alt=\"Profile\" width=\"50\" height=\"50\" />}</Avatar>}\n <div>\n {/* <h5><a title='View profile' className='link-info link-offset-2 link-offset-3-hover link-underline link-underline-opacity-0 link-underline-opacity-0-hover' href={`${tenant?.Tenant_Url}/contacts/contactinfo.aspx?contact_id=${details.Company_Contact}`} target='_top'>{details.Contact_Name}</a></h5> */}\n <DropDownButton disabled={!isStaff} className='user-options text-info' text={<h5>{details.Contact_Name}</h5>} items={config?.ClientOptions} textField='Key' fillMode={'flat'} itemRender={renderMenuItem} endIcon={isStaff ? <SvgIcon icon={svg.chevronDownIcon} /> : null} />\n <small className='user-sub-title' title={details.Company_Name}>{details.Company_Abbrev}</small>\n </div>\n </div>}\n </CardHeader>\n <CardBody>\n {details?.Is_Loading || !config ? <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '150px', marginTop: '2px' }} /> :\n <>\n <div className='info'>\n <div className='g'>{profile.Phrases.Office}{profile?.Features.Mapping && <Link to='map'><Button className='map-view' title='Map view' fillMode='flat' icon=\"globe-outline\" onClick={() => null}></Button></Link>}</div><div className='t'>{isStaff ? <a rel=\"noreferrer\" href={`${tenant.Tenant_Url}/Office/OfficeAdd.aspx?Company_Id=${details.Company_Id}&Address_Id=${details.Company_Address_Id}&Main_Address=True`} target='_blank'>{details.Address_Name}</a> : details.Address_Name}</div>\n {details.Customer_Feedback_Form_Url && <><div className='g'>Customer Feedback:</div><div className='t'><FeedbackFormModal label='View' url={tenant?.Tenant_Url + details.Customer_Feedback_Form_Url} /></div></>}\n {(details.Contact_Bus_Phone || details.Office_Phone) && <><div className='g'>{details.Contact_Bus_Phone ? 'Phone #' : 'Office #'}</div><div className='t'>{details.Contact_Bus_Phone ?? details.Office_Phone}</div></>}\n <div className='g'>{profile.Phrases.Project}<DashboardPopup {...details} /></div><div className='t'>{isStaff ? <a rel=\"noreferrer\" href={`./deeplink?url=/Project/ProjectHistory.aspx?Project_Id=${details.Project_Id}`} target='_blank'>{details.Project_Name}</a> : details.Project_Name}</div>\n {details.Contact?.Quick_Dial && <><div className='g'>{profile.Phrases.QuickDial}</div><div className='t'>{details.Contact?.Quick_Dial}</div></>}\n {details.Contact?.Ext && <><div className='g'>Ext</div><div className='t'>{details.Contact?.Ext}</div></>}\n {details.AssociatedContacts && details.AssociatedContacts.length > 0 && <><div className='g'>Associated Contacts</div><div className='t d-block'>{details.AssociatedContacts?.map(c =>\n <div className=''><a rel=\"noreferrer\" key={c.ID} href={`${tenant.Tenant_Url}/contacts/contactinfo.aspx?contact_id=${c.Contact_Id}`} target='_blank'>{c.Full_Name}</a></div>\n )}</div></>}\n <div className='g'>{profile.Phrases.ProjectType}:</div><div className='t'>{details.Project_Type}</div>\n {config?.ClientConfig.ShowCustom1 && details.Contact?.Custom1 && <><div className='g'>{profile.Phrases.UserCustom1}:</div><div className='t'>{details.Contact?.Custom1}</div></>}\n {config?.ClientConfig.ShowCustom2 && details.Contact?.Custom2 && <><div className='g'>{profile.Phrases.UserCustom2}:</div><div className='t'>{details.Contact?.Custom2}</div></>}\n {config?.ClientConfig.ShowCustom3 && details.Contact?.Custom3 && <><div className='g'>{profile.Phrases.UserCustom3}:</div><div className='t'>{details.Contact?.Custom3}</div></>}\n {config?.ClientConfig.ShowCustom4 && details.Contact?.Custom4 && <><div className='g'>{profile.Phrases.UserCustom4}:</div><div className='t'>{details.Contact?.Custom4}</div></>}\n {config?.ClientConfig.ShowCustom5 && details.Contact?.Custom5 && <><div className='g'>{profile.Phrases.UserCustom5}:</div><div className='t'>{details.Contact?.Custom5}</div></>}\n {config?.ClientConfig.ShowRegion && details.Contact?.Region_Name && <><div className='g'>{profile.Phrases.Region}:</div><div className='t'>{details.Contact?.Region_Name}</div></>}\n {config?.ClientConfig.ShowTerritory && details.Contact?.Territory_Name && <><div className='g'>{profile.Phrases.Territory}:</div><div className='t'>{details.Contact?.Territory_Name}</div></>}\n\n </div>\n </>}\n </CardBody>\n </Card >\n );\n};\n\nexport default UserInfo;","import React, { useContext } from 'react';\nimport { Card, CardHeader, CardBody } from '@progress/kendo-react-layout';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { Icon, SvgIcon } from '@progress/kendo-react-common';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { Button, DropDownButton, DropDownButtonItem, DropDownButtonItemClickEvent, SplitButton } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Align } from '@progress/kendo-react-popup';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { toast } from 'react-toastify';\nimport { ReassignProps } from '../../../../types/Props/ReassignProps';\nimport { PartialSpinny } from '../../../Nav/Spinny';\nimport { Skeleton } from '@progress/kendo-react-indicators';\n\nconst Ownership: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const profile = useContext<IUserProfile>(RevUserContext)\n const [opened, setOpened] = React.useState(false);\n const [reassignTicket, { isLoading: saving }] = TicketApi.useReassignMutation();\n\n const menuItemClicked = (e: DropDownButtonItemClickEvent) => {\n console.log('menu item clicked', e);\n if (e.item.text === 'Edit') {\n navigate('ownership');\n } else if (e.item.text === 'Add Me') {\n reassignTicket({ TicketId: ticket.ID, New_Assignees: [profile.Id], Add_To_Existing: true } as ReassignProps).unwrap().then(() => {\n //overkill\n //toast.success(`You have been assigned to this ${profile?.Phrases.CallPhrase}`);\n }).catch((e) => {\n toast.error('Failed to assign you to this ticket: ' + e.error);\n });\n } else if (e.item.text === 'Own') {\n reassignTicket({ TicketId: ticket.ID, New_Assignees: [profile.Id], Add_To_Existing: false } as ReassignProps).unwrap().then(() => {\n //overkill\n //toast.success(`You have been assigned to this ${profile?.Phrases.CallPhrase}`);\n }).catch((e) => {\n toast.error('Failed to assign you to this ticket: ' + e.error);\n });\n }\n }\n\n if (profile?.Features.External_Interface) return null;\n\n //Loading...\n //if (!ticket || ticket.Is_Loading) return <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '100px', marginBottom: '10px' }} />;\n\n return (\n <Card className=\"ownership\">\n <CardHeader>\n <i><SvgIcon size='large' icon={svg.userOutlineIcon} className='mr-2' ></SvgIcon></i>\n <Link className='nav-link ownership-link' to='ownership' title='Edit ownership'>Ownership<SvgIcon icon={svg.hyperlinkOpenIcon} className='d-none' /> </Link>\n <i className='ownership-menu-button123'>\n <DropDownButton fillMode='flat' onItemClick={menuItemClicked} svgIcon={svg.moreVerticalIcon} popupSettings={{ animate: false, popupClass: 'ownership-menu', popupAlign: { horizontal: 'right' } as Align }}>\n <DropDownButtonItem svgIcon={svg.pencilIcon} text=\"Edit\" />\n <DropDownButtonItem svgIcon={svg.plusOutlineIcon} text=\"Add Me\" disabled={ticket?.Call_Assignment?.find(ass => ass.Contact_Id == profile.Id) != null} />\n <DropDownButtonItem svgIcon={svg.userOutlineIcon} text=\"Own\" disabled={ticket?.Call_Assignment?.find(ass => ass.Contact_Id == profile.Id) != null && ticket?.Call_Assignment.length == 1} />\n </DropDownButton>\n\n </i>\n </CardHeader>\n <CardBody>\n {ticket.Is_Loading ? <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '50px', marginTop: '2px' }} /> :\n <>{saving ? <PartialSpinny /> :\n <div className='info'>\n <div className='g'>Logged By</div><div className='t'><Link to={`/contacts/contactinfo.aspx?contact_Id=${ticket.Call_Opener}`}>{ticket.Call_Opener_Name}</Link></div>\n <div className='g'>Assigned To</div><div className='t'> {ticket?.Call_Assignment?.map((ass, index) => <div className='b' key={index}>{ass.Contact_Name}</div>)}</div>\n </div>\n }</>\n }\n </CardBody>\n </Card>\n );\n};\n\nexport default Ownership;","import React, { useContext } from 'react';\nimport { Card, CardHeader, CardBody } from '@progress/kendo-react-layout';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { Icon } from '@progress/kendo-react-common';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { toDigital } from '../../../../utils/utils';\nimport { Skeleton } from '@progress/kendo-react-indicators';\n\nconst TimeLogged: React.FC<ITicketProps> = (ticket) => {\n const profile = useContext<IUserProfile>(RevUserContext)\n const [display, setDisplay] = React.useState(0);\n const values = [{\n header: 'Time Logged',\n total: toDigital(ticket.Actual_Time + ticket.Actual_NonBill_Time),\n billed: toDigital(ticket.Actual_Time ?? 0),\n notBilled: toDigital(ticket.Actual_NonBill_Time ?? 0),\n imageUrl: './images/time_parent.png'\n },\n {\n header: 'Child Time',\n total: toDigital(ticket.Child_Bill_Time + ticket.Child_NonBill_Time),\n billed: toDigital(ticket.Child_Bill_Time ?? 0),\n notBilled: toDigital(ticket.Child_NonBill_Time ?? 0),\n imageUrl: './images/time_child.png'\n },\n {\n header: 'All Time',\n total: toDigital(ticket.Actual_Time + ticket.Actual_NonBill_Time + ticket.Child_Bill_Time + ticket.Child_NonBill_Time),\n billed: toDigital((ticket.Actual_Time ?? 0) + (ticket.Child_Bill_Time ?? 0)),\n notBilled: toDigital((ticket.Actual_NonBill_Time ?? 0) + (ticket.Child_NonBill_Time ?? 0)),\n imageUrl: './images/time_all.png'\n }];\n const currentValues = values[display];\n\n if (profile?.Features.External_Interface) return null;\n\n const projectTimeColor = ticket.Project_Available_Time < 0 ? '#A60606' : '';\n\n return (\n <Card className=\"time-logged\">\n <CardHeader>\n <Icon size='large' name='clock' />{currentValues.header} {!ticket.Is_Loading && currentValues.total}\n {ticket?.Is_Parent ? <Button style={{ backgroundColor: '#c1c1c1' }} imageUrl={currentValues.imageUrl} onClick={() => setDisplay((d) => d > 1 ? 0 : d + 1)} title='Toggle time: Parent / Children / All' /> : <i></i>}\n </CardHeader>\n <CardBody>\n {/* last render: {new Date().toLocaleTimeString()} */}\n {ticket.Is_Loading ? <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '100px', marginTop: '2px' }} /> :\n <div className='info'>\n <div className='g'>{profile?.Features.Non_Bill_Time ? 'Billed' : 'Time'}</div><div className='t'>{currentValues.billed}</div>\n {profile?.Features.Non_Bill_Time && <><div className='g'>Not Billed</div><div className='t'>{currentValues.notBilled}</div></>}\n {!ticket.Show_Project_Available_Time && <><div className='g'>Remaining</div><div className='t' style={{ color: projectTimeColor }}>{toDigital(ticket.Project_Available_Time, true)}</div></>}\n </div>}\n </CardBody>\n </Card>\n );\n};\n\nexport default TimeLogged;","import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { IType } from '../../../../types/IType';\nimport { Icon } from '@progress/kendo-react-common';\nimport { Card, CardHeader, CardBody } from '@progress/kendo-react-layout';\nimport { ComboBoxFilterChangeEvent, DropDownTree } from '@progress/kendo-react-dropdowns';\nimport { expandedState, processTreeData } from '../../../../utils/TreeDataOperations';\nimport { PartialSpinny } from '../../../Nav/Spinny';\nimport { Skeleton } from '@progress/kendo-react-indicators';\nimport { AdaptiveModeContext } from '@progress/kendo-react-common';\nimport { UserApi } from '../../../../redux/api/UserApi';\n\ninterface TicketType {\n id: number;\n name: string;\n}\n\ninterface TypeProps extends ITicketProps {\n showHeader?: boolean;\n isOpen?: boolean;\n}\n\nconst TicketType: React.FC<TypeProps> = (ticket) => {\n const { data: profile } = UserApi.useGetUserProfileQuery();\n //Get a list to types from the API\n const { data: typesList } = TicketApi.useGetMyTypeListQuery(-1)\n const [updateType, { isLoading: isUpdating }] = TicketApi.useUpdateTypeMutation();\n const [show, setShow] = useState(ticket.isOpen);\n const [filter, setFilter] = useState('');\n\n //Update the show state during the close validation popup steps.\n useEffect(() => {\n setShow(ticket.isOpen)\n }\n , [ticket.isOpen]);\n\n const handleFilterChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n setFilter(e.target.value);\n };\n\n\n const filteredTypes = typesList?.filter(type =>\n type.Call_Type.toLowerCase().includes(filter.toLowerCase())\n );\n\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 itemSelected = (e) => {\n console.log('itemSelected', e, popRef?.current)\n\n setShow(false)\n }\n\n const onClick = (e) => {\n // offSet.current = {\n // //left: e.nativeEvent.x,\n // left: dropRef.current.element.getBoundingClientRect().left,\n // top: e.nativeEvent.y,\n // };\n setShow((s) => !s);\n\n };\n\n const typeItems = useMemo(() => fillLevelTypes(filteredTypes?.filter(l => l.Parent_Id === null)), [filteredTypes])\n\n const popRef = useRef(null);\n const dropRef = useRef(null);\n const anchor = useRef(null);\n\n const onFilterChange = (e: ComboBoxFilterChangeEvent) => {\n console.log('Change comes from within', e.filter.value)\n setFilter(e.filter.value)\n\n setShow(true);\n }\n\n //Tree stuffs\n const selectField = 'selected';\n const expandField = 'expanded';\n const dataItemKey = 'id';\n const textField = 'text';\n const subItemsField = 'items';\n const fields = {\n selectField,\n expandField,\n dataItemKey,\n subItemsField,\n textField\n };\n const [expanded, setExpanded] = React.useState([]);\n const [value, setValue] = React.useState(null);\n\n const onChange = event => {\n setValue(event.value);\n\n //console.log('onChange', event.value)\n\n //update thje ticket via the api\n updateType({ ticketId: ticket.ID, typeId: event.value[dataItemKey] }).unwrap().then(() => {\n //overkill\n //toast.success('Type updated successfully')\n }).catch((e) => {\n console.error('Error updating type', e)\n });\n }\n\n const onTreeFilterChange = event => setNewFilter(event.filter);\n const [newFilter, setNewFilter] = React.useState({\n value: '',\n operator: 'contains'\n });\n const treeData = React.useMemo(() => {\n\n var newData = processTreeData(typeItems || [], {\n expanded,\n value: newFilter.value,\n filter: newFilter\n }, fields)\n\n //expand all nodes\n //newData.map(d => d.expanded = true);\n //console.log('treeData useMemo', newFilter, expanded, newData, fields);\n\n return newData;\n }, [expanded, value, newFilter, typeItems]);\n const onExpandChange = React.useCallback(event => setExpanded(expandedState(event.item, dataItemKey, expanded)), [expanded]);\n\n //Populate the value with the current type\n useEffect(() => {\n if (ticket?.Type_Id) {\n setValue({ id: ticket?.Type_Id, name: ticket?.Call_Type_Path })\n }\n }, [ticket?.Type_Id]);\n\n return (\n <Card className=\"type\">\n {ticket.showHeader == false ? <></> : <CardHeader>\n <Icon size='large' name='categorize' />{profile?.Phrases.CallPhrase} Type<i></i>\n </CardHeader>}\n <CardBody>\n {ticket.Is_Loading ? <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '30px', marginTop: '2px' }} /> :\n <>\n {isUpdating && <PartialSpinny />}\n <AdaptiveModeContext.Provider value={{ small: 1024, medium: 1024 }}>\n <DropDownTree adaptive={true} adaptiveTitle='Select a type' className='call-type-dropdown'\n style={{ width: '100%' }}\n placeholder={ticket?.Call_Type_Path || 'Select...'}\n data={treeData}\n value={value}\n onChange={onChange}\n textField={textField}\n dataItemKey={dataItemKey}\n onExpandChange={onExpandChange}\n filterable={true}\n onFilterChange={onTreeFilterChange}\n filter={newFilter.value}\n popupSettings={{ width: 300, collision: { vertical: 'fit', horizontal: 'none' }, positionMode: 'absolute', anchorAlign: { horizontal: 'right', vertical: 'top' }, className: 'call-type-popup' }}\n opened={show}\n onOpen={() => setShow(true)}\n onClose={() => setShow(false)}\n />\n </AdaptiveModeContext.Provider>\n </>\n\n }\n </CardBody>\n\n </Card >\n );\n};\n\nexport default TicketType;","import React, { useContext } from 'react';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { Card, CardHeader, CardBody } from '@progress/kendo-react-layout';\nimport { Icon } from '@progress/kendo-react-common';\nimport TimelineImage from '../../TimelineImage';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { Skeleton } from '@progress/kendo-react-indicators';\nimport StatusList from '../../ListControls/StatusList';\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport PriorityList from '../../ListControls/PriorityList';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { ISetStatusProps } from '../../../../types/Ticket/Status/ISetStatusProps';\nimport { PartialSpinny } from '../../../Nav/Spinny';\nimport { useNavigate } from 'react-router-dom';\nimport SLAList from '../../ListControls/SLAList';\nimport { IPriority } from '../../../../types/Priority/IPriority';\nimport { ISetPriorityProps } from '../../../../types/Priority/ISetPriorityProps';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Button } from '@progress/kendo-react-buttons';\nimport GroupAssigned, { GroupAssignedProps } from './Tools/Close/GroupAssigned';\nimport { useGetHostConfigQuery } from '../../../../redux/api/AccountApi';\nimport useRedirectOnClose from '../../../../hooks/useRedirectOnClose';\nimport { useCloseTicketLogic } from '../../../../hooks/useCloseTicketLogic';\n\nconst Timeline: React.FC<ITicketProps> = (ticket) => {\n const navigate = useNavigate();\n const [setStatus, { isLoading: updatingStatus }] = TicketApi.useSetStatusMutation();\n const [setPriority, { isLoading: updatingPriority }] = TicketApi.useSetPriorityMutation();\n const [setSLA, { isLoading: updatingSLA }] = TicketApi.useUpdateSLAMutation();\n const { data: allStatuses } = TicketApi.useGetStatusesQuery();\n const profile = useContext<IUserProfile>(RevUserContext)\n const externalUser = profile?.Features.External_Interface;\n const defaultCloseStatus = allStatuses?.find(s => s.Closed_default === true);\n const [configGroupProps, setConfirmDialogProps] = React.useState<GroupAssignedProps>(null);\n const [setAssigned, { isLoading: settingOwnership }] = TicketApi.useReassignMutation();\n const { data: userProfile } = TicketApi.useGetUserProfileQuery();\n const handleRedirect = useRedirectOnClose();\n const { closeTicket, isClosing } = useCloseTicketLogic(profile);\n const statusChanged = (e) => {\n console.log('statusChanged', e);\n //Ticket closing or Auto Close\n if (e.value.status.Open_status === 0 || e.value.status.Open_status === 4) {\n closeTicket(ticket, e.value.status.ID);\n return;\n }\n\n //Update the status viua the API\n const props = {\n Ticket_Id: ticket.ID,\n New_Status_Id: e.value.status.ID,\n Auto_Open_Date: e.value?.autoOpenSettings?.Enabled && e.value?.autoOpenSettings?.Auto_Open_Date,\n Auto_Close_Date: e.value?.autoCloseSettings?.Enabled && e.value?.autoCloseSettings?.Auto_Close_Date,\n } as ISetStatusProps\n\n //Check if there are advanced hierarchy options\n if (profile.Features.Advanced_Heirarchy_Options && ticket.Is_Parent) {\n props.Cascade_To_Children = window.confirm('Do you want to cascade this status change to all children?');\n }\n\n //Update status via API\n setStatus(props).unwrap().then((hmm) => {\n\n }).catch((err) => {\n //if the api returns a 400 error them open the validation popup\n if (err.originalStatus === 400) {\n navigate('close');\n }\n })\n\n };\n\n const priorityChanged = (e) => {\n console.log('priorityChanged', e);\n const props = {\n Ticket_Id: ticket.ID,\n Priority_Id: e.value.ID,\n Priority_Set_Id: ticket.Priority_Set_Id\n } as ISetPriorityProps\n setPriority(props);\n };\n\n const SLAChanged = (e) => {\n console.log('slaChanged', e.value?.SLA_ID);\n //if (!e.value?.SLA_ID) return;\n\n setSLA({ ticketId: ticket.ID, slaID: e.value?.SLA_ID || 0 }).unwrap();\n };\n\n const selectedPriority = { ID: ticket.Priority_Id, Priority_Level: ticket.Priority_Level } as IPriority;\n\n const closeClicked = () => {\n //console.log('closeClicked', ticket.CloseValidationCodes, defaultCloseStatus);\n closeTicket(ticket);\n }\n\n // const closeTicket = (statusId: number) => {\n // //Check if the ticket is assigned only to a queue - need to show a dialog to confirm assignment to the current user\n // if (ticket.Call_Assignment.length === 1 && ticket.Call_Assignment[0].Access_Level_Id === 6) {\n // setConfirmDialogProps({\n // show: true, onClose: (yes) => {\n // //Assign to ME\n // if (yes) {\n // setAssigned({ TicketId: ticket.ID, New_Assignees: [profile?.Id] }).unwrap().then(() => {\n // //Close \n // setConfirmDialogProps(p => { return { ...p, show: false } })\n\n // continueClose(statusId);\n // });\n // } else {\n // setConfirmDialogProps(p => { return { ...p, show: false } })\n // }\n // }\n // });\n // return\n // } else {\n // //Require Ownership to close FEATURE\n // if (profile.Features.Require_Ticket_Ownership_To_Close && ticket.Call_Assignment.find(a => a.Contact_Id === profile.Id) === undefined) {\n // setConfirmDialogProps({\n // message: `${profile?.Phrases.CallPhrase} ownership is required. Would you like to assign the ${profile?.Phrases.CallPhrase} to yourself before closing it?`,\n // show: true, onClose: (yes) => {\n // //Assign to ME\n // if (yes) {\n // setAssigned({ TicketId: ticket.ID, New_Assignees: [profile?.Id] }).unwrap().then(() => {\n // //Close \n // setConfirmDialogProps(p => { return { ...p, show: false } })\n\n // continueClose(statusId);\n // });\n // } else {\n // setConfirmDialogProps(p => { return { ...p, show: false } })\n // }\n // }\n // });\n // return\n // }\n // }\n\n // continueClose(statusId);\n // }\n\n // const continueClose = (statusId: number) => {\n // //if there is no close validation then just close the ticekt otherwise navigate to the close page\n // if (ticket.CloseValidationCodes.length === 0) {\n // //DefaULT CLOSE\n // setStatus({\n // Ticket_Id: ticket.ID,\n // New_Status_Id: statusId || defaultCloseStatus?.ID\n // } as ISetStatusProps).unwrap().then(() => {\n // //Close the ticket\n // handleRedirect(ticket?.ID);\n // }).catch((err) => {\n // //if the api returns a 400 error them open the validation popup\n // if (err.originalStatus === 400) {\n // navigate(`close/${statusId}`);\n // }\n // });\n\n // return false;\n // }\n\n // navigate(`close/${statusId}`);\n // }\n\n return (\n <Card className=\"timeline\">\n <CardHeader>\n <Icon size='large' name='calendar' /> {ticket?.Timeline_Description ? ticket?.Timeline_Description : 'Timeline'}<i></i>\n </CardHeader>\n <CardBody>\n {(updatingPriority || updatingStatus || settingOwnership || updatingSLA || isClosing) && <PartialSpinny />}\n {ticket?.Is_Loading ? <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '100px', marginTop: '2px' }} />\n : <>\n {\n profile?.Features.External_Interface\n && <div className='info'><div className='g'>Opened</div><div className='t'> {new Date(ticket.Open_Dt + 'Z').toLocaleString()}</div></div>\n\n }\n <div className='info'>\n <div className='g'>Status</div>\n <div className='t'>\n <div className='status-list'>{externalUser ? ticket.Call_Status :\n <div className={`${ticket.Open_Status !== 0 ? 'col-9' : 'col-12'} d-inline-block`}>\n <StatusList {...{ onChange: statusChanged } as FieldRenderProps} statusId={ticket.Call_Status_Id} statusName={ticket.Call_Status} statusNameOnly={true} /></div>}\n {!externalUser && ticket.Open_Status !== 0 && <div className='col-3 d-inline ms-1'><Button onClick={closeClicked} svgIcon={svg.minusOutlineIcon} title={`Close ${profile?.Phrases.CallPhrase}`}></Button></div>}\n {!externalUser && configGroupProps?.show && <GroupAssigned {...configGroupProps} />}\n </div>\n </div>\n </div>\n\n {profile.Features.SLAs && <div className='info'><div className='g'>{profile?.Phrases?.SLA}</div><div className='t'> {externalUser ? (ticket.SLA_Name || 'None')\n :\n profile.Features.Multi_SLA ? <SLAList {...{ onChange: SLAChanged } as FieldRenderProps} projectId={ticket.Project_Id || 0} priorityId={ticket.Priority_Id || 0} slaId={ticket.SLA_Id || 0} /> : <div className='ms-2'>{ticket.SLA_Name || 'None'}</div>\n }\n </div></div>}\n\n <div className='info'><div className='g'>{profile?.Phrases?.Priority}</div><div className='t'>{externalUser ? ticket.Priority_Level :\n <PriorityList {...{\n onChange: priorityChanged,\n } as FieldRenderProps} selectedPriority={selectedPriority} prioritySetId={1} priorityChangeHandler={priorityChanged} />}\n </div></div>\n {(!profile?.Features.External_Interface || profile?.Features.Show_SSI_Timeline) && <div className='d-flex justify-content-center pt-2'><TimelineImage {...ticket} /></div>}\n </>\n }\n </CardBody >\n </Card >\n );\n};\n\nexport default Timeline;","import React, { useEffect, useState } from 'react';\nimport { ScrollView } from '@progress/kendo-react-scrollview';\nimport { FileApi } from '../../../../redux/api/FileApi';\nimport { Link, useNavigate, useParams } from 'react-router-dom';\nimport { PartialSpinny, Spinny } from '../../../Nav/Spinny';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { IFile } from '../../../../types/File/IFile';\nimport {\n InputSuffix,\n TextBox,\n} from '@progress/kendo-react-inputs';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { ComboBox } from '@progress/kendo-react-dropdowns';\nimport { FileType } from '../../../../types/File/FileType';\nimport { UserApi } from '../../../../redux/api/UserApi';\n\nexport type AttachmentProps = {\n gotAttachments?: (files: IFile[]) => void;\n showSearch?: boolean;\n showInfo?: boolean;\n showPaging?: boolean;\n}\n\ntype AttachmentSearch = {\n type: string;\n search: string;\n}\n\nconst AttachmentsLightBox: React.FC<AttachmentProps> = (props) => {\n const navigate = useNavigate();\n const { actionId, ticketId, id } = useParams();\n const { data: actionfiles, isFetching } = FileApi.useGetFilesQuery({ typeId: FileType.Call_Action_Internal, primaryId: parseInt(actionId) }, { skip: isNaN(parseInt(actionId)) });\n const { data: ticketFiles, isFetching: fetchingTicektFiles } = FileApi.useGetTicketFilesQuery({ ticketId: parseInt(ticketId) }, { skip: !isNaN(parseInt(actionId)) });\n const imageType = 'image/';\n const [downloadUrl, setDownloadUrl] = useState('');\n const [visible, setVisible] = useState(true);\n const showFiles = ticketFiles || actionfiles;\n const [search, setSearch] = useState({} as AttachmentSearch);\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [deleteFile, { isLoading: deletingFile }] = FileApi.useDeleteFileMutation();\n\n const filteredFiles = showFiles?.filter(f => {\n return (!search.search || f.File_Name.toLowerCase().indexOf(search.search.toLowerCase()) > -1) &&\n (!search.type || f.Type?.indexOf(search.type) > -1)\n });\n\n //Move to this file slide\n const viewIndex = id && filteredFiles.indexOf(filteredFiles.find(f => f.ID == parseInt(id))) + 1;\n\n\n useEffect(() => {\n //Need to re-0render the view when the filter changes otherwise the viewIndex will be wrong\n //This appears to be a buig in the ScrollView component\n // console.warn('This appears to be a buig in the ScrollView component', search);\n setVisible(false);\n setTimeout(() => setVisible(true), 20);\n }, [search]);\n\n useEffect(() => {\n if (props && props.gotAttachments && filteredFiles) {\n props.gotAttachments(filteredFiles);\n }\n }, [filteredFiles]);\n\n const getSvgIcon = (type: string) => {\n switch (type) {\n case 'image/png':\n case 'image/jpeg':\n case 'image/jpg':\n return svg.imageIcon;\n case 'application/pdf':\n return svg.filePdfIcon;\n case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document':\n case 'application/msword':\n return svg.fileWordIcon;\n case 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':\n case 'application/vnd.ms-excel':\n return svg.fileExcelIcon;\n case 'application/vnd.openxmlformats-officedocument.presentationml.presentation':\n case 'application/vnd.ms-powerpoint':\n return svg.fileWordIcon;\n case 'video/mp4':\n return svg.fileVideoIcon;\n case 'application/zip':\n case 'application/x-rar-compressed':\n case 'application/x-zip-compressed':\n return svg.fileZipIcon;\n case 'text/html':\n case 'application/json':\n case 'text/xml':\n return svg.fileProgrammingIcon;\n case 'text/csv':\n return svg.fileCsvIcon;\n default:\n if (type.indexOf('text/') > -1) return svg.fileTxtIcon;\n return svg.fileIcon;\n }\n }\n\n const searchTypes = [\n { name: 'Images', value: 'image/' },\n { name: 'PDF', value: 'application/pdf' },\n { name: 'Documents', value: 'text/' },\n { name: 'Videos', value: 'video/' },\n { name: 'Audio', value: 'audio/' },\n { name: 'Zip', value: 'application/x-zip-compressed' },\n { name: 'Application', value: 'application/' }\n ];\n\n if (!showFiles || isFetching || deletingFile) return <PartialSpinny />;\n\n\n return (\n <div className=\"attachment-lightbox\">\n {props.showSearch && <div className='search-bar d-flex'>\n <div className='col-8'>\n <TextBox value={search?.search} size='large' placeholder='Search' onChange={(e) => setSearch((s) => {\n return { ...s, search: e.target.value } as AttachmentSearch\n })}\n prefix={() => (\n <InputSuffix>\n <Button\n themeColor=\"primary\"\n fillMode={'flat'}\n rounded={null}\n svgIcon={svg.searchIcon}\n />\n </InputSuffix>\n )}\n\n suffix={() => (\n <InputSuffix>\n {search?.search && <Button svgIcon={svg.xIcon} fillMode='flat' onClick={() => {\n setSearch((s) => {\n return { ...s, search: '' } as AttachmentSearch\n })\n }}></Button>}\n </InputSuffix>\n )} />\n </div>\n <div className='col-4' >\n <ComboBox size='large' allowCustom={false} placeholder='File Type' data={searchTypes} textField='name' key='value'\n onChange={(e) => setSearch((s) => {\n return { ...s, type: e.target.value?.value } as AttachmentSearch\n })}\n />\n </div></div>}\n {filteredFiles?.length == 0 ?\n <div className='text-center mt-5'><h4>No attachments found</h4></div>\n : visible && <ScrollView activeView={viewIndex} className='scollview' automaticViewChange={false} arrows={true} pageable={props?.showPaging && (filteredFiles?.length > 1)} style={{\n }}>\n {filteredFiles?.map((item, index) => {\n const isImage = item.Type?.indexOf(imageType) > -1;\n return <div className='scroll-item' key={index}>\n {isImage ?\n <>\n\n <Link to={props.showSearch ? item.File_Link_Safe : `files/${item.ID}`} title='Attachment preview' className='attachment-preview-image'>\n <img className=\"ms-auto mr-auto\" src={item.Image_Url + '?preview=true'} alt={`Attachment ${index + 1}`} style={{\n maxHeight: 380\n }} draggable={false} loading='lazy' />\n </Link>\n </>\n : <></>//<h5><SvgIcon icon={getSvgIcon(item.Type)} className='m-auto' size='xxxlarge' /> {item.File_Name}</h5>}\n }\n <div className='file-name'>\n <Link download={item.File_Name} style={{ textDecoration: 'underline' }} className='nav-link' to={item.File_Link_Safe} title='Click to download'>\n <h5 className='d-inline'>{!isImage && <div><SvgIcon className='attachment-icon' icon={getSvgIcon(item.Type)} size='xxxlarge' ></SvgIcon></div>} {item.File_Name}</h5>\n </Link>\n {userProfile?.Features.Delete_Attachments && <div className='button-wrapper'><Button className='delete-button position-absolute p-1' title='Delete attachment' svgIcon={svg.trashIcon} size='large' fillMode='flat'\n onClick={(event) => {\n //Delete attachments\n if (window.confirm('Are you sure you want to delete this attachment?')) {\n deleteFile(item.ID.toString()).unwrap().then(() => {\n\n });\n }\n }} /></div>}\n </div>\n {props && props.showInfo &&\n <ul className='file-info'>\n <li>Type: {item.Type}</li>\n <li>Created: {new Date(item.Created + 'Z').toLocaleString()}</li>\n <li>Size: {(item.Length / 1024 / 1024).toFixed(2)}Mb</li>\n </ul>}\n </div>\n })}\n </ScrollView>}\n <iframe src={downloadUrl} className='hidden'></iframe>\n {/* <h6>Attachment x of y</h6> */}\n </div>\n\n );\n};\n\nexport default AttachmentsLightBox;","import React from 'react';\nimport { Card, CardHeader, CardBody } from '@progress/kendo-react-layout';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { Link } from 'react-router-dom';\nimport AttachmentsLightBox from './AttachmentsLightBox';\nimport { Icon } from '@progress/kendo-react-common';\nimport { Button, ButtonGroup } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Skeleton } from '@progress/kendo-react-indicators';\n\n//Create a type that extends ITicketProps\ninterface IAttachmentsProps extends ITicketProps {\n editMode: boolean;\n}\n\nconst Attachments: React.FC<IAttachmentsProps> = ({ editMode, Is_Loading }) => {\n const [count, setCount] = React.useState(0);\n\n return (\n <Card className={(count == 0 && !editMode) ? 'sidebar-attachments hidden' : 'sidebar-attachments'}>\n <CardHeader>\n <Icon size='large' name='paperclip' /><Link className='nav-link' to='files' title='View attachments'>{count} Attachments</Link>\n\n <Link to='files' className='nav-link ownership-menu-button' title='View attachments'><Button svgIcon={svg.hyperlinkOpenIcon}></Button></Link>\n\n </CardHeader>\n <CardBody>\n {Is_Loading ? <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '50px', marginTop: '2px' }} /> :\n <AttachmentsLightBox showPaging={false} gotAttachments={(a) => setCount(a.length)} />}\n </CardBody>\n </Card>\n );\n};\n\nexport default Attachments;","import React from 'react';\nimport { Card, CardHeader, CardBody, CardFooter } from '@progress/kendo-react-layout';\nimport { Icon } from '@progress/kendo-react-common';\nimport './Stars.scss'\nimport { ITicketProps } from '../../../../../types/Ticket/ITicket';\nimport { Skeleton } from '@progress/kendo-react-indicators';\nimport { Button } from '@progress/kendo-react-buttons'\nimport * as svg from '@progress/kendo-svg-icons';\nimport { TicketApi } from '../../../../../redux/api/TicketApi';\nimport { toast } from 'react-toastify';\n\n//Create a type that extends ITicketProps\ninterface IStarProps extends ITicketProps {\n EditMode: boolean;\n}\n\nconst Stars: React.FC<IStarProps> = ({ ID, Rating, Is_Loading, EditMode }) => {\n const [resendRatingEmail, { isLoading: sendingEmail }] = TicketApi.useResendRatingEmailMutation();\n if (!Rating && !EditMode) return null;\n\n const sendRatingEmail = () => {\n resendRatingEmail(ID).unwrap().then(() => {\n toast.success('Rating email sent successfully');\n });;\n }\n\n return (\n <Card className=\"star-rating timeline\">\n <CardHeader>\n <Icon size='large' name='star-outline' />Rating<i></i>\n </CardHeader>\n <CardBody>\n {Is_Loading ? <Skeleton shape=\"rectangle\" style={{ width: '100%', height: '100px', marginTop: '2px' }} /> :\n <div className={`rating-${Rating?.Rating}-stars`}>\n <div className=\"rating\">\n <span className=\"s1\" title=\"Terrible\">★</span>\n <span className=\"s2\" title=\"Bad\">★</span>\n <span className=\"s3\" title=\"Okay\">★</span>\n <span className=\"s4\" title=\"Good\">★</span>\n <span className=\"s5\" title=\"Great\">★</span>\n </div>\n {Rating?.Notes && <i className=\"rating-notes p-1 d-inline-block\">\"{Rating.Notes}\"</i>}\n </div>}\n </CardBody>\n {Rating?.Rated_Times < 2 && <CardFooter className='flex justify-content-end'>\n {sendingEmail ? <Button imageUrl='./images/ajax-loader-small.gif'>Resend</Button> :\n <Button svgIcon={svg.paperPlaneIcon} className=\"mt-1\" title='Resend rating email' onClick={() => sendRatingEmail()}>Resend</Button>\n }\n </CardFooter>}\n </Card>);\n};\n\nexport default Stars;","import React, { useContext, useEffect, useMemo } from 'react';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport UserInfo from './UserInfo';\nimport Ownership from './Ownership';\nimport TimeLogged from './TimeLogged';\nimport TicketType from './Type';\nimport { IUserProfile } from '../../../../types/User/IUserProfile';\nimport { RevUserContext } from '../../../../context/UserContext';\nimport Timeline from './Timeline';\nimport { Drawer, DrawerContent, TileLayout, TileLayoutItem, TilePosition } from '@progress/kendo-react-layout';\nimport { Button } from '@progress/kendo-react-buttons';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport { Setting } from '../../../../types/Setting/Setting';\nimport { ISetting } from '../../../../types/User/ISetting';\nimport { PartialSpinny } from '../../../Nav/Spinny';\nimport Attachments from './Attachments';\nimport { FileApi } from '../../../../redux/api/FileApi';\nimport { FileType } from '../../../../types/File/FileType';\nimport { isMobile } from 'react-device-detect';\nimport { useReduxDispatch, useReduxSelector } from '../../../../redux/hooks';\nimport { setMenuExpanded } from '../../../../slices/TicketDetailUISlice';\nimport createTheme from '../../../../styles/themes';\nimport Stars from './Rating/Stars';\n\nconst Sidebar: React.FC<ITicketProps> = (props) => {\n const dispatch = useReduxDispatch();\n const { menuExpanded } = useReduxSelector(state => state.ticketDetailsUI);\n const [UpdateContactSetting, { isLoading: isSaving }] = UserApi.useSaveSettingMutation();\n const { data: userState } = UserApi.useGetSettingQuery(Setting.SIDEBAR_STATE);\n const profile = useContext<IUserProfile>(RevUserContext)\n const { data: isFileActiveInternal } = FileApi.useIsActiveQuery(FileType.Call_Action_Internal, { skip: profile?.Features.External_Interface })\n const { data: isFileActiveSSI } = FileApi.useIsActiveQuery(FileType.Call_Action_External, { skip: !profile?.Features.External_Interface })\n const isActive = (profile?.Features.External_Interface && isFileActiveSSI) || (!profile?.Features.External_Interface && isFileActiveInternal);\n const typesActive = (profile?.Features.Call_Types && !profile?.Features.External_Interface) || (profile?.Features.SSI_Call_Type && profile?.Features.External_Interface);\n const handleReposition = e => {\n console.log('reposition', e);\n setData(e.value);\n console.log(e.value);\n };\n\n const defaultState = [{\n col: 1,\n colSpan: 1,\n rowSpan: 1\n }, {\n col: 1,\n colSpan: 1,\n rowSpan: 1\n }, {\n col: 1,\n colSpan: 1,\n rowSpan: 1\n }, {\n col: 1,\n colSpan: 1,\n rowSpan: 1\n }, {\n col: 1,\n colSpan: 1,\n rowSpan: 1\n }, {\n col: 1,\n colSpan: 1,\n rowSpan: 1,\n }, {\n col: 1,\n colSpan: 1,\n rowSpan: 1,\n }];\n const [data, setData] = React.useState<TilePosition[]>(defaultState);\n\n var defaultTileArray = useMemo(() => {\n if (userState?.String_Value) {\n var tileArray = JSON.parse(userState?.String_Value) as TilePosition[];\n //Add any missing tiles if the UI got updated\n if (tileArray.length < defaultState.length) {\n tileArray = [...tileArray, ...defaultState.slice(tileArray.length)];\n }\n return tileArray;\n }\n }, [userState]);\n\n useEffect(() => {\n if (defaultTileArray) {\n try {\n setData(defaultTileArray);\n } catch (error) {\n console.error('Error parsing sidebar state', error);\n }\n }\n }, [defaultTileArray]);\n\n const [editMode, setEditMode] = React.useState(false);\n\n const tiles = [{\n header: \"User Info\",\n body: <UserInfo {...props} />,\n resizable: false,\n className: 'tile'\n }, {\n header: undefined,\n body: <Stars {...props} EditMode={editMode} />,\n resizable: false\n }, {\n header: undefined,\n body: <Timeline {...props} />,\n resizable: false\n }, {\n header: \"Ownership\",\n body:\n <Ownership {...props} />,\n resizable: false\n }, isActive && {\n header: \"Attachments\",\n body:\n <Attachments {...props} editMode={editMode} />,\n resizable: false\n }, {\n header: \"Time logged\",\n body: <TimeLogged {...props} />,\n resizable: false\n }, typesActive && {\n header: \"Type\",\n body:\n <TicketType {...props} />,\n resizable: false\n }].filter(Boolean) as TileLayoutItem[];\n\n\n const onSave = (state) => {\n const saveData = {\n Setting_Id: Setting.SIDEBAR_STATE,\n String_Value: state ? JSON.stringify(state) : null\n } as ISetting\n\n UpdateContactSetting(saveData).then(() => {\n ;\n\n setEditMode(false);\n });\n }\n\n const resetLayout = () => {\n if (!window.confirm('Are you sure you want to reset the sidebar layout?')) return;\n\n //console.log('resetting layout', defaultState, data);\n setData(() => defaultState);\n //console.log('resetting layout 1', defaultState, data);\n //saveChanges\n onSave(defaultState);\n }\n\n const onCancel = () => {\n setData(defaultTileArray);\n setEditMode(false);\n }\n\n const handleMenuSelect = ev => {\n //console.log('handleMenuSelect', ev);\n dispatch(setMenuExpanded(false))\n };\n\n const userCanEdit = !(profile?.Features.External_Interface) && !isMobile\n const pageThemeCSS = createTheme(profile.Body_Hex_Color, profile?.Body_Style, profile?.Body_Image_Url);\n const renderSideBarItems = () => {\n return (\n <div style={pageThemeCSS} className={`sidebar-items col-md-3 position-relative justify-content-end pr-0 sidebar d-lg-flex ${editMode ? 'sidebar-edit' : ''}`}>\n {isMobile && <div className='d-flex justify-content-end mb-2 mr-2'><Button onClick={() => dispatch(setMenuExpanded(false))} svgIcon={svg.xIcon} className='ms-2' size='medium' fillMode='solid'></Button></div>}\n <div>\n {isSaving && <PartialSpinny />}\n {editMode ? <TileLayout rowHeight={'auto'} columns={1} positions={data} gap={{\n rows: 10,\n columns: 10\n }} items={tiles} onReposition={handleReposition} />\n\n :\n tiles.sort((a, b) => {\n return data[tiles.indexOf(a)]?.order - data[tiles.indexOf(b)]?.order\n }).map((t, i) => <div key={i}>{t.body}</div>)\n }\n {userCanEdit && <div className='d-flex justify-content-center mt-2 mb-4'>\n {!editMode ? <Button svgIcon={svg.gapRowIcon} className='edit-layout-button k-primary' size='small' fillMode='solid' onClick={() => setEditMode(!editMode)} title='Edit layout'>\n {editMode ? 'Save' : ''}\n </Button>\n :\n\n <><Button svgIcon={svg.saveIcon} className='edit-layout-button k-primary' size='small' fillMode='solid' onClick={() => onSave(data)} title='Save'>\n Save\n </Button>\n <Button svgIcon={svg.cancelIcon} className='ms-2' size='small' fillMode='solid' onClick={onCancel} >\n Cancel\n </Button><Button svgIcon={svg.undoIcon} className='ms-2' size='small' fillMode='solid' onClick={resetLayout} title='Reset layout' >\n Reset\n </Button></>}\n </div>}\n {/* userState={JSON.stringify(userState?.String_Value)} */}\n {/* data={JSON.stringify(data)} */}\n </div>\n </div>\n );\n }\n\n\n\n return (isMobile ?\n <Drawer expanded={menuExpanded || !isMobile} position={'start'} mode={isMobile ? 'overlay' : 'push'} mini={false} items={[{}]} item={renderSideBarItems} onOverlayClick={handleMenuSelect} >\n <DrawerContent>\n {props.children}\n </DrawerContent>\n </Drawer >\n : <>{renderSideBarItems()}{props.children}</>)\n\n};\n\nexport default Sidebar;","import React, { useMemo } from 'react';\nimport { Chart, ChartSeries, ChartSeriesItem, ChartCategoryAxis, ChartCategoryAxisItem, ChartValueAxis, ChartValueAxisItem, ChartTooltip, ChartTitle, ChartCategoryAxisTitle, ChartSeriesLabels } from '@progress/kendo-react-charts';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { Link } from 'react-router-dom';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { useReduxSelector } from '../../../../../../redux/hooks';\nimport { IAction } from '../../../../../../types/Action/IAction';\nimport { Avatar } from '@progress/kendo-react-layout';\nimport { SystemApi } from '../../../../../../redux/api/SystemApi';\n\nconst TicketStoryLine3: React.FC<ITicketProps> = (ticket) => {\n const filter = useReduxSelector(state => state.filter);\n const { data: calendar, error, isFetching: fetch } = SystemApi.useGetWorkHoursQuery({ slaId: ticket?.SLA_Id, start: ticket.Open_Dt, end: ((ticket.Open_Status === 0 && ticket.Close_Dt) || null) });\n const { data: actions, refetch, isFetching } = TicketApi.useGetActionsQuery({ ticketId: Number(ticket?.ID), take: 100, skip: 0, ...filter }, { skip: ticket?.ID === undefined });\n const { data: stateHistory } = TicketApi.useGetStateHistoryQuery((ticket?.ID));\n const [view, setView] = React.useState({ text: 'Daily', value: 0 });\n\n const getKeyFromDate = (date: Date) => {\n var date = new Date(date + 'Z');\n //Hourly\n if (view?.value == 1) {\n date.setMinutes(0, 0, 0);\n return date.toLocaleDateString() + ' ' + date.toLocaleString([], { hour: '2-digit', minute: '2-digit' });\n }\n return new Date(date + 'Z').toLocaleDateString();\n }\n\n //console.warn('DUDE', calendar, error, fetch);\n\n const chartData = calendar?.reduce((previousActions: IChartData[], cal) => {\n const date = getKeyFromDate(cal.Day);\n //const previousDate = previousAction.date;\n var state = stateHistory?.slice().sort((a, b) => new Date(b?.Created_Dt).getTime() - new Date(a?.Created_Dt).getTime())\n var lastState = state.find(s => new Date(s.Created_Dt + 'Z') <= new Date(date));\n var theColor = '';\n var stateChangeAction = null as IAction\n if (lastState) {\n if (lastState.New_State === 'Closed' || lastState.New_State?.indexOf('Late') > -1) {\n theColor = '#ff0000';//Closed (Red)\n } else if (lastState.New_State?.indexOf('Risk') > -1) {\n theColor = '#ecbe4e'; //Yello\n } else if (lastState.New_State === 'Current') {\n theColor = '#697cc1';//Blue\n } else if (lastState.New_State === 'New') {\n theColor = '#73a913';//Green\n }\n stateChangeAction = { Action_Type_Name: 'State Change', Action_Notes: 'Ticket state changed to ' + lastState.New_State, Action_Dt: new Date(lastState.Created_Dt), Is_System_Action: true } as IAction;\n } else {\n theColor = '#73a913';//Green\n }\n\n //Any actions that happened on this day\n var dayActions = actions?.Items?.filter(a => new Date(a.Action_Dt + 'Z').toLocaleDateString() === date);\n\n //Any state changes that happened on this day\n var stateChanges = stateHistory?.filter(s => new Date(s.Created_Dt + 'Z').toLocaleDateString() === date).map(sh => { return { Action_Dt: new Date(sh.Created_Dt), Action_Notes: 'Ticket state changed to ' + sh.New_State, Is_System_Action: true } as IAction });\n dayActions = dayActions.concat(stateChanges);\n //if (stateChangeAction)\n //dayActions = dayActions.concat(stateChangeAction);\n\n var newDayAction = { date: date, daysOpen: 1, actions: dayActions, color: theColor } as IChartData;\n\n if (previousActions?.find(p => p.date === date))\n previousActions.find(p => p.date === date).actions.push({} as IAction)\n else {\n if (previousActions) {\n //previousActions.push(newDayAction);\n\n //If there are no actions just increase the daysOpen by 1 day\n if (previousActions.length && !previousActions[previousActions.length - 1]?.actions?.length\n && (newDayAction.actions?.length === 0)) {\n previousActions[previousActions.length - 1].daysOpen++;\n previousActions[previousActions.length - 1].date = date;\n } else {\n previousActions.push(newDayAction);\n }\n }\n else\n previousActions = [newDayAction];\n }\n\n //console.warn('previousActions', previousActions)\n return previousActions;\n }, [] as IChartData[]);\n\n\n const chartData2 = stateHistory && actions?.Items?.slice().sort((a, b) => new Date(a.Action_Dt).getTime() - new Date(b.Action_Dt).getTime()).filter(a => a.ID).reduce((previousActions: IChartData[], action) => {\n //const date = new Date(action.Action_Dt + 'Z').toDateString();\n const date = getKeyFromDate(action.Action_Dt);\n //const previousDate = previousAction.date;\n var state = stateHistory?.slice().sort((a, b) => new Date(b?.Created_Dt).getTime() - new Date(a?.Created_Dt).getTime())\n var lastState = state.find(s => new Date(s.Created_Dt + 'Z') <= new Date(date));\n var theColor = '';\n if (lastState) {\n if (lastState.New_State === 'Closed' || lastState.New_State?.indexOf('Late') > -1) {\n theColor = '#ff0000';//Closed (Red)\n } else if (lastState.New_State?.indexOf('Risk') > -1) {\n theColor = '#ecbe4e'; //Yello\n } else if (lastState.New_State === 'Current') {\n theColor = '#697cc1';//Blue\n } else if (lastState.New_State === 'New') {\n theColor = '#73a913';//Green\n }\n } else {\n theColor = '#73a913';//Green\n }\n if (previousActions?.find(p => p.date === date))\n previousActions.find(p => p.date === date).actions.push(action)\n else {\n var newDayAction = { date: date, daysOpen: 1, actions: [action], color: theColor } as IChartData;\n if (previousActions)\n previousActions.push(newDayAction);\n else\n previousActions = [newDayAction];\n }\n\n return previousActions;\n }, [] as IChartData[]);\n\n //Add ticket created and closed events\n if (chartData) {\n var key = getKeyFromDate(new Date(ticket.Open_Dt))\n var createdAction = [{ Action_Type_Name: 'Created', Action_Notes: 'Created', Action_Dt: new Date(ticket.Open_Dt), Is_System_Action: true }] as IAction[];\n //insert at the begining\n chartData.unshift({ date: key, label: 'Created', daysOpen: 1, actions: [], color: '#73a913' });\n }\n\n const formatAction = (action: IAction) => {\n return action.Is_System_Action\n ? <div className='p-2'> <p><Avatar ><img src='images/Host_Images/System_Action/Gears.png'></img></Avatar>{action.Staff_Name} {new Date(action.Action_Dt + 'Z').toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} - <div className='d-inline' dangerouslySetInnerHTML={{ __html: action.HTML_Notes || action.Action_Notes }}></div></p></div>\n : <div className='p-2'><p><Avatar ><img src={action.Profile_Image_Url}></img></Avatar>{action.Staff_Name} {new Date(action.Action_Dt + 'Z').toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} - <div className='d-inline' dangerouslySetInnerHTML={{ __html: action.HTML_Notes || action.Action_Notes }}></div></p></div>\n }\n\n //Calculate the label for the chart series\n chartData?.forEach((item, index) => {\n if (!item.label) {\n item.label = item.actions?.length ? (item.actions?.length.toString() + ' action/s') : '+' + item.daysOpen + ' days';\n\n //show the status change if thats the only action\n if (item.actions?.length === 1 && item.actions[0].Action_Type_Name === 'State Change')\n item.label = item.actions[0].Action_Notes;\n }\n });\n\n\n return (<>\n {/* stateHistory = {stateHistory?.map((state, index) => (<div>{state.Created_Dt} - {state.New_State}</div>))} */}\n {/* chartData = {JSON.stringify(chartData)} */}\n {/* <div>calendar = {calendar?.length}</div>\n <div>stateHistory = {stateHistory.map(s => (<>{s.Created_Dt} - {s.New_State}</>))}</div> */}\n <Chart className='w-100 mw-400px' style={{ height: '100vh' }} zoomable={false}>\n <ChartValueAxis>\n <ChartValueAxisItem title={{ text: 'Days Open' }} />\n </ChartValueAxis>\n <ChartSeries>\n {chartData?.map((item, index) => (\n <ChartSeriesItem type=\"column\" stack={{ type: 'normal' }} data={[item]} noteTextField='days' field='daysOpen' color={item.color} >\n <ChartSeriesLabels content={() => item.label} position='insideEnd' background='none' color='white' font='13px' />\n </ChartSeriesItem>\n ))}\n\n </ChartSeries>\n <ChartTooltip render={props => (\n <div>\n <strong>{props.point.dataItem.date}</strong>: {props.point.value} days\n {props.point.dataItem.actions?.map((action, index) => (\n <div>{new Date(action.Action_Dt).toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit' })}:\n {action.Staff_Name ? <Link className='nav-link' key={index} to={`/ticket/${ticket.ID}/action/${action.ID}`}> Action by {action.Staff_Name}</Link>\n : <div className='nav-link' key={index}>{action.Action_Notes}</div>}\n </div>\n ))}\n\n </div>\n )} />\n </Chart> </>\n );\n};\n\nexport default TicketStoryLine3;\n\nexport interface IChartData { date: string, label: string, daysOpen: number, actions: IAction[], color: string, showActions?: boolean }","import React from 'react';\nimport { Notification } from \"@progress/kendo-react-notification\";\ninterface TooManyRecordsBannerProps {\n recordCount: number;\n}\n\nconst TooManyRecordsBanner: React.FC<TooManyRecordsBannerProps> = ({ recordCount }) => {\n if (recordCount <= 100) {\n return null;\n }\n\n return (\n <Notification key='1'\n type={{\n style: \"info\",\n icon: true,\n }}\n style={{ color: 'black', border: 'none', boxShadow: 'none', borderRadius: '0px', padding: '8px', width: '100%', textAlign: 'left', fontSize: '13px', verticalAlign: 'top' }}\n closable={false}>\n Only showing the last 100 records.\n </Notification>\n );\n};\n\nexport default TooManyRecordsBanner;","import React from 'react';\nimport { VerticalTimeline, VerticalTimelineElement } from 'react-vertical-timeline-component';\nimport 'react-vertical-timeline-component/style.min.css';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { useReduxSelector } from '../../../../../../redux/hooks';\nimport { SvgIcon } from \"@progress/kendo-react-common\";\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Avatar, Card, CardBody, CardHeader, PanelBar, PanelBarItem } from '@progress/kendo-react-layout';\nimport FilterBanner from '../Filter/FilterBanner';\nimport { IAction } from '../../../../../../types/Action/IAction';\nimport './TicketStoryLine.scss';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { Setting } from '../../../../../../types/Setting/Setting';\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\nimport TicketStoryLine3, { IChartData } from './TicketStoryLine3';\nimport { SystemApi } from '../../../../../../redux/api/SystemApi';\nimport TooManyRecordsBanner from './TooManyRecordsBanner';\nimport { Tooltip } from '@progress/kendo-react-tooltip';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\n\nconst TicketStoryLine2: React.FC<ITicketProps> = (ticket) => {\n const { data: notesColorSetting } = UserApi.useGetSettingQuery(Setting.END_USER_NOTES_COLOR);\n const filter = useReduxSelector(state => state.filter);\n const { data: userProfile } = TicketApi.useGetUserProfileQuery();\n const startDate = new Date(ticket?.Open_Dt).toISOString().split('T')[0];\n const { data: calendar, isFetching: fetchingDays } = SystemApi.useGetWorkHoursQuery({ slaId: ticket?.SLA_Id, start: startDate, end: ((ticket.Open_Status === 0 && ticket.Close_Dt) || null) });\n const { data: actions, refetch, isFetching } = TicketApi.useGetActionsQuery({ ticketId: Number(ticket?.ID), take: 100, skip: 0, ...filter }, { skip: ticket?.ID === undefined });\n const { data: stateHistory, isFetching: fetchingHistory } = TicketApi.useGetStateHistoryQuery((ticket?.ID));\n const [view, setView] = React.useState({ text: 'Daily', value: 0 });\n\n const getKeyFromDate = (_date: Date, isZulu: boolean) => {\n var date = new Date(_date.toISOString().replace('Z', '') + (isZulu ? 'Z' : ''));\n console.log('getKeyFromDate', date.toLocaleString());\n\n //Hourly\n if (view?.value === 1) {\n date.setMinutes(0, 0, 0);\n return date.toLocaleDateString(\"en-US\") + ' ' + date.toLocaleString([], { hour: '2-digit', minute: '2-digit' });\n }\n return date.toLocaleDateString(\"en-US\");\n }\n\n const getColorFromState = (stata: string) => {\n let iconColor = '';\n if (stata) {\n if (stata === 'Closed' || stata.indexOf('Late') > -1) {\n iconColor = '#ff0000';//Closed (Red)\n } else if (stata.indexOf('Risk') > -1) {\n iconColor = '#ecbe4e'; //Yello\n } else if (stata === 'Current') {\n iconColor = '#697cc1';//Blue\n } else if (stata === 'New') {\n iconColor = '#73a913';//Green\n }\n } else {\n iconColor = '#73a913';//Green\n }\n return iconColor;\n }\n\n const groupedActionsByDay = actions?.Items.filter(a => a.ID).reduce((acc, action) => {\n //const date = new Date(action.Action_Dt + 'Z').toDateString();\n const date = getKeyFromDate(new Date(action.Action_Dt), true);\n if (!acc[date] || !acc[date].actions) {\n acc[date] = { actions: [] } as IChartData;\n }\n acc[date].actions.push({ ...action, Action_Dt: new Date(action.Action_Dt + 'Z') });\n return acc;\n }, {} as { [key: string]: IChartData });\n\n\n\n //Add ticket created and closed events\n if (groupedActionsByDay) {\n var key = getKeyFromDate(new Date(ticket.Open_Dt + 'Z'), false)\n //console.log('Created', new Date(ticket.Open_Dt),ticket.Open_Dt,key);\n var createdAction = [{ Action_Notes: 'Created', Action_Type_Name: 'Created', Action_Dt: new Date(ticket.Open_Dt + 'Z'), Is_System_Action: true } as IAction];\n (!groupedActionsByDay[key])\n ? groupedActionsByDay[key] = { actions: createdAction, showActions: false } as IChartData\n : groupedActionsByDay[key]?.actions.push(createdAction[0]);\n\n //if(ticket.Close_Dt) { groupedActionsByDay[ticket.Open_Dt] = [{ Action_Notes: 'Ticket Closed', Action_Dt: ticket.Close_Dt, Staff_Name: ticket.Closed_By, Is_System_Action: true }];}\n\n //Add State Changes\n if (stateHistory)\n stateHistory?.filter(s => s.Old_State || s.New_State !== 'New').map((state) => {\n var key = getKeyFromDate(new Date(state.Created_Dt), true);\n var newDayAction = [{ Action_Notes: 'State Changed to ' + state.New_State, Action_Dt: new Date(state.Created_Dt + 'Z'), Staff_Name: '', Is_System_Action: true }] as IAction[]\n if (!groupedActionsByDay[key])\n groupedActionsByDay[key] = { actions: newDayAction, color: getColorFromState(state?.New_State), showActions: false } as IChartData\n else {\n groupedActionsByDay[key].actions.push(newDayAction[0])\n groupedActionsByDay[key].showActions = true\n }\n\n });\n }\n\n const formatAction = (action: IAction) => {\n var time = new Date(action.Action_Dt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n //console.log('formatAction',new Date(action.Action_Dt),action.Action_Dt,time,action)\n return action.Is_System_Action\n ? <div className='p-2'><Avatar ><img src='images/Host_Images/System_Action/Gears.png'></img></Avatar>{time} {action.Staff_Name} - <div className='d-inline' dangerouslySetInnerHTML={{ __html: action.HTML_Notes || action.Action_Notes }}></div></div>\n : <div className='p-2'><Avatar ><img src={action.Profile_Image_Url} height={50} width={50}></img></Avatar> {time} - {action.Staff_Name}: <div className='d-inline' dangerouslySetInnerHTML={{ __html: action.HTML_Notes || action.Action_Notes }}></div></div>\n }\n\n\n\n\n //Add Closed\n var closed = new Date(ticket?.Close_Dt + 'Z');\n if (ticket && (closed instanceof Date && !isNaN(closed.valueOf())) && groupedActionsByDay) {\n const key = getKeyFromDate(new Date(ticket?.Close_Dt + 'Z'), false);\n //console.log('closed', closed, key);\n if (groupedActionsByDay && !groupedActionsByDay[key]) {\n groupedActionsByDay[key] = { showActions: false, color: getColorFromState(ticket?.NextSLAMilestoneName), actions: [{ Action_Dt: new Date(ticket?.Close_Dt), Action_Type_Name: 'Closed', Is_System_Action: true }] } as IChartData;\n } else {\n if (!groupedActionsByDay[key].actions) { groupedActionsByDay[key].actions = [] as IAction[]; }\n groupedActionsByDay[key].actions.push({ Action_Dt: new Date(ticket?.Close_Dt + 'Z'), Action_Type_Name: 'Closed', Action_Notes: 'Closed', Is_System_Action: true } as IAction);\n }\n } else {\n //Add NOW\n var now = new Date();//new Date().toISOString().replace('Z', ''));//new Date();\n //round to the nearest minute\n now.setSeconds(0, 0);\n const key = getKeyFromDate(now, false);\n\n if (groupedActionsByDay && !groupedActionsByDay[key]) {\n groupedActionsByDay[key] = { showActions: false, color: getColorFromState(ticket?.NextSLAMilestoneName), actions: [{ Action_Dt: now, Action_Type_Name: 'Now', Is_System_Action: true }] } as IChartData;\n }\n\n //console.log('NOW', now, groupedActionsByDay);\n }\n\n\n\n //Add calendar days in between all the action days so we can see how long ago the last action was\n if (calendar) {\n groupedActionsByDay && Object.keys(groupedActionsByDay).map((key) => {\n //Find the number of calendar days between the last action and this action\n var keyDate = new Date(key);\n\n var fullDays = calendar.filter(c => new Date(c.Begin_datetime) <= new Date(key))\n var partialHours = calendar.filter(c => new Date(c.End_datetime) > new Date(key) && new Date(c.End_datetime) > new Date(key))\n\n //console.log('daysOpen',fullDays,partialHours,keyDate);\n\n var daysOpen = view?.value === 0 ? fullDays.length : Math.round(fullDays.map(c => {\n //The day start date is either the ticket open date or the calendar start date\n var dayStart = new Date(Math.max(new Date(c.Begin_datetime + 'Z').getTime(), new Date(ticket.Open_Dt + 'Z').getTime()))\n console.warn('Begin_datetime', new Date(c.Begin_datetime + 'Z').toISOString(), 'dayStart', dayStart.toISOString(), (keyDate.getTime() - dayStart.getTime()) / 1000 / 60, 'keyDate', keyDate.toISOString())\n var dayEnd = new Date(c.End_datetime + 'Z')\n //console.warn('keyDate', dayEnd, keyDate, dayEnd > keyDate, (dayEnd.getTime() - keyDate.getTime()) / 1000 / 60);\n //Only add partial hours if we are say half way through the day\n if (dayEnd > keyDate)\n return Math.max(0, (keyDate.getTime() - dayStart.getTime()) / 1000 / 60);\n else\n return c.Work_mins\n }\n ).reduce((a, b) => a + b, 0) / 60);\n\n groupedActionsByDay[key].daysOpen = daysOpen;\n\n });\n // calendar.map((cal) => {\n // var key = getKeyFromDate(cal.Day)\n // if (!groupedActionsByDay[key]) {\n // groupedActionsByDay[key] = { actions: [] } as IChartData;\n // }\n // });\n }\n\n\n\n\n const storyData = groupedActionsByDay && Object.keys(groupedActionsByDay).sort((a, b) => new Date(b).getTime() - new Date(a).getTime()).map((day) => {\n var icon = <span><Tooltip anchorElement='pointer' position=\"top\" content={() => day}><SvgIcon className='icon' icon={svg.stickyNoteIcon} /></Tooltip></span>\n const actionCount = groupedActionsByDay[day].actions?.length;\n const isSystem = actionCount === 1 && groupedActionsByDay[day].actions[0].Is_System_Action;\n const isSingleEndUserAction = actionCount === 1 && groupedActionsByDay[day].actions[0].Is_Client_Role;\n var headerText = actionCount > 0 ? (actionCount > 1 ? `+${actionCount} action` : `+${actionCount} action`) : groupedActionsByDay[day].label;\n if (isSingleEndUserAction) { headerText = `Client action` }\n var header = <div style={{ background: isSingleEndUserAction && notesColorSetting?.Bool_Value && notesColorSetting?.String_Value ? notesColorSetting?.String_Value : '' }}>{headerText}</div>;\n var showActions = groupedActionsByDay[day].showActions !== false; //undefined or true\n if (isSystem) {\n var actionDate = new Date(groupedActionsByDay[day].actions[0].Action_Dt);// + 'Z');\n header = <>{actionDate.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })} - {groupedActionsByDay[day].actions[0].Action_Type_Name || groupedActionsByDay[day].actions[0].Action_Notes}</>;\n icon = <SvgIcon className='icon' icon={svg.gearIcon} xlinkTitle='System action' />;\n }\n let iconColor = groupedActionsByDay[day].color;//New (Green)\n let dayOrMinsLabel = view?.value === 0 ? 'day' : 'hour';\n\n //Find what the last state was on this day\n if (stateHistory && !iconColor) {\n var thisDay = new Date(day);\n var state = stateHistory.slice().sort((a, b) => new Date(b?.Created_Dt).getTime() - new Date(a?.Created_Dt).getTime())\n var lastState = state.find(s => new Date(s.Created_Dt + 'Z') <= thisDay);\n iconColor = getColorFromState(lastState?.New_State);\n\n }\n\n //console.log('groupedActionsByDay',groupedActionsByDay)\n\n return (\n <>\n <VerticalTimelineElement\n className=\"vertical-timeline-element--work\"\n contentStyle={{}}\n contentArrowStyle={{}}\n date={groupedActionsByDay[day].daysOpen + (groupedActionsByDay[day].daysOpen === 1 ? ` ${dayOrMinsLabel} open` : ` ${dayOrMinsLabel}s open`)}\n iconStyle={{ background: iconColor, color: '#fff' }}\n icon={icon} >\n {!showActions && header && <div className='header' title={day}>{header}</div>}\n {showActions && <PanelBar>\n <PanelBarItem id=\"actions\" title={header}>\n {groupedActionsByDay[day].actions.slice().sort((a, b) => new Date(b.Action_Dt).getTime() - new Date(a.Action_Dt).getTime()).map(action => {\n return formatAction(action);\n })}\n </PanelBarItem>\n </PanelBar>}\n </VerticalTimelineElement >\n </>)\n });\n\n if (fetchingDays || isFetching || fetchingHistory || ticket?.Is_Loading) return (<PartialSpinny />)\n\n return (\n <div className='storyline'>\n <Card>\n <CardHeader className='action-header flex-wrap' style={{ color: '#fff', background: userProfile?.Nav_Hex_Color }}>\n <div className='col-10'>\n <SvgIcon icon={svg.bookIcon} size='large' /> Storyline\n </div>\n <div className='col-2 d-flex flex-grow align-items-end'>\n {/* Daily or hourly view */}\n <DropDownList size='medium'\n data={[{ text: 'Daily', value: 0 }, { text: 'Hourly', value: 1 }]}\n textField=\"text\"\n dataItemKey=\"value\"\n value={view}\n onChange={(e) => {\n setView(e.target.value);\n console.log('onChange', e.target.value)\n }} />\n </div>\n </CardHeader>\n <CardBody>\n <FilterBanner />\n <TooManyRecordsBanner recordCount={actions?.RowCount} />\n {view?.value === 2 ? <TicketStoryLine3 {...ticket} /> :\n <VerticalTimeline animate={false} >\n {storyData}\n </VerticalTimeline>}\n </CardBody>\n </Card>\n\n\n </div>\n );\n};\n\nexport default TicketStoryLine2;","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport { Icon } from '@progress/kendo-react-common';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport { SvgIcon } from \"@progress/kendo-react-common\";\nimport * as svg from '@progress/kendo-svg-icons';\nimport { useGetTenantQuery } from '../../../../redux/api/BaseApi';\nimport { ITicketProps } from '../../../../types/Ticket/ITicket';\nimport { isMobile } from 'react-device-detect';\nimport { Button } from '@progress/kendo-react-buttons';\n\nconst LegacyBanner: React.FC<ITicketProps> = (props) => {\n const { data: tenant } = useGetTenantQuery();\n const { data: profile } = UserApi.useGetUserProfileQuery();\n\n if (isMobile) return null;\n\n return (\n <div className='auto-status-banner mt-1 flex justify-content-between align-items-center' >\n <div className='flex align-items-center'><SvgIcon icon={svg.questionCircleIcon} style={{ marginRight: '8px' }} />\n Something not working or missing functionality? <u><Link className='nav-link' to={`/deeplink/?url=/calls/callhistory.aspx%3Fcall_id=${props.ID}%26from=newdetails`} rel=\"noopener\">Go to the legacy details page.</Link></u>\n </div>\n <div><Link to={`/deeplink?url=/Contacts/ContactInfo.aspx%3FOrigin=Details%26Action=NavSettings%26Contact_Id=${profile.Id}`}><Button fillMode='flat' svgIcon={svg.gearIcon} title='Go to your display settings'></Button></Link> </div>\n </div >\n );\n};\n\nexport default LegacyBanner;","import React, { useRef } from 'react';\nimport { useReduxSelector } from '../../../../redux/hooks';\n\nconst ActionExpander: React.FC = () => {\n const actionExpanded = useReduxSelector(state => state.ticketDetailsUI.actionExpanded);\n const hiddenLink = useRef<HTMLAnchorElement>(null);\n const hiddenLinkEmail = useRef<HTMLAnchorElement>(null);\n\n //Toggle the add action pane if the redux state changes\n const [showAction, setShowAction] = React.useState(0);\n React.useEffect(() => {\n //Action expanded\n if (showAction !== actionExpanded) {\n setShowAction(actionExpanded);\n if (showAction === 1 || actionExpanded === 1)\n hiddenLink.current.click();\n if (showAction === 2 || actionExpanded === 2)\n hiddenLinkEmail.current.click();\n }\n\n }, [actionExpanded]);\n\n return (<>\n <a ref={hiddenLink} className=\"hidden\" data-bs-toggle=\"collapse\" href=\"#collapseAction\">\n </a>\n <a ref={hiddenLinkEmail} className=\"hidden\" data-bs-toggle=\"collapse\" href=\"#collapseEmail\">\n </a>\n </>\n );\n};\n\nexport default ActionExpander;","import React, { useState } from 'react';\nimport { Tab, Tabs } from 'react-bootstrap';\nimport { setView, ViewName } from '../../../../slices/TicketDetailUISlice';\nimport { useReduxDispatch, useReduxSelector } from '../../../../redux/hooks';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { UserApi } from '../../../../redux/api/UserApi';\n\n\nconst ActionTabs: React.FC = () => {\n //const [activeKey, setActiveKey] = useState<string>('note');\n const dispatch = useReduxDispatch();\n const selectedView = useReduxSelector(state => state.ticketDetailsUI.viewName);\n\n const handleSelect = (view: ViewName) => {\n dispatch(setView(view));\n };\n\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n if (userProfile?.Features.External_Interface) return <div className='mt-2'></div>;\n\n return (\n <Tabs\n id=\"action-tabs\"\n activeKey={selectedView}\n onSelect={(k) => handleSelect((k || 'notes') as ViewName)}\n className=\"action-tabs mt-2 justify-content-end flex\"\n >\n <Tab eventKey=\"notes\" title={<><SvgIcon icon={svg.stickyNoteIcon} className='m-1' />Notes</>}>\n </Tab>\n <Tab eventKey=\"timeline\" title={<><img className='story-line' src='./images/toolbar/storyline.png' />Storyline</>}>\n </Tab>\n <Tab className='ai-tab' eventKey=\"summary\" title={<><SvgIcon icon={svg.sparklesIcon} className='m-1' />AI Summary</>}>\n </Tab>\n </Tabs>\n );\n};\n\nexport default ActionTabs;","import React, { useState } from 'react';\nimport { Window, WindowActionsBar } from '@progress/kendo-react-dialogs';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { IAction, IActionDTO } from '../../../../types/Action/IAction';\nimport { toast } from 'react-toastify';\nimport { PartialSpinny } from '../../../Nav/Spinny';\n\nconst DeleteAction: React.FC = () => {\n const { actionId: id, ticketId } = useParams();\n const navigate = useNavigate();\n const { data: profile } = UserApi.useGetUserProfileQuery();\n //Get existing action\n const { data: action, isFetching: fetchingAction } = TicketApi.useGetActionQuery({ actionId: parseInt(id), ticketId: parseInt(ticketId) }, { skip: !id });\n const [deleteAction, { isLoading: deleting }] = TicketApi.useDeleteActionMutation();\n\n const handleClose = () => {\n navigate(-1);\n };\n\n const handleConfirm = () => {\n if (!action) return;\n if (!canDelete(action)) { alert('You do not have permissions to delete this action'); return false; }\n\n var actionToDelete = { ID: action.ID, Call_Id: action.Call_Id } as IActionDTO;\n\n //Delete via API\n deleteAction(actionToDelete).unwrap().then(() => {\n toast.success('Action Deleted');\n //Go Back\n navigate(-1);\n });\n };\n\n //Decides if the user can edit this action\n const canDelete = (action: IAction) => {\n //temporarily enabled for testing\n //return true;\n\n if (!action || action?.Is_System_Action) return false;\n if (profile?.Features.Delete_Any_Action) return true;\n if (profile?.Features.Delete_My_Actions && action.Staff_Id == profile?.Id) return true;\n return false;\n }\n\n\n return (\n <>\n <Window modal={true} minimizeButton={() => null} maximizeButton={() => null} className='cool-window' title=\"Confirm Delete\" onClose={handleClose} width={350} height={160}>\n {deleting && <PartialSpinny />}\n {fetchingAction ? <div>Loading...</div> :\n <>\n <div>\n {canDelete(action) ?\n <p>Are you sure you want to delete this {profile?.Phrases.Action}?</p>\n : <p>You do not have permission to delete this {profile?.Phrases.Action}!</p>}\n </div>\n <WindowActionsBar layout='center'>\n {canDelete(action) &&\n <Button autoFocus={true} onClick={handleConfirm} svgIcon={svg.trashIcon} style={{ width: '150px', color: '#fff', background: profile?.Nav_Hex_Color }}>\n Delete {profile?.Phrases.Action}\n </Button>}\n <Button onClick={handleClose}>Cancel</Button>\n </WindowActionsBar></>\n }\n </Window></>\n );\n};\n\nexport default DeleteAction;","import React from 'react';\nimport { Window, WindowActionsBar, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport AttachmentsLightBox from './AttachmentsLightBox';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { UserApi } from '../../../../redux/api/UserApi';\n\nconst AttachmentsPopup: React.FC = () => {\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [fileCount, setFileCount] = React.useState(0);\n\n return (\n <Window resizable={false} modal={true} className='cool-window fixed-window' initialHeight={700} initialWidth={Math.min(800, window.innerWidth - 10)} maximizeButton={() => null}\n minimizeButton={() => null} title={<><SvgIcon size='large' icon={svg.paperclipIcon} className='mr-2' ></SvgIcon>{fileCount} Attachment{fileCount === 1 ? '' : 's'}</>} onClose={() => navigate(-1)}>\n <AttachmentsLightBox gotAttachments={(files) => setFileCount(files?.length)} showSearch={true} showInfo={true} showPaging={true} />\n <WindowActionsBar >\n <Button style={{ marginTop: '20px', color: '#fff', backgroundColor: userProfile?.Nav_Hex_Color }} size='large' onClick={(e) => navigate(-1)}>Close</Button>\n </WindowActionsBar>\n </Window>\n );\n};\n\nexport default AttachmentsPopup;","import React, { useEffect } from 'react';\nimport { Window, WindowActionsBar } from '@progress/kendo-react-dialogs';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport AddAction from '../../AddAction';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { Field, Form, FormElement } from '@progress/kendo-react-form';\nimport Type from '../../Type';\nimport { useReduxDispatch, useReduxSelector } from '../../../../../../redux/hooks';\nimport validateCustomFields from '../../../../../CustomForms/Validators/CustomFieldValidator';\nimport { OwnershipOptions } from './Ownership';\nimport CustomFormControl from '../../../../../CustomForms/CustomForm';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport { ISetStatusProps } from '../../../../../../types/Ticket/Status/ISetStatusProps';\nimport { Card, CardBody } from '@progress/kendo-react-layout';\nimport { setField, setForm } from '../../../../../../slices/TicketDetailSlice';\nimport { IActionDTO } from '../../../../../../types/Action/IAction';\nimport { useGetHostConfigQuery } from '../../../../../../redux/api/AccountApi';\nimport useRedirectOnClose from '../../../../../../hooks/useRedirectOnClose';\n\nconst ValidationPopup: React.FC = () => {\n const actionState = useReduxSelector(state => state.actionDetails.action);\n const navigate = useNavigate();\n const { ticketId, statusId } = useParams();\n const { data: allStatuses } = TicketApi.useGetStatusesQuery();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const { data: ticket } = TicketApi.useGetTicketDetailsQuery({ ticketId: Number(ticketId) });\n const { data: ticketForm } = TicketApi.useGetTicketFormQuery(ticket?.ID, { skip: !(ticket?.CustomFormId > 0) });\n const [setStatus, { isLoading: updatingStatus, error: statusUpdateError }] = TicketApi.useSetStatusMutation();\n const [setAssigned, { isLoading: settingOwnership }] = TicketApi.useReassignMutation();\n const [formIndex, setFormIndex] = React.useState<number>(0);\n //const [valMessages, setValMessages] = React.useState<string[]>([]);\n const [valCodes, setValCodes] = React.useState<number[]>(null);\n const [ownership, setOwnership] = React.useState<OwnershipOptions>({ option: 'me' } as OwnershipOptions);\n const closedStatus = allStatuses?.find(s => s.ID === parseInt(statusId)) || allStatuses?.find(s => s.Closed_default === true);\n const { form: stateFields } = useReduxSelector(state => state.ticketDetails);\n const dispatch = useReduxDispatch();\n const [updateFormFields, { isLoading: isUpdatingForm }] = TicketApi.useUpdateTicketFormMutation();\n const [postAction, { isLoading: savingAction }] = TicketApi.useCreateActionMutation();\n const handleRedirect = useRedirectOnClose();\n const [showTypeList, setShowTypeList] = React.useState<boolean>(false);\n\n //Put the form fields into the state slice\n useEffect(() => {\n if (ticketForm) {\n dispatch(setForm(ticketForm));\n }\n }, [ticketForm]);\n\n const fieldChanged = (e) => {\n console.log('fieldChanged', e)\n //update the Ticket details Slice with the new field value\n dispatch(setField(e.value))\n };\n\n useEffect(() => {\n if (!valCodes && ticket?.CloseValidationCodes)\n setValCodes(ticket?.CloseValidationCodes);\n\n //Check if the save and close functionlity is being used and the -1 code is not in the list\n if (valCodes?.includes(-1) && !ticket?.CloseValidationCodes?.includes(-1)) {\n setValCodes(codes => [...codes.filter(f => f !== -1)]);\n }\n\n //Remove the validation to own the ticket before closing\n if (valCodes?.includes(-7) && !ticket?.CloseValidationCodes?.includes(-7)) {\n setValCodes(codes => [...codes.filter(f => f !== -7)]);\n }\n console.warn('valCodes', valCodes, ticket?.CloseValidationCodes)\n }, [ticket?.CloseValidationCodes]);\n\n //The trhe possible form validation steps\n const formValidations = [\n\n {\n name: 'Action',\n header: <><SvgIcon size='large' icon={svg.textareaIcon} className='mr-2' ></SvgIcon>Notes</>,\n valCode: -1,\n element: <AddAction showSaveButton={false} ticket={ticket} />,\n validate: () => {\n\n return true;\n }\n },\n // {\n // name: 'Ownership',\n // header: <><SvgIcon size='large' icon={svg.userOutlineIcon} className='mr-2' ></SvgIcon>Ownership</>,\n // valCode: -7,\n // element: <div className=''><Ownership onChange={(e => setOwnership(e))} /></div>,\n // nextText: null,\n // validate: () => {\n // return true;\n // }\n // },\n {\n name: 'Type',\n header: <><SvgIcon size='large' icon={svg.categorizeIcon} className='mr-2' ></SvgIcon>{userProfile?.Phrases.Type}</>,\n message: '<Phrase>CallPhrase</Phrase> {0} requires a <phrase>CallPhrase</phrase> type and all sub types to be set before it can be closed',\n valCode: -2,\n element: <div className='w-50 m-4'>\n <label>Type:</label>\n <Type {...ticket} Is_Loading={false} showHeader={false} isOpen={showTypeList} /></div>,\n validate: () => {\n return true;\n }\n },\n {\n name: 'Forms',\n header: <><SvgIcon size='large' icon={svg.formElementIcon} className='mr-2' ></SvgIcon>{ticketForm?.Name}</>,\n valCode: -4,\n //element: <CustomForm {...ticket} showSaveButton={false} />,\n element: <Field id={\"customform\"}\n name={\"customform\"}\n component={CustomFormControl}\n form={ticketForm}\n fields={stateFields?.Fields}\n companyId={ticket?.Company_Id}\n onChange={fieldChanged} />,\n\n validate: () => {\n\n\n return true;\n }\n }\n ];\n\n const displayForms = formValidations.filter(f => valCodes?.includes(f.valCode));\n const isFormStep = displayForms[formIndex]?.valCode === -4;\n const isActionStep = displayForms[formIndex]?.valCode === -1;\n const typeStep = displayForms[formIndex]?.valCode === -2 && ticket.CloseValidationCodes?.includes(-2);\n useEffect(() => {\n\n setShowTypeList(typeStep);\n\n }, [typeStep]);\n\n const validators = (values) => {\n\n let customFieldValidators = { ...validateCustomFields(stateFields?.Fields, true) }\n\n let val = {\n //...(!ticket.Call_Desc?.trim()?.length && { \"description\": `${userProfile?.Phrases.Description} is required` }),\n //...(!ticket.Project_Id && !bulkLog && { \"project\": ` (required)` }),\n //...(statusUpdateError && statusUpdateError['data'] && { \"apiError\": statusUpdateError['data'] }),\n ...(typeStep && { \"type\": `${userProfile.Phrases.CallPhrase} requires a ${userProfile.Phrases.Type} and all sub types to be set before it can be closed` }),\n ...(isActionStep && !actionState?.HTML_Notes && { \"action\": `Action note is required` }),\n ...(isFormStep && Object.keys(customFieldValidators).length && { \"form\": `${Object.keys(customFieldValidators).length} fields required` }),\n //...formValidator\n ...(isFormStep && customFieldValidators)\n }\n\n //console.log('formValidations[formIndex]?.valCode', displayForms[formIndex]?.valCode, formIndex, displayForms)\n\n return val;\n }\n\n const header = `This ${userProfile.Phrases.CallPhrase} has ${displayForms.length} closing requirement${displayForms.length > 1 ? 's' : ''}: ${displayForms.map(d => d.name).join(', ')}`;\n const formSubmit = async (values, event) => {\n //console.log('formSubmit', values, event)\n\n //If this is the last step then close the ticket\n if (formIndex >= displayForms.length - 1) {\n //console.log('close ticket', ticketId, statusId, closedStatus, ownership)\n\n //Save Ownership\n // if (ownership && displayForms.find(f => f.valCode === -7)) {\n // var reassignProps = { TicketId: ticket.ID, New_Assignees: [userProfile.Id] } as ReassignProps\n // if (ownership.option === 'someone' && ownership.assignedToId)\n // reassignProps.New_Assignees = [ownership.assignedToId];\n\n // await setAssigned(reassignProps).unwrap();\n // }\n\n //Save action but only if it STILL requires an action. The action may already have been saved but the status update failed and the user is tryiung again\n if (actionState?.HTML_Notes && ticket?.CloseValidationCodes.find(f => f === -1)) {\n let actionTypeId = actionState.Action_Type_Id ?? (userProfile.Features.External_Interface ? 8 : 1);\n let saveAction = { ...actionState, Call_Id: ticket.ID, Notes: actionState.HTML_Notes, Action_Type_Id: actionTypeId, Contact_Id: actionState.Staff_Id } as IActionDTO\n await postAction(saveAction).unwrap();\n }\n\n\n //Save custom forms\n if (displayForms.find(f => f.valCode === -4)) {\n await updateFormFields({ ticketId: ticket.ID, formId: ticket.CustomFormId, fields: stateFields?.Fields }).unwrap();\n }\n\n //SEND it bru!\n const props = { New_Status_Id: closedStatus?.ID, Ticket_Id: parseInt(ticketId) } as ISetStatusProps\n await setStatus(props).unwrap().then((hmm) => {\n //May need to navigate back to the homnepage if that options is enabled\n handleRedirect(props.Ticket_Id);\n }).catch((err) => {\n if (err.originalStatus === 400) {\n //navigate(`close/${statusId}`);\n console.log('Validation error', err)\n }\n });\n\n return;\n }\n\n //validate the curtrent field\n var isValid = displayForms[formIndex]?.validate && displayForms[formIndex]?.validate();\n if (!isValid)\n return;\n\n setFormIndex(i => i + 1)\n }\n\n return (\n <Form validator={validators} ignoreModified={true} id=\"close-ticket-form\" onSubmit={formSubmit} render={(formRenderProps) =>\n (<FormElement >\n <Window resizable={false} modal={true} className='cool-window fixed-window close-validation-popup' initialHeight={600} initialWidth={Math.min(1000, window.innerWidth - 10)} maximizeButton={() => null}\n minimizeButton={() => null} title={\n <div><SvgIcon size='large' icon={svg.exclamationCircleIcon} className='mr-2' ></SvgIcon>{header}</div>\n } onClose={() => navigate(`/ticket/${ticketId}`)}>\n {(settingOwnership || updatingStatus || isUpdatingForm || savingAction) && <PartialSpinny />}\n <Card>\n <CardBody>\n {/* formRenderProps = {JSON.stringify(formRenderProps)} */}\n {displayForms[formIndex]?.header &&\n <div className='header'><h6>{displayForms[formIndex]?.header}</h6></div>}\n {(statusUpdateError || (Object.keys(formRenderProps?.errors).filter(k => k.indexOf('field_') !== 0).length > 0 && !formRenderProps.allowSubmit)) && <div className='k-messagebox k-messagebox-error p-3'>\n {Object.keys(formRenderProps.errors).filter(k => k.indexOf('field_') !== 0).map((m, i) => <div key={i}>{formRenderProps.errors[m]}</div>)}\n {statusUpdateError && ('data' in statusUpdateError) && <div>{JSON.stringify(statusUpdateError)}</div>}\n </div>}\n {/* {displayForms && displayForms[formIndex]?.element} */}\n {Object.keys(displayForms).map((k, i) => {\n return (<div className={i === formIndex ? '' : 'hidden'}>{displayForms[k]?.element}</div>)\n })}\n </CardBody>\n </Card>\n <WindowActionsBar layout='stretched' >\n <div className=\"d-flex justify-content-between\">\n <div><Button fillMode='outline' size='large' onClick={(e) => navigate(`/ticket/${ticketId}`)}>Cancel</Button>\n </div>\n <div>\n <small className='text-muted mr-3'>Step {formIndex + 1} of {displayForms.length}</small>\n {formIndex > 0 && (\n <Button type='button' style={{ paddingLeft: '15px', paddingRight: '15px' }} size='large' onClick={(e) => {\n setFormIndex((i) => i > 0 ? (i - 1) : 0);\n //console.log('back', formIndex)\n }}><Back </Button>)\n }<Button disabled={!formRenderProps.allowSubmit} type='submit' form='close-ticket-form' style={{ color: '#fff', backgroundColor: userProfile?.Nav_Hex_Color, paddingLeft: '15px', paddingRight: '15px', marginLeft: 10 }} size='large' >{(formIndex >= displayForms.length - 1 ? `Close ${userProfile?.Phrases.CallPhrase}` : <>Next ></>)}</Button>\n </div>\n </div>\n </WindowActionsBar>\n </Window></FormElement>)\n } />\n );\n};\n\nexport default ValidationPopup;","import React, { ReactElement, useMemo, useState } from 'react';\nimport { Window, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport { DropDownList, MultiSelect, MultiSelectChangeEvent, MultiSelectFilterChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { Input, TextArea } from '@progress/kendo-react-inputs';\nimport { Form, useNavigate, useParams } from 'react-router-dom';\nimport { isMobile } from 'react-device-detect';\nimport { Icon, SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { filterBy, FilterDescriptor } from '@progress/kendo-data-query';\nimport { UserApi } from '../../../../redux/api/UserApi';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport { IShare } from '../../../../types/Ticket/IShare';\nimport { Avatar } from '@progress/kendo-react-layout';\nimport { IMention } from '../../../../types/User/IMention';\nimport { toast } from 'react-toastify';\nimport { PartialSpinny, SimpleSpinny, Spinny } from '../../../Nav/Spinny';\n\n\nconst Share: React.FC = () => {\n const navigate = useNavigate();\n const { ticketId } = useParams();\n const [visible, setVisible] = useState(true);\n const [copyText, setCopyText] = useState('Copy');\n const [selectedStaff, setSelectedStaff] = useState(null);\n const [note, setNote] = useState('');\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const [confirmation, setConfirmation] = useState(false);\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n //const assignedStaff = staff?.map(ass => { return { Full_Name: ass?.Contact_Name, ID: ass.Contact_Id } });\n let { data: staffList, isLoading: staffLoading } = UserApi.useGetMentionQuery('');\n const [shareTicket, { isLoading: sharingTicket }] = TicketApi.useShareTicketMutation();\n const [value, setValue] = React.useState<IMention[]>([]);\n const [filter, setFilter] = useState<FilterDescriptor>({ operator: 'contains' })\n const filteredStaff = useMemo(() => staffList?.length && filter?.value ? filterBy(staffList?.slice(), filter) : staffList, [filter, staffList]);\n\n const onFilter = (event: MultiSelectFilterChangeEvent) => {\n console.log('Filter', event);\n //setStaff(filterBy(staffList?.slice(), event.filter));\n setFilter(event.filter);\n }\n\n const handleSend = async (e) => {\n e.preventDefault();\n try {\n //create a new share item\n const item = {\n Message: note,\n Contact_Ids: value.filter(v => v.value.startsWith('c')).map(v => parseInt(v.value.replace('c', ''))),\n Team_Ids: value.filter(v => v.value.startsWith('t')).map(v => parseInt(v.value.replace('c', '')))\n\n } as IShare\n console.log('SENDING', item);\n shareTicket({ ticketId: parseInt(ticketId), share: item }).unwrap()\n .then(() => {\n //setConfirmation(true);\n //setVisible(false);\n\n //nom nom toast\n toast.success('Shared successfully');\n\n //go back\n navigate(-1);\n\n }).catch((error) =>\n toast.error('Error sharing ticket: ' + JSON.stringify(error))\n )\n } catch (error) {\n console.error('Error sharing ticket:', error);\n toast.error('Error sharing ticket: ' + JSON.stringify(error));\n }\n\n return false;\n };\n\n\n //navigate back when the winow is closed\n const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\n }\n\n const onWindowClose = () => {\n navigate(-1);\n }\n\n const renderTag = (tagData, tag: ReactElement) => {\n var imgUrl = tagData?.data[0]?.img;\n var showIMage = tagData?.data[0].img_class != 'n';\n var customElement = <div className='flex'>\n {showIMage && <Avatar size='small' rounded='full' className='user-profile-image mr-1' >\n {imgUrl?.indexOf('/images') == 0 ? <img src={`.${imgUrl}`} alt=\"Profile\" width=\"30\" height=\"30\" /> : <img src={imgUrl} alt=\"Profile\" width=\"30\" height=\"30\" />}\n </Avatar>}\n <div>{tagData.text}</div>\n </div>\n\n return React.cloneElement(tag, tag.props, [\n (customElement) as any,\n tag.props.children\n ]);\n }\n const renderItem = (li, itemProps) => {\n var data = itemProps.dataItem;\n var showIMage = data.img_class != 'n';\n var item = (\n\n <div className=\"k-hbox\" key={1}>\n {showIMage && <Avatar size={data.img_class == 'l' ? 'medium' : 'small'} rounded='full' className='user-profile-image' >\n {data.img?.indexOf('/images') == 0 ? <img src={`.${data.img}`} alt=\"Profile\" width=\"30\" height=\"30\" /> : <img src={data?.img} alt=\"Profile\" width=\"30\" height=\"30\" />}\n </Avatar>}\n <div className='ms-1'>\n <div>{data.label}</div>\n <small className='user-sub-title' title={data.team}>{data.team}</small>\n </div>\n </div>)\n\n return React.cloneElement(li, li.props, item);\n };\n\n const handleChange = (event: MultiSelectChangeEvent) => {\n console.log('handleChange', event.value);\n setValue(event.value);\n };\n\n if (!filteredStaff || !userProfile?.Features.Tagging) return <></>;\n\n return (\n <div>\n {visible && (\n <Window modal={true} className='cool-window' minimizeButton={() => null} title={<><SvgIcon size='large' icon={svg.shareIcon} className='mr-2' ></SvgIcon>Share {userProfile?.Phrases.CallPhrase}</>} onClose={onWindowClose} initialHeight={380} initialWidth={Math.min(600, window.innerWidth)} stage={stage} onStageChange={onStageChange} >\n <div className='position-relative'>\n {sharingTicket && <PartialSpinny />}\n <form className='w-100 d-flex flex-column align-items-end' onSubmit={handleSend}>\n <MultiSelect required onChange={handleChange} tagRender={renderTag} itemRender={renderItem} placeholder='To: Name or Team' filterable={true} popupSettings={{ className: 'z500' }} onFilterChange={onFilter} data={filteredStaff} dataItemKey=\"value\" textField=\"label\" loading={staffLoading} />\n <TextArea\n value={note}\n onChange={(e) => setNote(e.target.value)}\n placeholder=\"Type a message\"\n style={{ width: '100%', marginTop: '20px', height: '100px' }}\n />\n <div className=\"w-100 mt-3 mb-3\">\n <div className=\" input-group\">\n <label className=\"input-group-text\">Link</label>\n <input type=\"text\" className=\"form-control\" id=\"ticketLinkInput\" value={`${document.location.href.replace('/share', '')}`} disabled readOnly />\n <button className=\"btn btn-outline-secondary\" type=\"button\" id=\"copyButton\" onClick={\n //copy to clipboard\n () => {\n const copyText = document.getElementById('ticketLinkInput') as HTMLInputElement;\n copyText.select();\n navigator.clipboard.writeText(copyText.value);\n setCopyText('Copied!');\n console.log('Copied to clipboard:', copyText.value, navigator.clipboard);\n }\n }>{copyText} <SvgIcon className='ms-2' icon={svg.copyIcon} /></button>\n </div>\n </div>\n <Button svgIcon={svg.paperPlaneIcon} type='submit' className='justify-content-end p-2' style={{ marginTop: '20px', color: '#fff', backgroundColor: userProfile?.Nav_Hex_Color }}>\n Share\n </Button>\n </form>\n </div>\n </Window>\n )\n }\n {/* {\n confirmation && (\n <Window title=\"Confirmation\" onClose={() => setConfirmation(false)} initialHeight={200} initialWidth={400}>\n <div>\n <p>The ticket was successfully shared.</p>\n <Button onClick={() => {\n setConfirmation(false);\n navigate(-1);\n }}>\n OK\n </Button>\n </div>\n </Window>\n )\n } */}\n </div >\n );\n};\n\nexport default Share;","import React from 'react';\nimport { Window, WindowActionsBar } from '@progress/kendo-react-dialogs';\nimport { Map, MapLayers, MapMarker, MapMarkerLayer, MapMarkerLayerTooltip, MapTileLayer } from '@progress/kendo-react-map';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { TicketApi } from '../../../../redux/api/TicketApi';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { isMobile } from 'react-device-detect';\n\nconst MapView: React.FC = () => {\n const { ticketId } = useParams();\n const navigate = useNavigate();\n const [stage, setStage] = React.useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const { data: ticket } = TicketApi.useGetTicketDetailsQuery({ ticketId: Number(ticketId) });\n const tileUrl = e => `https://${e.subdomain}.tile.openstreetmap.org/${e.zoom}/${e.x}/${e.y}.png`;\n const tileSubdomains = ['a', 'b', 'c'];\n const attribution = '© <a href=\"https://osm.org/copyright\">OpenStreetMap contributors</a>';\n const markers = [{\n latlng: [ticket?.Latitude, ticket?.Longitude],\n name: ticket?.Address_Html\n }];\n const renderMarkerTooltip = props => <> <div dangerouslySetInnerHTML={{ __html: props.dataItem.name }}></div><div>({props.location.toString()})</div></>;\n const height = stage === 'FULLSCREEN' ? '90vh' : '580px';\n if (!ticket) return null;\n\n\n return (\n <Window onStageChange={(s) => setStage(s.state)} stage={stage} minimizeButton={() => null} modal={true} className='cool-window' title={ticket.Company_Name + ' - ' + ticket.Address_Name} onClose={() => { navigate('/ticket/' + ticketId) }} initialHeight={720} initialWidth={1000}>\n\n <Map className='map-view' center={[ticket?.Latitude, ticket?.Longitude]} zoom={17} style={{ height: height }}>\n {/* <MapMarker position={{ lat: 37.7749, lng: -122.4194 }} /> */}\n <MapLayers>\n <MapTileLayer urlTemplate={tileUrl} subdomains={tileSubdomains} attribution={attribution} />\n <MapMarkerLayer data={markers} locationField=\"latlng\" titleField=\"name\">\n <MapMarkerLayerTooltip render={renderMarkerTooltip} />\n </MapMarkerLayer>\n </MapLayers>\n </Map>\n <WindowActionsBar>\n <Button themeColor='primary' size='large' onClick={(e) => navigate(`/ticket/${ticketId}`)}>Close</Button>\n </WindowActionsBar>\n </Window>\n );\n};\n\nexport default MapView;","import React, { useState } from 'react';\nimport { Window } from '@progress/kendo-react-dialogs';\nimport { ITicketProps } from '../../../../../../types/Ticket/ITicket';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { useGetTenantQuery } from '../../../../../../redux/api/BaseApi';\nimport { isMobile } from 'react-device-detect';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\n\nconst PrintWindow: React.FC = () => {\n const { ticketId } = useParams();\n const navigate = useNavigate();\n const [visible, setVisible] = useState(false);\n const { data: tenant } = useGetTenantQuery()\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n\n const goBack = () => {\n navigate('/ticket/' + ticketId);\n }\n\n //Automatically print the iframe when it loads\n const onLoad = (e) => {\n console.warn('onLoad', e);\n e.target.contentWindow.focus();\n e.target.contentWindow.print();\n }\n\n return (\n <Window stage={stage} onStageChange={(e) => setStage(e.state)} modal={true} minimizeButton={() => null} className='dashboard cool-window' title={<><SvgIcon size='large' icon={svg.printIcon} className='mr-2' ></SvgIcon>Print </>} onClose={goBack} initialHeight={800} initialWidth={Math.min(1000, window.innerWidth)}>\n <iframe onLoad={onLoad} src={tenant.Tenant_Url + '/calls/CallHistoryPrint.aspx?Call_Id=' + ticketId.toString()} width=\"100%\" height=\"100%\" />\n </Window>\n );\n};\n\nexport default PrintWindow;","import React, { useEffect, useMemo, useState } from 'react';\nimport { Button, SplitButton, SplitButtonItemClickEvent } from '@progress/kendo-react-buttons';\nimport { Window, WindowActionsBar, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport { ComboBox, DropDownList, MultiSelect } from '@progress/kendo-react-dropdowns';\nimport { DateRangePicker, SelectionRange } from '@progress/kendo-react-dateinputs';\nimport { Checkbox, } from '@progress/kendo-react-inputs';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { isMobile } from 'react-device-detect';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { useReduxDispatch, useReduxSelector } from '../../../../../../redux/hooks';\nimport * as FilterSlice from '../../../../../../slices/FilterSlice';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { TextBox } from '@progress/kendo-react-inputs';\nimport { Setting } from '../../../../../../types/Setting/Setting';\nimport { isDate } from 'lodash';\nimport { ISetting } from '../../../../../../types/User/ISetting';\nimport { toast } from 'react-toastify';\n\nconst ActionFilter: React.FC = () => {\n const { ticketId } = useParams()\n const navigate = useNavigate();\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [saveSetting, { isLoading: isSaving }] = UserApi.useSaveSettingMutation();\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const sharingTicket = false;\n const [formState, setFormState] = useState(null as FilterState);\n\n //const [searchTerm, setSearchTerm] = useState('');\n\n //The filter state is managed by redux\n const filter = useReduxSelector(state => state.filter);\n const updateState = useReduxDispatch();\n const { data: staffList, isLoading: staffLoading } = TicketApi.useGetTicketAuthorsQuery(parseInt(ticketId));\n const { data: actionTypes } = TicketApi.useGetTicketActionTypesQuery(parseInt(ticketId));\n const selectedStaff = staffList?.filter((staff) => formState?.authorIds?.indexOf(staff.ID) > -1);\n const toggleModal = () => {\n navigate(-1);\n };\n\n\n //Load the curtrent filter state into the form\n useEffect(() => {\n if (filter)\n setFormState(filter);\n }, [filter]);\n\n const resetClicked = (e: any) => {\n\n updateState(FilterSlice.resetFilters());\n //updateState(FilterSlice.setAuthors([value.ID]));\n toggleModal();\n }\n\n\n const handleFilter = () => {\n var errors = [] as string[];\n //Val;idate the form\n if (formState?.dateRange === 'Custom' && (!formState?.customStartDate || !formState?.customEndDate)) {\n errors.push('Please select a valid date range.')\n }\n\n if (errors.length) {\n setFormState(s => { return { ...s, errors: errors } });\n return;\n }\n\n // Implement filter logic here\n console.log('handleFilter');\n updateState(FilterSlice.setSearchTerm(formState.searchTerm));\n updateState(FilterSlice.setSearchTermOption(formState.searchTermOption));\n updateState(FilterSlice.setAuthors(formState.authorIds));\n updateState(FilterSlice.setAuthorAndOr(formState.authorIds !== FilterSlice.initialState.authorIds ? formState.authorAndOr : FilterSlice.initialState.authorAndOr));\n updateState(FilterSlice.setHasReaction(formState.hasReactions));\n updateState(FilterSlice.setActionTypes(formState.actionTypeIds));\n updateState(FilterSlice.setActionTypeAndOr(formState.actionTypeIds !== FilterSlice.initialState.actionTypeIds ? formState.actionTypeAndOr : FilterSlice.initialState.actionTypeAndOr));\n updateState(FilterSlice.setDateRange(formState.dateRange));\n updateState(FilterSlice.setStartDate(formState.dateRange === 'Custom' ? formState.customStartDate : null));\n updateState(FilterSlice.setEndDate(formState.dateRange === 'Custom' ? formState.customEndDate : null));\n updateState(FilterSlice.setAuthors(formState.authorIds));\n updateState(FilterSlice.setShowSystemActions(formState.showSystemActions));\n toggleModal();\n };\n\n //navigate back when the winow is closed\n const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\n\n }\n\n const onWindowClose = () => {\n toggleModal();\n }\n\n //Save as default\n const itemClicked = (e: SplitButtonItemClickEvent) => {\n console.log('itemClicked', e);\n var stringValues = [] as string[];\n //Authors\n stringValues.push(formState.authorIds.join(','));\n //Authors And Or\n stringValues.push(formState.authorAndOr);\n //Action Types\n stringValues.push(formState.actionTypeIds.join(','));\n //Action Types And Or\n stringValues.push(formState.actionTypeAndOr);\n //Include / Exclude search term\n stringValues.push(formState.searchTermOption === 'Include' ? '1' : '0');\n //Search Term\n stringValues.push(formState.searchTerm);\n //System actions\n stringValues.push(formState.showSystemActions.toString());\n //Date range\n stringValues.push(formState.dateRange);\n //From date\n stringValues.push(formState.dateRange !== 'Custom' ? null : (formState.customStartDate && formState.customStartDate.toISOString()));\n //To date\n stringValues.push(formState.dateRange !== 'Custom' ? null : (formState.customEndDate && formState.customEndDate.toISOString()));\n //HAs reactions\n stringValues.push(formState.hasReactions.toString());\n\n //push settings to the API\n saveSetting({ Setting_Id: Setting.Ticket_Action_Filter, String_Value: stringValues.join(';') } as ISetting).then(() =>\n toast.success('Default Filter settings saved successfully')\n );\n }\n\n const selectedActionTypes = useMemo(() => actionTypes?.filter((at) => formState?.actionTypeIds?.indexOf(at.ID) > -1), [actionTypes, formState]);\n\n const buttonStyleCss = `.rev-action-button button,.rev-action-button button:hover {color: #fff; background-color: ${userProfile?.Nav_Hex_Color};}\n .rev-action-button button:hover {opacity: 0.8;}`;\n\n if (userProfile?.Features.Call_Action_Filter === false) return null;\n\n return (\n <div>\n <Window modal={true} className='cool-window' minimizeButton={() => null} title={<><SvgIcon size='medium' icon={svg.filterIcon} className='mr-2' ></SvgIcon>Filter</>} onClose={onWindowClose} initialHeight={520} initialWidth={window.innerWidth < 700 ? window.innerWidth : 700} stage={stage} onStageChange={onStageChange} >\n <style>{buttonStyleCss}</style>\n <div className='position-relative'>\n {sharingTicket && <PartialSpinny />}\n <form id='action-filter' className='w-100 d-flex flex-column' onSubmit={handleFilter}>\n {formState?.errors && (\n <div className=\"alert alert-danger\" role=\"alert\">\n {formState?.errors.map((e, i) => <div key={i}>{e}</div>)}\n </div>\n )}\n <div className=\"w-100 mb-3 row\">\n <div className='d-flex flex-column col'>\n <label className=''>Author</label>\n <div className='d-flex flex-row'>\n <MultiSelect size='large' placeholder='Select one or more...' className='mr-1' loading={staffLoading}\n data={staffList}\n filterable={false}\n allowCustom={false}\n dataItemKey='ID'\n textField='Full_Name'\n value={selectedStaff}\n onChange={(e) => setFormState((s) => {\n console.log('onChange', e.target.value);\n return { ...s, authorIds: e.target.value.map(a => a.ID) }\n })}\n\n />\n <DropDownList fillMode='solid' value={formState?.authorAndOr} data={['and', 'or']} style={{ width: 100 }}\n onChange={(e) => setFormState((s) => {\n return { ...s, authorAndOr: e.target.value }\n })}\n />\n </div>\n </div>\n\n </div>\n <div className=\"col-12 mb-2 row\">\n <label>Action Types</label>\n <div className='d-flex flex-row'>\n <MultiSelect size='large'\n filterable={false}\n allowCustom={false}\n value={selectedActionTypes}\n placeholder='Select one or more'\n textField='Action_Type'\n className='w-100'\n data={actionTypes?.filter((a) => formState?.showSystemActions === true || a.Is_System == false).sort((a, b) => a.Action_Type < b.Action_Type ? -1 : 1)}\n dataItemKey='ID'\n onChange={(e) => setFormState((s) => {\n console.log('onChange', e.target.value, formState?.actionTypeIds);\n return { ...s, actionTypeIds: e.target.value.map(a => a.ID) }\n })}\n />\n <DropDownList fillMode='solid' value={formState?.actionTypeAndOr} data={['and', 'or']} style={{ width: 100 }}\n onChange={(e) => setFormState((s) => { return { ...s, actionTypeAndOr: e.target.value.toString() } })}\n />\n </div>\n {userProfile?.Features.View_System_Actions &&\n <Checkbox label=\"Show System Actions\" className='m-2' checked={formState?.showSystemActions}\n onChange={(e) => setFormState((s) => { return { ...s, showSystemActions: e.target.value === true } })} />}\n </div>\n <div className=\"col-12 row\">\n\n <div className='w-50 inline-block mt-0'><label>Date Range</label>\n <ComboBox placeholder='None'\n value={formState?.dateRange}\n data={['Today', 'Yesterday', 'This Week', 'Last Week', 'This Month', 'Last Month', 'Last 3 Months', 'Custom']}\n onChange={(e) => setFormState((s) => { return { ...s, dateRange: e.target.value } })}\n />\n\n </div>\n {formState?.dateRange === 'Custom' && (\n <div className=\"w-50 inline-block \">\n <DateRangePicker className='range-picker'\n value={{ start: formState?.customStartDate ? new Date(formState?.customStartDate) : null, end: new Date(formState?.customEndDate || '') } as SelectionRange}\n onChange={(e) => setFormState((s) => {\n console.log('DateRangePicker', JSON.stringify(e.target.value), isDate(e.target.value?.end));\n return { ...s, customStartDate: e.target.value?.start, customEndDate: e.target.value?.end && new Date(e.target.value?.end) }\n })}\n />\n </div>)}\n </div>\n\n <div className=\"w-100 mt-3 row\">\n <div className='d-flex flex-column col'>\n <label>Notes</label>\n <div className='d-flex flex-row'>\n <DropDownList value={formState?.searchTermOption} style={{ width: 200 }}\n data={['Include', 'Exclude']}\n onChange={(e) => setFormState((s) => { return { ...s, searchTermOption: e.target.value.toString() } })} />\n <TextBox className='w-80' placeholder='Word or phrase' size='large'\n value={formState?.searchTerm}\n onChange={(e) => setFormState((s) => {\n return { ...s, searchTerm: e.target.value.toString() }\n })}\n />\n </div>\n </div>\n </div>\n <div className=\"col-12 mt-3 row\">\n <Checkbox className='m-2' checked={formState?.hasReactions} label='Has Reaction'\n onChange={(e) => setFormState((s) => {\n return { ...s, hasReactions: e.target.value === true }\n })} />\n </div>\n {/* <JsonTreeViewer title=\"redux data\" data={filter} /> */}\n {/* <JsonTreeViewer title=\"form State\" data={formState} />\n */}\n </form>\n </div>\n <WindowActionsBar>\n <SplitButton buttonClass='p-2' text=' Apply Filter' svgIcon={svg.filterIcon} items={['Set as default filter']} onItemClick={itemClicked} onButtonClick={handleFilter} className='rev-action-button justify-content-end p-2' style={{ marginTop: '10px' }}>\n </SplitButton>\n <Button fillMode='outline' svgIcon={svg.cancelIcon} className='justify-content-end p-2' style={{ marginTop: '10px' }}\n onClick={resetClicked} >\n Clear Filter\n </Button>\n </WindowActionsBar>\n </Window>\n\n </div >\n );\n};\n\nexport default ActionFilter;","import React, { useEffect, useState } from 'react';\nimport { Window, WindowActionsBar, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport { Button, DropDownButton, DropDownButtonItemClickEvent, SplitButton, SplitButtonItemClickEvent } from '@progress/kendo-react-buttons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { isMobile } from 'react-device-detect';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { CompositeFilterDescriptor, filterBy } from '@progress/kendo-data-query';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport KBResults from '../../../../FormControls/KBResuilts';\nimport { KBApi } from '../../../../../../redux/api/KBApi';\nimport { KBSearchProps } from '../../../../../../types/KB/KBSearchProps';\nimport { IKBSearchResult } from '../../../../../../types/KB/IKBSearchResult';\nimport { Card, CardBody, CardHeader } from '@progress/kendo-react-layout';\nimport { Checkbox, Input, InputChangeEvent } from '@progress/kendo-react-inputs';\nimport { useReduxDispatch, useReduxSelector } from '../../../../../../redux/hooks';\nimport { SetAction } from '../../../../../../slices/ActionSlice';\nimport { setNotes } from '../../../../../../slices/EmailActionSlice';\nimport { setActionExpanded } from '../../../../../../slices/TicketDetailUISlice';\nimport { ILinkedKB } from '../../../../../../types/KB/ILinkedKB';\nimport { unescape } from 'lodash';\n\nconst KBModal: React.FC = () => {\n const dispatch = useReduxDispatch();\n const navigate = useNavigate();\n const { ticketId } = useParams();\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const { data: ticket, isLoading } = TicketApi.useGetTicketDetailsQuery({ ticketId: parseInt(ticketId) });\n const [useDesc, setUseDesc] = React.useState<boolean>(true);\n const [description, setDescription] = React.useState<string>();\n const [freeText, setFreeText] = React.useState<string>();\n const [filter, setFilter] = useState<CompositeFilterDescriptor>(null)\n const [kbResults, setKBResults] = useState<IKBSearchResult[]>([]);\n const [linkedKbs, setLinkedKbs] = useState<IKBSearchResult[]>([]);\n const [error, setError] = useState<string>();\n const [searchKB, { isLoading: searching }] = KBApi.useSearchKBMutation();\n const newAction = useReduxSelector(state => state.actionDetails.action);\n const newEmail = useReduxSelector(state => state.emailAction.email);\n const { data: ticketKbs } = KBApi.useGetTicketKbsQuery(parseInt(ticketId), { skip: !ticketId });\n const [saveTicketdKbs, { isLoading: linkingKbs }] = KBApi.useUpdateLinkedKbsMutation();\n const from = new URLSearchParams(window.location.search).get('from');\n const { data: tenant } = UserApi.useGetTenantQuery()\n\n //Load the existing linked Kbs into state\n useEffect(() => {\n if (ticketKbs) {\n setLinkedKbs(ticketKbs.map(kb => ({ ID: kb.KB_Id, Title: kb.Title } as IKBSearchResult)));\n }\n }, [ticketKbs]);\n\n //Set the ticket details into the formstate\n useEffect(() => {\n if (ticket && ticketKbs) {\n setUseDesc(true);\n setDescription(unescape(ticket.Call_Desc));\n doSearch(ticket.Call_Desc);\n\n }\n }, [ticket, ticketKbs]);\n\n const doSearch = (desc?: string) => {\n searchKB({ Description: desc || description, EndUserId: userProfile.Id, Ticket_Id: ticket.ID, FreeText: freeText } as KBSearchProps).unwrap().then((data) => {\n if (typeof data === 'number') {\n setKBResults([]);\n return;\n }\n //Need to move all the linked KBs to the top of the list\n let sortedData = data.map(kb => {\n return { ...kb, linked: ticketKbs.map(l => l.KB_Id).indexOf(kb.ID) > -1 }\n }\n ).sort((a, b) => {\n if (a.linked && !b.linked) return -1;\n if (!a.linked && b.linked) return 1;\n return 0;\n });\n //console.log('sortedData', sortedData, linkedKbs)\n\n setKBResults(sortedData);\n })\n }\n\n\n const onFilter = (event: InputChangeEvent) => {\n console.log('Filter', event);\n //setStaff(filterBy(staffList?.slice(), event.filter));\n setFilter({ filters: [{ value: event.value, field: 'Title', operator: 'contains' }] } as CompositeFilterDescriptor);\n }\n const filteredResults = kbResults ? filterBy(kbResults, filter) : [];\n\n //navigate back when the winow is closed\n const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\n }\n\n const onWindowClose = () => {\n navigate(-1);\n }\n\n const kbSelected = (kb: IKBSearchResult) => {\n setError('');\n //console.log('kbSelected', kb, 'index', linkedKbs, linkedKbs.map(m => m.KB_Id).indexOf(kb.KB_Id));\n /*Add or remove the selected KB from the linked KBs */\n setLinkedKbs(k => {\n var original = [...k]\n original.splice(k.map(m => m.ID).indexOf(kb.ID), 1)\n return k.map(m => m.ID).indexOf(kb.ID) === -1 ? [...k, kb] : original\n });\n }\n\n const onSearchClicked = () => {\n doSearch();\n }\n\n const kbLinks = () => linkedKbs.map(kb => `<a href='${tenant.Tenant_Url}/KBAse/?KB_ID=${kb.ID}'>KB${kb.ID} - ${kb.Title}</a>`).join('<br/>');\n\n const onItemClick = (event: SplitButtonItemClickEvent) => {\n setError('');\n\n //Create hyperlinks to the selected KB articles so it can be inserted into the ticket, action or email\n switch (event.item.key) {\n case 'ticket':\n //Warn if KBs have been unlinked\n let unlinkedKBs = ticketKbs.filter(kb => linkedKbs.map(l => l.ID).indexOf(kb.KB_Id) === -1);\n if (unlinkedKBs.length > 0 && !window.confirm(`The following KBs have been unlinked from the ${userProfile.Phrases.CallPhrase}: KB${unlinkedKBs.map(kb => kb.KB_Id).join(', KB')}. Are you sure you want to continue?`)) return;\n\n\n //Link to ticket\n saveTicketdKbs({ ticketId: parseInt(ticketId), items: linkedKbs.map(kb => { return { KB_Id: kb.ID } as ILinkedKB }) }).unwrap().then(() => {\n navigate(-1);\n });\n break;\n case 'newAction':\n if (linkedKbs.length === 0) { setError('Please select at least one article to link'); return; }\n addLinksToAction();\n break;\n case 'newEmail':\n if (linkedKbs.length === 0) { setError('Please select at least one article to link'); return; }\n //Link to new email\n addLinksToEmail();\n break;\n default:\n break;\n }\n\n //go back\n //navigate(-1);\n }\n const linkToTicket = () => {\n //Warn if KBs have been unlinked\n let unlinkedKBs = ticketKbs.filter(kb => linkedKbs.map(l => l.ID).indexOf(kb.KB_Id) === -1);\n if (unlinkedKBs.length > 0 && !window.confirm(`The following KBs have been unlinked from the ${userProfile.Phrases.CallPhrase}: KB${unlinkedKBs.map(kb => kb.KB_Id).join(', KB')}. Are you sure you want to continue?`)) return;\n\n\n //Link to ticket\n saveTicketdKbs({ ticketId: parseInt(ticketId), items: linkedKbs.map(kb => { return { KB_Id: kb.ID } as ILinkedKB }) }).unwrap().then(() => {\n navigate(-1);\n });\n\n }\n\n //Link to new action\n const addLinksToAction = () => {\n dispatch(SetAction({ ...newAction, HTML_Notes: (newAction.HTML_Notes || '') + '\\n' + kbLinks() }));\n dispatch(setActionExpanded(1));\n navigate(-1);\n }\n const addLinksToEmail = () => {\n dispatch(setNotes((newEmail.HTML_Note || '') + '\\n' + kbLinks()));\n dispatch(setActionExpanded(2));\n navigate(-1);\n }\n\n const options = [\n //{ text: 'Ticket', key: 'ticket', icon: 'track-changes-enable' },\n { text: 'Link KB articles to New Action', key: 'newAction', icon: 'comment' },\n { text: 'Link KB articles to New Email', key: 'newEmail', icon: 'email' },\n ]\n\n if (!userProfile?.Features.Call_Hierarchy) return <></>;\n\n return (\n <div>\n <Window modal={true} className='cool-window' minimizeButton={() => null} title={<div className='flex align-items-center'><img src='./images/Nav/lifesaver.png' /> Knowledge Base Results</div>} onClose={onWindowClose} initialHeight={Math.min(850, window.innerHeight)} initialWidth={Math.min(1200, window.innerWidth)} stage={stage} onStageChange={onStageChange} >\n <div className='position-relative'>\n {(isLoading || searching || linkingKbs) && <PartialSpinny />}\n <Card>\n <CardHeader>\n <form onSubmit={(e) => { e.preventDefault(); onSearchClicked(); }}>\n {/* Error message */}\n {error && <div className={\"k-messagebox k-messagebox-error\"}>{error}</div>}\n <div className=\"mb-3 ms-1\">\n\n </div>\n <div className=\"row mb-3\">\n <label className=\"col-sm-1 col-form-label\">Tags</label>\n <div className=\"col-sm-11\">\n <div className=\"input-group\">\n <div className=\"input-group-text\">\n <Checkbox className='\"form-check-input' label={`Use ${userProfile?.Phrases.CallPhrase} description`} checked={useDesc} onChange={(e) => {\n setUseDesc(e.target.value ? true : false);\n if (e.target.value) {\n setDescription(ticket.Call_Desc);\n } else {\n setDescription('');\n }\n }} />\n </div>\n <Input disabled={useDesc} placeholder={useDesc ? ticket.Call_Desc : 'Search Tags'} className='form-control' onChange={(e) => setDescription(e.target.value.toString())} value={description} />\n\n </div>\n <span className='text-muted p-2'>space delimited, using 'OR' logic</span>\n </div>\n </div>\n <div className=\"row mb-3\">\n <label className=\"col-sm-1 col-form-label\">Contains</label>\n <div className=\"col-sm-11\">\n <Input placeholder='Title, Description, Solution or KB#' className='form-control' onChange={(e) => setFreeText(e.target.value.toString())} value={freeText} />\n </div></div>\n <Button onClick={onSearchClicked} svgIcon={svg.searchIcon} type='submit' className='justify-content-end p-2 k-button-primary'>\n Search Knowledge Base\n </Button>\n </form>\n </CardHeader>\n <CardBody>\n {/* <Input className='mb-3 w-100' placeholder='Filter results' onChange={onFilter} /> */}\n {filteredResults.length === 0 ? <div className='text-center'>No results found</div> :\n\n <KBResults results={filteredResults} kbSelected={kbSelected} linkedKBIds={linkedKbs.map(kb => kb.ID)} />\n }\n </CardBody>\n </Card>\n </div>\n <WindowActionsBar>\n <h6>{linkedKbs?.length} selected</h6>\n {from === 'action' ? <Button size='large' className=\"rev-primary-button\" svgIcon={svg.linkIcon} onClick={() => addLinksToAction()} >Add to Action note</Button> :\n from === 'email' ? <Button size='large' className=\"rev-primary-button\" svgIcon={svg.envelopLinkIcon} onClick={() => addLinksToEmail()} >Add to Email</Button> :\n <>\n {/* <DropDownButton className=\"rev-primary-button\" popupSettings={{ popupClass: 'rev-primary-button' }} items={options} svgIcon={svg.linkIcon} text=\"Link KB articles to...\" endIcon={<SvgIcon icon={svg.chevronDownIcon} />} /> */}\n <SplitButton size='large' onButtonClick={linkToTicket} onItemClick={onItemClick} className=\"rev-primary-button\" popupSettings={{ popupClass: 'rev-primary-button' }} items={options} svgIcon={svg.linkIcon} text={\"Link KB articles to \" + userProfile.Phrases.CallPhrase} />\n </>\n }\n <Button fillMode='outline' onClick={() => onWindowClose()} svgIcon={svg.cancelIcon} className='justify-content-end p-2'>\n Cancel\n </Button>\n </WindowActionsBar>\n </Window>\n </div >\n );\n};\n\nexport default KBModal;","import React, { ReactElement, useEffect, useMemo, useState } from 'react';\nimport { Window, WindowActionsBar, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport { MultiSelectFilterChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { isMobile } from 'react-device-detect';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { filterBy, FilterDescriptor } from '@progress/kendo-data-query';\nimport { toast } from 'react-toastify';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { IMention } from '../../../../../../types/User/IMention';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport ExistingTickets from '../../../../GridControls/ExistingTickets';\nimport { SvgIcon } from '@progress/kendo-react-common';\n\nconst RelatedTicketsModal: React.FC = () => {\n const navigate = useNavigate();\n const { ticketId } = useParams();\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n let { data: staffList, isLoading: staffLoading } = UserApi.useGetMentionQuery('');\n const { data: ticket, isLoading } = TicketApi.useGetTicketDetailsQuery({ ticketId: parseInt(ticketId) });\n const [value, setValue] = React.useState<IMention[]>([]);\n const [error, setError] = React.useState<string>();\n const [filter, setFilter] = useState<FilterDescriptor>({ operator: 'contains' })\n const filteredStaff = useMemo(() => staffList?.length && filter?.value ? filterBy(staffList?.slice(), filter) : staffList, [filter, staffList]);\n const [formState, setFormState] = useState({ isParent: false, parentCallId: 0 });\n const [updateHierarchy, { isLoading: updatingTicket, error: saveTicketError }] = TicketApi.useUpdateTicketHierarchyMutation();\n const [removeHierarchy, { isLoading: removingHierarchy, error: removeError }] = TicketApi.useRemoveTicketHierarchyMutation();\n\n //Set the ticket details into the formstate\n useEffect(() => {\n if (ticket)\n setFormState({ isParent: ticket.Is_Parent, parentCallId: ticket.Parent_Call_Id > 0 ? ticket.Parent_Call_Id : null });\n }, [ticket]);\n\n\n const onFilter = (event: MultiSelectFilterChangeEvent) => {\n console.log('Filter', event);\n //setStaff(filterBy(staffList?.slice(), event.filter));\n setFilter(event.filter);\n }\n\n //navigate back when the winow is closed\n const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\n }\n\n const onWindowClose = () => {\n navigate('/ticket/' + ticketId);\n }\n\n const handleParentChange = (event) => {\n setError(null);\n //console.log('handleParentChange', event)\n setFormState((s) => { return { ...s, isParent: event.value, parentCallId: null } });\n };\n\n //Make child\n const handleChildChange = (event) => {\n setError(null);\n //console.log('handleChildChange', event)\n setFormState((s) => { return { ...s, isParent: false, parentCallId: event ? event.value : 0 } });\n\n };\n const onTicketSelected = (Id?: number) => {\n setError(null);\n //console.log('onTicketSelected', Id)\n setFormState((s) => { return { ...s, parentCallId: Id } });\n };\n\n const handleRemove = () => {\n setFormState((s) => { return { ...s, isParent: null, parentCallId: null } });\n }\n\n const saveChanges = () => {\n console.log('saveChanges', formState);\n setError(null);\n\n //Child but no parent saelected\n if (!formState.isParent && formState.parentCallId === 0) {\n setError(`Please select a parent ${userProfile?.Phrases.CallPhrase} to make this a child`);\n return;\n }\n\n if (!formState.isParent && !formState.parentCallId) {\n removeHierarchy({ ticketId: parseInt(ticketId) }).unwrap().then((huh) => {\n onWindowClose();\n }).catch((e) => {\n toast.error('Error removing hierarchy');\n console.error(e);\n });\n } else {\n updateHierarchy({ ticketId: parseInt(ticketId), info: { Is_PArent: formState.isParent, Parent_Ticket_Id: formState.parentCallId } }).unwrap().then(() => {\n onWindowClose();\n });\n }\n }\n\n\n if (!filteredStaff || !userProfile?.Features.Call_Hierarchy) return <></>;\n\n return (\n <div>\n <Window modal={true} className='cool-window' minimizeButton={() => null} title={<><SvgIcon icon={svg.clockArrowRotateIcon} size='large' /> Open {userProfile?.Phrases.CallPhrase}s ({ticket.Open_User_Tickets} / {ticket.Open_Client_Tickets})</>} onClose={onWindowClose} initialHeight={Math.min(850, window.innerHeight)} initialWidth={Math.min(1200, window.innerWidth)} stage={stage} onStageChange={onStageChange} >\n <div className='position-relative'>\n <div id='error-summary'>\n {error && <div className={\"k-messagebox k-messagebox-error\"}>{error}</div>}\n {/* Validation */}\n {removeError?.[\"data\"] && removeError?.[\"data\"] && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n {removeError[\"data\"]?.Message || removeError[\"data\"]}\n </div>)}\n </div>\n {(isLoading || updatingTicket || removingHierarchy) && <PartialSpinny />}\n <ExistingTickets {...ticket} Is_Loading={false} />\n </div>\n <WindowActionsBar>\n {/* <Button onClick={saveChanges} svgIcon={svg.saveIcon} type='submit' className='justify-content-end p-2' style={{ marginTop: '20px', color: '#fff', backgroundColor: userProfile?.Nav_Hex_Color }}>\n Save\n </Button> */}\n <Button fillMode='outline' onClick={() => onWindowClose()} svgIcon={svg.cancelIcon} className='justify-content-end p-2' style={{ marginTop: '20px' }}>\n Cancel\n </Button>\n </WindowActionsBar>\n </Window>\n </div>\n );\n};\n\nexport default RelatedTicketsModal;","import { ListBox, ListBoxDragEvent, ListBoxToolbar, processListBoxData, processListBoxDragAndDrop } from '@progress/kendo-react-listbox';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { ComboBox, DropDownList } from '@progress/kendo-react-dropdowns';\nimport { TextBox } from '@progress/kendo-react-inputs';\nimport { IStaff } from '../../../../../../types/IStaff';\nimport { Icon } from '@progress/kendo-react-common';\nimport { Avatar } from '@progress/kendo-react-layout';\nimport { ITeam } from '../../../../../../types/ITeam';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport { Setting } from '../../../../../../types/Setting/Setting';\nimport products from './TestProducts';\n\ninterface EditAssignmentProps {\n ticketId?: number;\n newAssignees?: string;\n onChange: (newAssignees: number[]) => void;\n}\n\nconst renderItem = (props) => {\n let { dataItem, selected, ...others } = props;\n var customElement = <div className='k-hbox' title={dataItem.Full_Name}>\n {dataItem.Show_Profile_Image ? <>\n <Avatar size='medium' rounded='full' className='user-profile-image ' >\n {dataItem.Profile_Image_Path?.indexOf('/images') === 0 ? <img src={`.${dataItem.Profile_Image_Path}`} alt=\"Profile\" width=\"25\" height=\"25\" /> : (dataItem.Profile_Image_Path ? <img src={dataItem.Profile_Image_Path} alt=\"Profile\" width=\"40\" height=\"40\" /> : <img src={'./images/placeholder.png'} alt=\"Profile\" width=\"40\" height=\"40\" />)}\n </Avatar>\n <div className='ms-2'>\n <div className='name'>{dataItem.Full_Name}</div>\n <div className='text-muted'>{dataItem.Team_Name}</div>\n </div></>\n : <div>\n <div className='name'>{dataItem.Full_Name}</div>\n <div className='text-muted'>{dataItem.Team_Name}</div>\n </div>}\n </div>\n\n return (\n <li {...others}>\n {customElement}\n </li>\n );\n};\n\nconst EditAssignment: React.FC<EditAssignmentProps> = ({ ticketId, newAssignees, onChange }) => {\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const SELECTED_FIELD = 'selected';\n const [newAssignee, setNewAssignee] = useState();\n const { data: ticket } = TicketApi.useGetTicketQuery({ ticketId: ticketId });\n\n const { data: teams } = UserApi.useGetTeamsQuery();\n const { data: yourTeamSetting } = UserApi.useGetSettingQuery(Setting.YOUR_TEAM_DEFAULT);\n const [filter, setFilter] = useState<string>('');\n const [team, setTeam] = useState<ITeam>(null);\n const { data: staffAndQueues, isLoading } = UserApi.useGetStaffQuery({ teamId: null, includeQueues: true, includeStaffPlusForCompanyId: ticket?.Company_Id }, { skip: !ticket?.Company_Id });\n const queues = staffAndQueues?.filter((s) => s.Is_Queue && (!team || !s.Team_Name || s.Team_Name === team?.Dept_Name))?.map(s => {\n return { ID: s.ID, Full_Name: s.Full_Name, Team_Name: s.Team_Name, [SELECTED_FIELD]: false, Is_Queue: true, Show_Profile_Image: userProfile?.Features.Profile_Images }\n }) || [];\n const staff = staffAndQueues?.filter((s) => !s.Is_Queue && (!team || s.Team_Name === team?.Dept_Name) && (!filter || s.Full_Name?.toLowerCase().includes(filter?.toLowerCase())))?.map(s => {\n return { ID: s.ID, Full_Name: s.Full_Name, Team_Name: s.Team_Name, [SELECTED_FIELD]: false, Is_Queue: false, Profile_Image_Path: s.Profile_Image_Path, Show_Profile_Image: userProfile?.Features.Profile_Images }\n });\n\n\n const [draggedItem, setDragItem] = useState({});\n const [state, setState] = React.useState({\n assigned: null,\n staff: null,\n queues: null,\n });\n\n const assignedIds = state?.assigned?.map(ca => ca.ID) || [];\n const bindStaff = state?.staff?.filter(s => assignedIds.indexOf(s.ID) === -1) || [];\n const bindQueues = state?.queues?.filter(s => assignedIds.indexOf(s.ID) === -1) || [];\n\n //Log whenever bindStaff changes\n useEffect(() => {\n console.log('bindQueues changed');\n }, [bindQueues]);\n\n //Default to the current user's team\n useEffect(() => {\n if (yourTeamSetting?.Bool_Value && teams && userProfile) {\n console.log('Setting team', teams.find(t => t.ID === userProfile?.Team_Id));\n setTeam(teams.find(t => t.ID === userProfile?.Team_Id))\n }\n }, [yourTeamSetting, teams, userProfile]);\n\n\n useEffect(() => {\n //console.warn('useEffect filter or team')\n if (staff) {\n setState((s) => {\n return { ...s, staff: [...staff] }\n })\n }\n if (queues) {\n setState((s) => {\n return { ...s, queues: [...queues] }\n })\n }\n }, [filter, team]);\n\n useEffect(() => {\n //console.warn('useEffect staff or ticket', staff?.length)\n if (state.assigned === null && ticket?.Call_Assignment && staff && queues) {\n const assignedStaff = ticket?.Call_Assignment.map(ca => {\n return { ID: ca.Contact_Id, Full_Name: ca.Contact_Name, [SELECTED_FIELD]: false, Is_Queue: ca.Access_Level_Id === 6, Profile_Image_Path: ca.Profile_Image_Path, Team_Name: ca.Team_Name, Show_Profile_Image: userProfile?.Features.Profile_Images }\n });\n //console.warn('Setting initial state', staff?.length);\n setState((s) => {\n return { ...s, assigned: assignedStaff, staff: [...staff], queues: [...queues] }\n })\n }\n // if (state.staff === null && staffAndQueues)\n // setState((s) => {\n // return { ...s, staff: staffAndQueues }\n // })\n\n }, [staff, ticket]);\n\n const handleDragStart = (e: ListBoxDragEvent) => {\n setDragItem(e.dataItem);\n };\n\n const assignDropped = (e: ListBoxDragEvent) => {\n const itemDropped = e.dataItem as IStaff;\n const dragItem = draggedItem as IStaff;\n\n let result = dragItem.Is_Queue ?\n processListBoxDragAndDrop(\n state.assigned,\n state.queues,\n draggedItem,\n itemDropped,\n 'ID'\n ) :\n processListBoxDragAndDrop(\n state.assigned,\n state.staff,\n draggedItem,\n itemDropped,\n 'ID'\n );\n\n console.log('dragItem', dragItem, 'itemDropped:', itemDropped, result)\n\n dragItem.Is_Queue ?\n setState((s) => {\n return {\n ...s,\n assigned: result.listBoxOneData,\n queues: result.listBoxTwoData\n }\n }) :\n setState((s) => {\n return {\n ...state,\n assigned: result.listBoxOneData,\n staff: result.listBoxTwoData\n }\n });\n\n onChange(result.listBoxOneData.map(a => a.ID))\n\n }\n\n const groupDropped = (e: ListBoxDragEvent) => {\n console.log('assignDropped', e.dataItem)\n\n }\n\n const MyCustomItem = props => {\n let { dataItem, selected, ...others } = props;\n\n return <li {...others} key={dataItem.ID}>\n {props.dataItem.Full_Name}\n </li>;\n };\n\n\n const handleToolBarClick = e => {\n console.log('handleToolBarClick', e);\n let toolName = e.toolName || '';\n let result = processListBoxData(state.assigned,\n state.staff, toolName, SELECTED_FIELD);\n\n setState((s) => {\n return {\n ...s,\n assigned: result.listBoxOneData,\n staff: result.listBoxTwoData\n }\n });\n\n onChange(result.listBoxOneData.map(a => a.ID))\n };\n\n const handleQueueToolBarClick = e => {\n console.log('handleToolBarClick', e);\n let toolName = e.toolName || '';\n let result = processListBoxData(state.assigned,\n state.queues, toolName, SELECTED_FIELD);\n\n setState((s) => {\n return {\n ...s,\n assigned: result.listBoxOneData,\n queues: result.listBoxTwoData\n }\n });\n\n onChange(result.listBoxOneData.map(a => a.ID))\n };\n\n\n const handleItemClick = (event, data, connectedData) => {\n //console.log('handleItemClick', event.dataItem.name, event.dataItem);\n\n setState(s => {\n return {\n ...s,\n [data]: s[data].map(item => {\n if (item.ID === event.dataItem.ID) {\n item[SELECTED_FIELD] = !item[SELECTED_FIELD];\n } else if (!event.nativeEvent.ctrlKey) {\n item[SELECTED_FIELD] = false;\n }\n return item;\n }),\n [connectedData]: state[connectedData].map(item => {\n item[SELECTED_FIELD] = false;\n return item;\n })\n }\n });\n };\n\n //return <TestApp />;\n\n return (\n <>\n {/* <TestApp /> */}\n {isLoading && <PartialSpinny />}\n {/* state?.staff = {JSON.stringify(state?.staff?.length)} */}\n <div className='d-flex flex-row-reverse'>\n <div className='col-12 col-lg-8 m-2'>\n <div className='team-list'><ComboBox filterable={false} allowCustom={false} placeholder={`Filter by ${userProfile?.Phrases.Team}`} data={teams} value={team} textField='Dept_Name' onChange={(e) => setTeam(e.value)} /></div>\n </div>\n </div>\n <div className='row align-top'>\n <div className='col-6 col-lg-4'>\n <h6>\n Assigned: ({state.assigned?.length})\n {/* team:{JSON.stringify(team)} */}\n </h6>\n <ListBox onDragStart={handleDragStart} item={renderItem} selectedField={SELECTED_FIELD} onItemClick={e => handleItemClick(e, 'assigned', 'staff')}\n className='assigned-list' data={state.assigned || []} textField='Full_Name' key='ID' onDrop={assignDropped} />\n </div>\n <div className='col-6 col-lg-8 ps-0'>\n <div className='col-lg-6 col-12 d-inline-block'>\n <h6 className='staff-header'>\n Staff:\n </h6>\n <div>\n <div className='search-wrapper'><TextBox prefix={() => <><Icon className='m-2' name='search'></Icon></>} className='' placeholder='Search...' value={filter} onChange={(e) => setFilter(e.value.toString())} /></div>\n <ListBox\n selectedField={SELECTED_FIELD}\n onItemClick={e => handleItemClick(e, 'staff', 'assigned')}\n onDragStart={handleDragStart} item={renderItem}\n toolbarPosition='left' //item={MyCustomItem}\n toolbar={() => {\n return (\n <ListBoxToolbar\n tools={[\n 'transferFrom',\n 'transferTo'\n ]}\n data={state.assigned || []}\n dataConnected={state?.staff || []}\n onToolClick={handleToolBarClick}\n />\n );\n }}\n className='staff-list' data={state?.staff || []} textField='Full_Name' valueField='ID' onDrop={assignDropped} />\n <ListBox textField=\"ProductName\" style={{\n height: 350,\n width: '100%'\n }} data={state?.staff || []} selectedField={SELECTED_FIELD} onItemClick={e => handleItemClick(e, 'staff', 'assigned')} onDragStart={handleDragStart} item={MyCustomItem} toolbar={() => {\n return <ListBoxToolbar tools={['moveUp', 'moveDown', 'transferTo', 'transferFrom', 'transferAllTo', 'transferAllFrom', 'remove']} data={state?.assigned || []} dataConnected={state?.staff || []} onToolClick={handleToolBarClick} />;\n }} />\n </div>\n </div>\n <div className='col-lg-6 col-12 d-inline-block align-top ps-2'>\n <h6 className='staff-header'>\n Groups:\n </h6>\n <ListBox selectedField={SELECTED_FIELD} onItemClick={e => handleItemClick(e, 'queues', 'assigned')}\n onDragStart={handleDragStart} className='queue-list' data={queues || []} textField='Full_Name' valueField='ID' onDrop={assignDropped}\n toolbarPosition='left' item={MyCustomItem}\n toolbar={() => {\n return (\n <ListBoxToolbar\n tools={[\n 'transferFrom',\n 'transferTo'\n ]}\n data={state.assigned || []}\n dataConnected={bindQueues || []}\n onToolClick={handleQueueToolBarClick}\n />\n );\n }} />\n </div>\n </div>\n </div>\n </>\n );\n};\n\nexport default EditAssignment;\n\n\nconst parsedProducts = products.map(product => {\n product.selected = false;\n return product;\n});\nconst MyCustomItem = props => {\n let {\n dataItem,\n selected,\n ...others\n } = props;\n //console.log('MyCustomItem!', props.dataItem.ID, props.key, props);\n return <li {...others}>\n <div>\n <span style={{\n fontWeight: 'bold'\n }}>{props.dataItem.Full_Name}</span>\n <br />\n <span>{props.dataItem.Team_Name}</span>\n </div>\n </li>;\n};\n\nconst SELECTED_FIELD = 'selected';\nexport const TestApp = () => {\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [filter, setFilter] = useState<string>('');\n const [team, setTeam] = useState<ITeam>(null);\n const { data: staffAndQueues, isLoading } = UserApi.useGetStaffQuery({ teamId: null, includeQueues: true, includeStaffPlusForCompanyId: 0 });\n const queues = staffAndQueues?.filter((s) => s.Is_Queue && (!team || !s.Team_Name || s.Team_Name === team?.Dept_Name))?.map(s => {\n return { ID: s.ID, Full_Name: s.Full_Name, Team_Name: s.Team_Name, [SELECTED_FIELD]: false, Is_Queue: true }\n }) || [];\n const staff = staffAndQueues?.filter((s) => !s.Is_Queue && (!team || s.Team_Name === team?.Dept_Name) && (!filter || s.Full_Name?.toLowerCase().includes(filter?.toLowerCase())))?.map(s => {\n return { ID: s.ID, Full_Name: s.Full_Name, Team_Name: s.Team_Name, [SELECTED_FIELD]: false, Is_Queue: false, Profile_Image_Path: s.Profile_Image_Path }\n });\n\n useEffect(() => {\n console.warn('useEffect filter or team')\n if (staff && !state.notDiscontinued?.length) {\n setState((s) => {\n return { ...s, notDiscontinued: [...staff] }\n })\n }\n if (queues && !state.discontinued?.length) {\n setState((s) => {\n return { ...s, discontinued: [...queues] }\n })\n }\n }, [staff, queues]);\n\n\n const [state, setState] = React.useState({\n notDiscontinued: [],\n discontinued: [],\n draggedItem: {}\n });\n const handleItemClick = (event, data, connectedData) => {\n setState({\n ...state,\n [data]: state[data].map(item => {\n if (item.ID === event.dataItem.ID) {\n item[SELECTED_FIELD] = !item[SELECTED_FIELD];\n } else if (!event.nativeEvent.ctrlKey) {\n item[SELECTED_FIELD] = false;\n }\n return item;\n }),\n [connectedData]: state[connectedData].map(item => {\n item[SELECTED_FIELD] = false;\n return item;\n })\n });\n };\n const handleToolBarClick = e => {\n let toolName = e.toolName || '';\n let result = processListBoxData(state.notDiscontinued, state.discontinued, toolName, SELECTED_FIELD);\n setState({\n ...state,\n notDiscontinued: result.listBoxOneData,\n discontinued: result.listBoxTwoData\n });\n };\n const handleDragStart = e => {\n setState({\n ...state,\n draggedItem: e.dataItem\n });\n };\n const handleDrop = e => {\n let result = processListBoxDragAndDrop(state.notDiscontinued, state.discontinued, state.draggedItem, e.dataItem, 'ProductID');\n setState({\n ...state,\n notDiscontinued: result.listBoxOneData,\n discontinued: result.listBoxTwoData\n });\n };\n return <div className=\"container\">\n <div className=\"row justify-content-center\">\n <div className=\"col\">\n <h6>Not Discontinued</h6>\n <ListBox textField=\"Full_Name\" style={{\n height: 350,\n width: '100%'\n }} data={state?.notDiscontinued || []} selectedField={SELECTED_FIELD} onItemClick={e => handleItemClick(e, 'notDiscontinued', 'discontinued')} onDragStart={handleDragStart} onDrop={handleDrop} item={renderItem} toolbar={() => {\n return <ListBoxToolbar tools={['moveUp', 'moveDown', 'transferTo', 'transferFrom', 'transferAllTo', 'transferAllFrom', 'remove']} data={state?.notDiscontinued} dataConnected={state?.discontinued} onToolClick={handleToolBarClick} />;\n }} />\n </div>\n <div className=\"col\">\n <h6>Discontinued</h6>\n <ListBox textField=\"Full_Name\" style={{\n height: 350,\n width: '100%'\n }} data={state.discontinued} selectedField={SELECTED_FIELD} onItemClick={e => handleItemClick(e, 'discontinued', 'notDiscontinued')} onDragStart={handleDragStart} onDrop={handleDrop} item={MyCustomItem} />\n </div>\n </div>\n </div>;\n};\n","import React, { useState } from 'react';\nimport { Window, WindowActionsBar, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { isMobile } from 'react-device-detect';\nimport * as svg from '@progress/kendo-svg-icons';\nimport EditAssignment from './EditAssignment';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport './Reassign.scss';\nimport { max } from 'lodash';\n\nconst AssignedModal: React.FC = () => {\n const navigate = useNavigate();\n const { ticketId } = useParams();\n const [selectedUser, setSelectedUser] = useState();\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const [newAssignees, setNewAssignees] = useState<number[]>([]);\n const [setAssigned, { isLoading: savingChanges }] = TicketApi.useReassignMutation();\n\n //navigate back when the winow is closed\n const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\n }\n\n const handleSave = (e) => {\n if (newAssignees?.length) {\n setAssigned({ TicketId: parseInt(ticketId), New_Assignees: newAssignees }).unwrap().then(() => {\n //Go back \n navigate('/ticket/' + ticketId);\n });\n } else {\n goBack();\n }\n };\n\n\n const goBack = () => {\n navigate('/ticket/' + ticketId);\n }\n\n return (<>\n <Window modal={true} className='cool-window reassign-window' minimizeButton={() => null} title={<><SvgIcon size='large' icon={svg.userOutlineIcon} className='mr-2' ></SvgIcon>Edit Ownership</>} onClose={() => navigate(-1)}\n initialHeight={650} initialWidth={1000}\n stage={stage} onStageChange={onStageChange}>\n <div>\n {savingChanges && <PartialSpinny />}\n {/* newAssignees: {newAssignees?.length} */}\n <EditAssignment ticketId={parseInt(ticketId)} onChange={(e) => setNewAssignees(e)} />\n </div>\n <style>\n {`body, html{\n max-height: 100vh;\n overflow: hidden;\n }`}\n </style>\n <WindowActionsBar>\n <Button disabled={!newAssignees?.length} onClick={handleSave} svgIcon={svg.saveIcon} type='submit' className='justify-content-end p-2' style={{ marginTop: '20px', color: '#fff', backgroundColor: userProfile?.Nav_Hex_Color }}>\n Save Ownership\n </Button>\n <Button fillMode='outline' svgIcon={svg.cancelIcon} className='justify-content-end p-2' style={{ marginTop: '20px' }} onClick={goBack}>\n Cancel\n </Button>\n </WindowActionsBar>\n </Window>\n\n </>\n );\n};\n\nexport default AssignedModal;","const TestProducts = [{\n ProductID: 1,\n ProductName: 'Chai',\n SupplierID: 1,\n CategoryID: 1,\n QuantityPerUnit: '10 boxes x 20 bags',\n UnitPrice: 18.0,\n UnitsInStock: 39,\n UnitsOnOrder: 0,\n ReorderLevel: 10,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 2,\n ProductName: 'Chang',\n SupplierID: 1,\n CategoryID: 1,\n QuantityPerUnit: '24 - 12 oz bottles',\n UnitPrice: 19.0,\n UnitsInStock: 17,\n UnitsOnOrder: 40,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 3,\n ProductName: 'Aniseed Syrup',\n SupplierID: 1,\n CategoryID: 2,\n QuantityPerUnit: '12 - 550 ml bottles',\n UnitPrice: 10.0,\n UnitsInStock: 13,\n UnitsOnOrder: 70,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 4,\n ProductName: \"Chef Anton's Cajun Seasoning\",\n SupplierID: 2,\n CategoryID: 2,\n QuantityPerUnit: '48 - 6 oz jars',\n UnitPrice: 22.0,\n UnitsInStock: 53,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 5,\n ProductName: \"Chef Anton's Gumbo Mix\",\n SupplierID: 2,\n CategoryID: 2,\n QuantityPerUnit: '36 boxes',\n UnitPrice: 21.35,\n UnitsInStock: 0,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: true,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 6,\n ProductName: \"Grandma's Boysenberry Spread\",\n SupplierID: 3,\n CategoryID: 2,\n QuantityPerUnit: '12 - 8 oz jars',\n UnitPrice: 25.0,\n UnitsInStock: 120,\n UnitsOnOrder: 0,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 7,\n ProductName: \"Uncle Bob's Organic Dried Pears\",\n SupplierID: 3,\n CategoryID: 7,\n QuantityPerUnit: '12 - 1 lb pkgs.',\n UnitPrice: 30.0,\n UnitsInStock: 15,\n UnitsOnOrder: 0,\n ReorderLevel: 10,\n Discontinued: false,\n Category: {\n CategoryID: 7,\n CategoryName: 'Produce',\n Description: 'Dried fruit and bean curd'\n }\n }, {\n ProductID: 8,\n ProductName: 'Northwoods Cranberry Sauce',\n SupplierID: 3,\n CategoryID: 2,\n QuantityPerUnit: '12 - 12 oz jars',\n UnitPrice: 40.0,\n UnitsInStock: 6,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 9,\n ProductName: 'Mishi Kobe Niku',\n SupplierID: 4,\n CategoryID: 6,\n QuantityPerUnit: '18 - 500 g pkgs.',\n UnitPrice: 97.0,\n UnitsInStock: 29,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: true,\n Category: {\n CategoryID: 6,\n CategoryName: 'Meat/Poultry',\n Description: 'Prepared meats'\n }\n }, {\n ProductID: 10,\n ProductName: 'Ikura',\n SupplierID: 4,\n CategoryID: 8,\n QuantityPerUnit: '12 - 200 ml jars',\n UnitPrice: 31.0,\n UnitsInStock: 31,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 11,\n ProductName: 'Queso Cabrales',\n SupplierID: 5,\n CategoryID: 4,\n QuantityPerUnit: '1 kg pkg.',\n UnitPrice: 21.0,\n UnitsInStock: 22,\n UnitsOnOrder: 30,\n ReorderLevel: 30,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 12,\n ProductName: 'Queso Manchego La Pastora',\n SupplierID: 5,\n CategoryID: 4,\n QuantityPerUnit: '10 - 500 g pkgs.',\n UnitPrice: 38.0,\n UnitsInStock: 86,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 13,\n ProductName: 'Konbu',\n SupplierID: 6,\n CategoryID: 8,\n QuantityPerUnit: '2 kg box',\n UnitPrice: 6.0,\n UnitsInStock: 24,\n UnitsOnOrder: 0,\n ReorderLevel: 5,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 14,\n ProductName: 'Tofu',\n SupplierID: 6,\n CategoryID: 7,\n QuantityPerUnit: '40 - 100 g pkgs.',\n UnitPrice: 23.25,\n UnitsInStock: 35,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 7,\n CategoryName: 'Produce',\n Description: 'Dried fruit and bean curd'\n }\n }, {\n ProductID: 15,\n ProductName: 'Genen Shouyu',\n SupplierID: 6,\n CategoryID: 2,\n QuantityPerUnit: '24 - 250 ml bottles',\n UnitPrice: 15.5,\n UnitsInStock: 39,\n UnitsOnOrder: 0,\n ReorderLevel: 5,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 16,\n ProductName: 'Pavlova',\n SupplierID: 7,\n CategoryID: 3,\n QuantityPerUnit: '32 - 500 g boxes',\n UnitPrice: 17.45,\n UnitsInStock: 29,\n UnitsOnOrder: 0,\n ReorderLevel: 10,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 17,\n ProductName: 'Alice Mutton',\n SupplierID: 7,\n CategoryID: 6,\n QuantityPerUnit: '20 - 1 kg tins',\n UnitPrice: 39.0,\n UnitsInStock: 0,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: true,\n Category: {\n CategoryID: 6,\n CategoryName: 'Meat/Poultry',\n Description: 'Prepared meats'\n }\n }, {\n ProductID: 18,\n ProductName: 'Carnarvon Tigers',\n SupplierID: 7,\n CategoryID: 8,\n QuantityPerUnit: '16 kg pkg.',\n UnitPrice: 62.5,\n UnitsInStock: 42,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 19,\n ProductName: 'Teatime Chocolate Biscuits',\n SupplierID: 8,\n CategoryID: 3,\n QuantityPerUnit: '10 boxes x 12 pieces',\n UnitPrice: 9.2,\n UnitsInStock: 25,\n UnitsOnOrder: 0,\n ReorderLevel: 5,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 20,\n ProductName: \"Sir Rodney's Marmalade\",\n SupplierID: 8,\n CategoryID: 3,\n QuantityPerUnit: '30 gift boxes',\n UnitPrice: 81.0,\n UnitsInStock: 40,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 21,\n ProductName: \"Sir Rodney's Scones\",\n SupplierID: 8,\n CategoryID: 3,\n QuantityPerUnit: '24 pkgs. x 4 pieces',\n UnitPrice: 10.0,\n UnitsInStock: 3,\n UnitsOnOrder: 40,\n ReorderLevel: 5,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 22,\n ProductName: \"Gustaf's Knäckebröd\",\n SupplierID: 9,\n CategoryID: 5,\n QuantityPerUnit: '24 - 500 g pkgs.',\n UnitPrice: 21.0,\n UnitsInStock: 104,\n UnitsOnOrder: 0,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 5,\n CategoryName: 'Grains/Cereals',\n Description: 'Breads, crackers, pasta, and cereal'\n }\n }, {\n ProductID: 23,\n ProductName: 'Tunnbröd',\n SupplierID: 9,\n CategoryID: 5,\n QuantityPerUnit: '12 - 250 g pkgs.',\n UnitPrice: 9.0,\n UnitsInStock: 61,\n UnitsOnOrder: 0,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 5,\n CategoryName: 'Grains/Cereals',\n Description: 'Breads, crackers, pasta, and cereal'\n }\n }, {\n ProductID: 24,\n ProductName: 'Guaraná Fantástica',\n SupplierID: 10,\n CategoryID: 1,\n QuantityPerUnit: '12 - 355 ml cans',\n UnitPrice: 4.5,\n UnitsInStock: 20,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: true,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 25,\n ProductName: 'NuNuCa Nuß-Nougat-Creme',\n SupplierID: 11,\n CategoryID: 3,\n QuantityPerUnit: '20 - 450 g glasses',\n UnitPrice: 14.0,\n UnitsInStock: 76,\n UnitsOnOrder: 0,\n ReorderLevel: 30,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 26,\n ProductName: 'Gumbär Gummibärchen',\n SupplierID: 11,\n CategoryID: 3,\n QuantityPerUnit: '100 - 250 g bags',\n UnitPrice: 31.23,\n UnitsInStock: 15,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 27,\n ProductName: 'Schoggi Schokolade',\n SupplierID: 11,\n CategoryID: 3,\n QuantityPerUnit: '100 - 100 g pieces',\n UnitPrice: 43.9,\n UnitsInStock: 49,\n UnitsOnOrder: 0,\n ReorderLevel: 30,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 28,\n ProductName: 'Rössle Sauerkraut',\n SupplierID: 12,\n CategoryID: 7,\n QuantityPerUnit: '25 - 825 g cans',\n UnitPrice: 45.6,\n UnitsInStock: 26,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: true,\n Category: {\n CategoryID: 7,\n CategoryName: 'Produce',\n Description: 'Dried fruit and bean curd'\n }\n }, {\n ProductID: 29,\n ProductName: 'Thüringer Rostbratwurst',\n SupplierID: 12,\n CategoryID: 6,\n QuantityPerUnit: '50 bags x 30 sausgs.',\n UnitPrice: 123.79,\n UnitsInStock: 0,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: true,\n Category: {\n CategoryID: 6,\n CategoryName: 'Meat/Poultry',\n Description: 'Prepared meats'\n }\n }, {\n ProductID: 30,\n ProductName: 'Nord-Ost Matjeshering',\n SupplierID: 13,\n CategoryID: 8,\n QuantityPerUnit: '10 - 200 g glasses',\n UnitPrice: 25.89,\n UnitsInStock: 10,\n UnitsOnOrder: 0,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 31,\n ProductName: 'Gorgonzola Telino',\n SupplierID: 14,\n CategoryID: 4,\n QuantityPerUnit: '12 - 100 g pkgs',\n UnitPrice: 12.5,\n UnitsInStock: 0,\n UnitsOnOrder: 70,\n ReorderLevel: 20,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 32,\n ProductName: 'Mascarpone Fabioli',\n SupplierID: 14,\n CategoryID: 4,\n QuantityPerUnit: '24 - 200 g pkgs.',\n UnitPrice: 32.0,\n UnitsInStock: 9,\n UnitsOnOrder: 40,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 33,\n ProductName: 'Geitost',\n SupplierID: 15,\n CategoryID: 4,\n QuantityPerUnit: '500 g',\n UnitPrice: 2.5,\n UnitsInStock: 112,\n UnitsOnOrder: 0,\n ReorderLevel: 20,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 34,\n ProductName: 'Sasquatch Ale',\n SupplierID: 16,\n CategoryID: 1,\n QuantityPerUnit: '24 - 12 oz bottles',\n UnitPrice: 14.0,\n UnitsInStock: 111,\n UnitsOnOrder: 0,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 35,\n ProductName: 'Steeleye Stout',\n SupplierID: 16,\n CategoryID: 1,\n QuantityPerUnit: '24 - 12 oz bottles',\n UnitPrice: 18.0,\n UnitsInStock: 20,\n UnitsOnOrder: 0,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 36,\n ProductName: 'Inlagd Sill',\n SupplierID: 17,\n CategoryID: 8,\n QuantityPerUnit: '24 - 250 g jars',\n UnitPrice: 19.0,\n UnitsInStock: 112,\n UnitsOnOrder: 0,\n ReorderLevel: 20,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 37,\n ProductName: 'Gravad lax',\n SupplierID: 17,\n CategoryID: 8,\n QuantityPerUnit: '12 - 500 g pkgs.',\n UnitPrice: 26.0,\n UnitsInStock: 11,\n UnitsOnOrder: 50,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 38,\n ProductName: 'Côte de Blaye',\n SupplierID: 18,\n CategoryID: 1,\n QuantityPerUnit: '12 - 75 cl bottles',\n UnitPrice: 263.5,\n UnitsInStock: 17,\n UnitsOnOrder: 0,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 39,\n ProductName: 'Chartreuse verte',\n SupplierID: 18,\n CategoryID: 1,\n QuantityPerUnit: '750 cc per bottle',\n UnitPrice: 18.0,\n UnitsInStock: 69,\n UnitsOnOrder: 0,\n ReorderLevel: 5,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 40,\n ProductName: 'Boston Crab Meat',\n SupplierID: 19,\n CategoryID: 8,\n QuantityPerUnit: '24 - 4 oz tins',\n UnitPrice: 18.4,\n UnitsInStock: 123,\n UnitsOnOrder: 0,\n ReorderLevel: 30,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 41,\n ProductName: \"Jack's New England Clam Chowder\",\n SupplierID: 19,\n CategoryID: 8,\n QuantityPerUnit: '12 - 12 oz cans',\n UnitPrice: 9.65,\n UnitsInStock: 85,\n UnitsOnOrder: 0,\n ReorderLevel: 10,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 42,\n ProductName: 'Singaporean Hokkien Fried Mee',\n SupplierID: 20,\n CategoryID: 5,\n QuantityPerUnit: '32 - 1 kg pkgs.',\n UnitPrice: 14.0,\n UnitsInStock: 26,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: true,\n Category: {\n CategoryID: 5,\n CategoryName: 'Grains/Cereals',\n Description: 'Breads, crackers, pasta, and cereal'\n }\n }, {\n ProductID: 43,\n ProductName: 'Ipoh Coffee',\n SupplierID: 20,\n CategoryID: 1,\n QuantityPerUnit: '16 - 500 g tins',\n UnitPrice: 46.0,\n UnitsInStock: 17,\n UnitsOnOrder: 10,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 44,\n ProductName: 'Gula Malacca',\n SupplierID: 20,\n CategoryID: 2,\n QuantityPerUnit: '20 - 2 kg bags',\n UnitPrice: 19.45,\n UnitsInStock: 27,\n UnitsOnOrder: 0,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 45,\n ProductName: 'Rogede sild',\n SupplierID: 21,\n CategoryID: 8,\n QuantityPerUnit: '1k pkg.',\n UnitPrice: 9.5,\n UnitsInStock: 5,\n UnitsOnOrder: 70,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 46,\n ProductName: 'Spegesild',\n SupplierID: 21,\n CategoryID: 8,\n QuantityPerUnit: '4 - 450 g glasses',\n UnitPrice: 12.0,\n UnitsInStock: 95,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 47,\n ProductName: 'Zaanse koeken',\n SupplierID: 22,\n CategoryID: 3,\n QuantityPerUnit: '10 - 4 oz boxes',\n UnitPrice: 9.5,\n UnitsInStock: 36,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 48,\n ProductName: 'Chocolade',\n SupplierID: 22,\n CategoryID: 3,\n QuantityPerUnit: '10 pkgs.',\n UnitPrice: 12.75,\n UnitsInStock: 15,\n UnitsOnOrder: 70,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 49,\n ProductName: 'Maxilaku',\n SupplierID: 23,\n CategoryID: 3,\n QuantityPerUnit: '24 - 50 g pkgs.',\n UnitPrice: 20.0,\n UnitsInStock: 10,\n UnitsOnOrder: 60,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 50,\n ProductName: 'Valkoinen suklaa',\n SupplierID: 23,\n CategoryID: 3,\n QuantityPerUnit: '12 - 100 g bars',\n UnitPrice: 16.25,\n UnitsInStock: 65,\n UnitsOnOrder: 0,\n ReorderLevel: 30,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 51,\n ProductName: 'Manjimup Dried Apples',\n SupplierID: 24,\n CategoryID: 7,\n QuantityPerUnit: '50 - 300 g pkgs.',\n UnitPrice: 53.0,\n UnitsInStock: 20,\n UnitsOnOrder: 0,\n ReorderLevel: 10,\n Discontinued: false,\n Category: {\n CategoryID: 7,\n CategoryName: 'Produce',\n Description: 'Dried fruit and bean curd'\n }\n }, {\n ProductID: 52,\n ProductName: 'Filo Mix',\n SupplierID: 24,\n CategoryID: 5,\n QuantityPerUnit: '16 - 2 kg boxes',\n UnitPrice: 7.0,\n UnitsInStock: 38,\n UnitsOnOrder: 0,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 5,\n CategoryName: 'Grains/Cereals',\n Description: 'Breads, crackers, pasta, and cereal'\n }\n }, {\n ProductID: 53,\n ProductName: 'Perth Pasties',\n SupplierID: 24,\n CategoryID: 6,\n QuantityPerUnit: '48 pieces',\n UnitPrice: 32.8,\n UnitsInStock: 0,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: true,\n Category: {\n CategoryID: 6,\n CategoryName: 'Meat/Poultry',\n Description: 'Prepared meats'\n }\n }, {\n ProductID: 54,\n ProductName: 'Tourtière',\n SupplierID: 25,\n CategoryID: 6,\n QuantityPerUnit: '16 pies',\n UnitPrice: 7.45,\n UnitsInStock: 21,\n UnitsOnOrder: 0,\n ReorderLevel: 10,\n Discontinued: false,\n Category: {\n CategoryID: 6,\n CategoryName: 'Meat/Poultry',\n Description: 'Prepared meats'\n }\n }, {\n ProductID: 55,\n ProductName: 'Pâté chinois',\n SupplierID: 25,\n CategoryID: 6,\n QuantityPerUnit: '24 boxes x 2 pies',\n UnitPrice: 24.0,\n UnitsInStock: 115,\n UnitsOnOrder: 0,\n ReorderLevel: 20,\n Discontinued: false,\n Category: {\n CategoryID: 6,\n CategoryName: 'Meat/Poultry',\n Description: 'Prepared meats'\n }\n }, {\n ProductID: 56,\n ProductName: 'Gnocchi di nonna Alice',\n SupplierID: 26,\n CategoryID: 5,\n QuantityPerUnit: '24 - 250 g pkgs.',\n UnitPrice: 38.0,\n UnitsInStock: 21,\n UnitsOnOrder: 10,\n ReorderLevel: 30,\n Discontinued: false,\n Category: {\n CategoryID: 5,\n CategoryName: 'Grains/Cereals',\n Description: 'Breads, crackers, pasta, and cereal'\n }\n }, {\n ProductID: 57,\n ProductName: 'Ravioli Angelo',\n SupplierID: 26,\n CategoryID: 5,\n QuantityPerUnit: '24 - 250 g pkgs.',\n UnitPrice: 19.5,\n UnitsInStock: 36,\n UnitsOnOrder: 0,\n ReorderLevel: 20,\n Discontinued: false,\n Category: {\n CategoryID: 5,\n CategoryName: 'Grains/Cereals',\n Description: 'Breads, crackers, pasta, and cereal'\n }\n }, {\n ProductID: 58,\n ProductName: 'Escargots de Bourgogne',\n SupplierID: 27,\n CategoryID: 8,\n QuantityPerUnit: '24 pieces',\n UnitPrice: 13.25,\n UnitsInStock: 62,\n UnitsOnOrder: 0,\n ReorderLevel: 20,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 59,\n ProductName: 'Raclette Courdavault',\n SupplierID: 28,\n CategoryID: 4,\n QuantityPerUnit: '5 kg pkg.',\n UnitPrice: 55.0,\n UnitsInStock: 79,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 60,\n ProductName: 'Camembert Pierrot',\n SupplierID: 28,\n CategoryID: 4,\n QuantityPerUnit: '15 - 300 g rounds',\n UnitPrice: 34.0,\n UnitsInStock: 19,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 61,\n ProductName: \"Sirop d'érable\",\n SupplierID: 29,\n CategoryID: 2,\n QuantityPerUnit: '24 - 500 ml bottles',\n UnitPrice: 28.5,\n UnitsInStock: 113,\n UnitsOnOrder: 0,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 62,\n ProductName: 'Tarte au sucre',\n SupplierID: 29,\n CategoryID: 3,\n QuantityPerUnit: '48 pies',\n UnitPrice: 49.3,\n UnitsInStock: 17,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 63,\n ProductName: 'Vegie-spread',\n SupplierID: 7,\n CategoryID: 2,\n QuantityPerUnit: '15 - 625 g jars',\n UnitPrice: 43.9,\n UnitsInStock: 24,\n UnitsOnOrder: 0,\n ReorderLevel: 5,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 64,\n ProductName: 'Wimmers gute Semmelknödel',\n SupplierID: 12,\n CategoryID: 5,\n QuantityPerUnit: '20 bags x 4 pieces',\n UnitPrice: 33.25,\n UnitsInStock: 22,\n UnitsOnOrder: 80,\n ReorderLevel: 30,\n Discontinued: false,\n Category: {\n CategoryID: 5,\n CategoryName: 'Grains/Cereals',\n Description: 'Breads, crackers, pasta, and cereal'\n }\n }, {\n ProductID: 65,\n ProductName: 'Louisiana Fiery Hot Pepper Sauce',\n SupplierID: 2,\n CategoryID: 2,\n QuantityPerUnit: '32 - 8 oz bottles',\n UnitPrice: 21.05,\n UnitsInStock: 76,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 66,\n ProductName: 'Louisiana Hot Spiced Okra',\n SupplierID: 2,\n CategoryID: 2,\n QuantityPerUnit: '24 - 8 oz jars',\n UnitPrice: 17.0,\n UnitsInStock: 4,\n UnitsOnOrder: 100,\n ReorderLevel: 20,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }, {\n ProductID: 67,\n ProductName: 'Laughing Lumberjack Lager',\n SupplierID: 16,\n CategoryID: 1,\n QuantityPerUnit: '24 - 12 oz bottles',\n UnitPrice: 14.0,\n UnitsInStock: 52,\n UnitsOnOrder: 0,\n ReorderLevel: 10,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 68,\n ProductName: 'Scottish Longbreads',\n SupplierID: 8,\n CategoryID: 3,\n QuantityPerUnit: '10 boxes x 8 pieces',\n UnitPrice: 12.5,\n UnitsInStock: 6,\n UnitsOnOrder: 10,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 3,\n CategoryName: 'Confections',\n Description: 'Desserts, candies, and sweet breads'\n }\n }, {\n ProductID: 69,\n ProductName: 'Gudbrandsdalsost',\n SupplierID: 15,\n CategoryID: 4,\n QuantityPerUnit: '10 kg pkg.',\n UnitPrice: 36.0,\n UnitsInStock: 26,\n UnitsOnOrder: 0,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 70,\n ProductName: 'Outback Lager',\n SupplierID: 7,\n CategoryID: 1,\n QuantityPerUnit: '24 - 355 ml bottles',\n UnitPrice: 15.0,\n UnitsInStock: 15,\n UnitsOnOrder: 10,\n ReorderLevel: 30,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 71,\n ProductName: 'Flotemysost',\n SupplierID: 15,\n CategoryID: 4,\n QuantityPerUnit: '10 - 500 g pkgs.',\n UnitPrice: 21.5,\n UnitsInStock: 26,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 72,\n ProductName: 'Mozzarella di Giovanni',\n SupplierID: 14,\n CategoryID: 4,\n QuantityPerUnit: '24 - 200 g pkgs.',\n UnitPrice: 34.8,\n UnitsInStock: 14,\n UnitsOnOrder: 0,\n ReorderLevel: 0,\n Discontinued: false,\n Category: {\n CategoryID: 4,\n CategoryName: 'Dairy Products',\n Description: 'Cheeses'\n }\n }, {\n ProductID: 73,\n ProductName: 'Röd Kaviar',\n SupplierID: 17,\n CategoryID: 8,\n QuantityPerUnit: '24 - 150 g jars',\n UnitPrice: 15.0,\n UnitsInStock: 101,\n UnitsOnOrder: 0,\n ReorderLevel: 5,\n Discontinued: false,\n Category: {\n CategoryID: 8,\n CategoryName: 'Seafood',\n Description: 'Seaweed and fish'\n }\n }, {\n ProductID: 74,\n ProductName: 'Longlife Tofu',\n SupplierID: 4,\n CategoryID: 7,\n QuantityPerUnit: '5 kg pkg.',\n UnitPrice: 10.0,\n UnitsInStock: 4,\n UnitsOnOrder: 20,\n ReorderLevel: 5,\n Discontinued: false,\n Category: {\n CategoryID: 7,\n CategoryName: 'Produce',\n Description: 'Dried fruit and bean curd'\n }\n }, {\n ProductID: 75,\n ProductName: 'Rhönbräu Klosterbier',\n SupplierID: 12,\n CategoryID: 1,\n QuantityPerUnit: '24 - 0.5 l bottles',\n UnitPrice: 7.75,\n UnitsInStock: 125,\n UnitsOnOrder: 0,\n ReorderLevel: 25,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 76,\n ProductName: 'Lakkalikööri',\n SupplierID: 23,\n CategoryID: 1,\n QuantityPerUnit: '500 ml',\n UnitPrice: 18.0,\n UnitsInStock: 57,\n UnitsOnOrder: 0,\n ReorderLevel: 20,\n Discontinued: false,\n Category: {\n CategoryID: 1,\n CategoryName: 'Beverages',\n Description: 'Soft drinks, coffees, teas, beers, and ales'\n }\n }, {\n ProductID: 77,\n ProductName: 'Original Frankfurter grüne Soße',\n SupplierID: 12,\n CategoryID: 2,\n QuantityPerUnit: '12 boxes',\n UnitPrice: 13.0,\n UnitsInStock: 32,\n UnitsOnOrder: 0,\n ReorderLevel: 15,\n Discontinued: false,\n Category: {\n CategoryID: 2,\n CategoryName: 'Condiments',\n Description: 'Sweet and savory sauces, relishes, spreads, and seasonings'\n }\n }];\n export default TestProducts;","import React, { useState } from 'react';\nimport { Window, WindowActionsBar } from '@progress/kendo-react-dialogs';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { toast } from 'react-toastify';\nimport { PartialSpinny } from '../../../../Nav/Spinny';\nimport { UserApi } from '../../../../../redux/api/UserApi';\nimport { TicketApi } from '../../../../../redux/api/TicketApi';\nimport { IActionDTO } from '../../../../../types/Action/IAction';\nimport { PinApi } from '../../../../../redux/api/PinApi';\nimport { IPinItem } from '../../../../../types/Pin/IPinItem';\n\nconst DeleteDockItem: React.FC = () => {\n const { pinId } = useParams();\n const navigate = useNavigate();\n const { data: profile } = UserApi.useGetUserProfileQuery();\n //Get existing action\n const [unpin, { isLoading: deleting }] = PinApi.useDeletePinMutation();\n const [unpinAll, { isLoading: deletingAll }] = PinApi.useDeletePinsMutation();\n\n const handleClose = () => {\n navigate(-1);\n };\n\n const handleConfirm = () => {\n //Delete via API\n unpin({ Id: parseInt(pinId) } as IPinItem).unwrap().then(() => {\n //toast.success('Dock item removed');\n //Go Back\n navigate(-1);\n });\n };\n\n const handleConfirmAll = () => {\n //Delete via API\n unpinAll(null).unwrap().then(() => {\n //toast.success('Dock item removed');\n //Go Back\n navigate(-1);\n });\n };\n\n\n return (\n <>\n <Window modal={true} minimizeButton={() => null} maximizeButton={() => null} className='cool-window' title=\"Unpin?\" onClose={handleClose} width={550} height={200}>\n {(deleting || deletingAll) && <PartialSpinny />}\n\n <>\n <div>\n <p>Do you want to remove only this {profile?.Phrases.CallPhrase} from the dock or remove all {profile?.Phrases.CallPhrase}s from the dock?</p>\n </div>\n <WindowActionsBar layout='center'>\n <Button onClick={handleConfirm} svgIcon={svg.trashIcon} style={{ width: '150px', color: '#fff', background: profile?.Nav_Hex_Color }}>\n Remove\n </Button>\n <Button onClick={handleConfirmAll} svgIcon={svg.trashIcon} style={{ width: '150px', color: '#fff', background: profile?.Nav_Hex_Color }}>\n Remove All\n </Button>\n <Button fillMode='outline' onClick={handleClose}>Cancel</Button>\n </WindowActionsBar></>\n\n </Window></>\n );\n};\n\nexport default DeleteDockItem;","import React, { useEffect, useMemo, useState } from 'react';\nimport { Window, WindowActionsBar, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport { MultiSelectFilterChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { isMobile } from 'react-device-detect';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { toast } from 'react-toastify';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport HierarchyForm from '../../../../FormControls/HierarchyForm';\n\nconst HierarchyWindow: React.FC = () => {\n const navigate = useNavigate();\n const { ticketId } = useParams();\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const { data: ticket, isLoading } = TicketApi.useGetTicketQuery({ ticketId: parseInt(ticketId) });\n const [error, setError] = React.useState<string>();\n const [formState, setFormState] = useState({ isParent: false, parentCallId: 0 });\n const [updateHierarchy, { isLoading: updatingTicket }] = TicketApi.useUpdateTicketHierarchyMutation();\n const [removeHierarchy, { isLoading: removingHierarchy, error: removeError }] = TicketApi.useRemoveTicketHierarchyMutation();\n\n //Set the ticket details into the formstate\n useEffect(() => {\n if (ticket)\n setFormState({ isParent: ticket.Is_Parent, parentCallId: ticket.Parent_Call_Id > 0 ? ticket.Parent_Call_Id : null });\n }, [ticket]);\n\n //navigate back when the winow is closed\n const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\n }\n\n const onWindowClose = () => {\n navigate('/ticket/' + ticketId);\n }\n\n const handleParentChange = (event) => {\n setError(null);\n //console.log('handleParentChange', event)\n setFormState((s) => { return { ...s, isParent: event.value, parentCallId: null } });\n };\n\n //Make child\n const handleChildChange = (event) => {\n setError(null);\n //console.log('handleChildChange', event)\n setFormState((s) => { return { ...s, isParent: false, parentCallId: event ? event.value : 0 } });\n\n };\n const onTicketSelected = (Id?: number) => {\n setError(null);\n //console.log('onTicketSelected', Id)\n setFormState((s) => { return { ...s, parentCallId: Id } });\n };\n\n const handleRemove = () => {\n setFormState((s) => { return { ...s, isParent: null, parentCallId: null } });\n }\n\n const saveChanges = () => {\n console.log('saveChanges', formState);\n setError(null);\n\n //Child but no parent saelected\n if (!formState.isParent && formState.parentCallId === 0) {\n setError(`Please select a parent ${userProfile?.Phrases.CallPhrase} to make this a child`);\n return;\n }\n\n if (!formState.isParent && !formState.parentCallId) {\n removeHierarchy({ ticketId: parseInt(ticketId) }).unwrap().then((huh) => {\n onWindowClose();\n }).catch((e) => {\n toast.error('Error removing hierarchy');\n console.error(e);\n });\n } else {\n updateHierarchy({ ticketId: parseInt(ticketId), info: { Is_PArent: formState.isParent, Parent_Ticket_Id: formState.parentCallId } }).unwrap().then(() => {\n onWindowClose();\n });\n }\n }\n\n\n if (!userProfile?.Features.Call_Hierarchy) return <></>;\n\n return (\n <div>\n <Window modal={true} className='cool-window' minimizeButton={() => null} title={<><img src='./images/parent-child.png' className='mr-2' />{userProfile?.Phrases.CallPhrase} Hierarchy{formState?.isParent ? ': Parent' : formState?.parentCallId ? `: Child to ${formState?.parentCallId}` : ''}</>} onClose={onWindowClose} initialHeight={580} initialWidth={Math.min(1200, window.innerWidth)} stage={stage} onStageChange={onStageChange} >\n <div className='position-relative'>\n <div id='error-summary'>\n {error && <div className={\"k-messagebox k-messagebox-error\"}>{error}</div>}\n {/* Validation */}\n {removeError?.[\"data\"] && removeError?.[\"data\"] && (\n <div className={\"k-messagebox k-messagebox-error\"}>\n {removeError[\"data\"]?.Message || removeError[\"data\"]}\n </div>)}\n </div>\n {(isLoading || updatingTicket || removingHierarchy) && <PartialSpinny />}\n <HierarchyForm ticketId={ticket?.ID} isParent={formState?.isParent} parentCallId={formState?.parentCallId} onRemoveHierarchy={handleRemove} onChildChange={handleChildChange} onParentChange={handleParentChange} onTicketSelected={onTicketSelected} /> </div>\n <WindowActionsBar>\n <Button onClick={saveChanges} svgIcon={svg.saveIcon} type='submit' className='justify-content-end p-2' style={{ marginTop: '20px', color: '#fff', backgroundColor: userProfile?.Nav_Hex_Color }}>\n Save\n </Button>\n <Button fillMode='outline' onClick={() => onWindowClose()} svgIcon={svg.cancelIcon} className='justify-content-end p-2' style={{ marginTop: '20px' }}>\n Cancel\n </Button>\n </WindowActionsBar>\n </Window>\n </div>\n );\n};\n\nexport default HierarchyWindow;","import React, { useEffect, useState } from 'react';\nimport { Window, WindowActionsBar, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Button, ButtonGroup } from '@progress/kendo-react-buttons';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport EmailForm from './EmailForm';\nimport { isMobile } from 'react-device-detect';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport ConfirmClose from './ConfirmClose';\n\nconst EmailModal: React.FC = () => {\n const { ticketId } = useParams();\n const navigate = useNavigate();\n const [confirmCloseVisible, setConfirmCloseVisible] = useState(false);\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n\n //navigate back when the winow is closed\n const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\n }\n\n const onWindowClose = () => {\n setConfirmCloseVisible(true);\n //navigate(-1);\n }\n\n const goBack = () => {\n\n navigate('/ticket/' + ticketId);\n }\n\n //when in fullscreen mode set overflow hidden on the body to prevent scrolling\n useEffect(() => {\n if (stage === 'FULLSCREEN') {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'auto';\n }\n\n //when the component unmounts set overflow back to auto\n return () => {\n document.body.style.overflow = 'auto';\n }\n }, [stage]);\n\n return (<>\n <ConfirmClose ticketId={parseInt(ticketId)} visible={confirmCloseVisible} onClose={() => setConfirmCloseVisible(false)} onDiscard={goBack} />\n <Window modal={true} className='cool-window email-action-window' minimizeButton={() => null} title={<><SvgIcon size='large' icon={svg.envelopIcon} className='mr-2' ></SvgIcon>Send Email</>} onClose={onWindowClose} initialHeight={Math.min(window.innerHeight - 200, 900)} initialWidth={Math.min(Math.min(window.innerWidth - 200, 1200), window.innerWidth)} stage={stage} onStageChange={onStageChange} >\n <div className='position-relative'>\n <EmailForm formName='email-action-form-popup' showSaveButton={false} onsubmitted={() => {\n console.log('submitted');\n navigate(-1);\n }} />\n </div>\n <WindowActionsBar>\n <Button form='email-action-form-popup' svgIcon={svg.paperPlaneIcon} type='submit' className='p-2' style={{ width: '100px', marginTop: '20px', color: '#fff', backgroundColor: userProfile?.Nav_Hex_Color }}>\n Send\n </Button>\n {/* Close button */}\n <Button fillMode='outline' svgIcon={svg.cancelIcon} onClick={onWindowClose} className='p-2' style={{ width: '100px', marginTop: '20px' }}>\n Cancel </Button>\n </WindowActionsBar>\n </Window ></>\n );\n};\n\nexport default EmailModal;","import React, { useEffect, useState } from 'react';\nimport { Window, WindowActionsBar, WindowActionsEvent } from '@progress/kendo-react-dialogs';\nimport { Button, DropDownButton, DropDownButtonItemClickEvent, SplitButton } from '@progress/kendo-react-buttons';\nimport { Link, Outlet, Route, Routes, useNavigate, useParams } from 'react-router-dom';\nimport { isMobile } from 'react-device-detect';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { CompositeFilterDescriptor, filterBy } from '@progress/kendo-data-query';\nimport { TicketApi } from '../../../../../../redux/api/TicketApi';\nimport { UserApi } from '../../../../../../redux/api/UserApi';\nimport { PartialSpinny } from '../../../../../Nav/Spinny';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport KBResults from '../../../../FormControls/KBResuilts';\nimport { KBApi } from '../../../../../../redux/api/KBApi';\nimport { KBSearchProps } from '../../../../../../types/KB/KBSearchProps';\nimport { IKBSearchResult } from '../../../../../../types/KB/IKBSearchResult';\nimport { Card, CardBody, CardHeader, PanelBar, PanelBarItem } from '@progress/kendo-react-layout';\nimport { Checkbox, Input, InputChangeEvent } from '@progress/kendo-react-inputs';\nimport { useReduxDispatch, useReduxSelector } from '../../../../../../redux/hooks';\nimport { SetAction } from '../../../../../../slices/ActionSlice';\nimport { setNotes } from '../../../../../../slices/EmailActionSlice';\nimport { setActionExpanded } from '../../../../../../slices/TicketDetailUISlice';\nimport { ILinkedKB } from '../../../../../../types/KB/ILinkedKB';\nimport { unescape } from 'lodash';\nimport { AssetGrid } from '../../../../../Asset/AssetGrid';\nimport { ITicketAsset } from '../../../../../../types/Ticket/ITicketAsset';\nimport { IAsset } from '../../../../../../types/Asset/IAsset';\nimport { AssetApi } from '../../../../../../redux/api/AssetApi';\nimport { ITicketContact } from '../../../../../../types/Ticket/ITicketContact';\nimport AddAssetModal from '../../../../../Asset/AddAssetModal';\n\nconst AssetModal: React.FC = () => {\n const dispatch = useReduxDispatch();\n const navigate = useNavigate();\n const { ticketId } = useParams();\n const [stage, setStage] = useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n const { data: ticket, isLoading } = TicketApi.useGetTicketDetailsQuery({ ticketId: parseInt(ticketId) });\n const [useDesc, setUseDesc] = React.useState<boolean>(true);\n const [description, setDescription] = React.useState<string>();\n const [freeText, setFreeText] = React.useState<string>();\n const [filter, setFilter] = useState<CompositeFilterDescriptor>(null)\n const [linkedAssets, setLinkedAssets] = useState<ITicketAsset[]>([]);\n type assContacts = { contacts: ITicketContact[], hasChanged: boolean };\n const [associatedContacts, setAssociatedContacts] = useState<assContacts>({} as assContacts);\n const [saveAssociatedContacts, { isLoading: savingContacts }] = TicketApi.useSaveAssociatedContactsMutation();\n const [error, setError] = useState<string>();\n const [saveTicketAssets, { isLoading: saving }] = TicketApi.useSaveLinkedAssetsMutation();\n const from = new URLSearchParams(window.location.search).get('from');\n const { data: tenant } = UserApi.useGetTenantQuery()\n const { data: ticketAssets, isLoading: loadingAssets } = TicketApi.useGetLinkedAssetsQuery(ticket?.ID, { skip: !ticket?.ID });\n\n //Load the existing linked Kbs into state\n useEffect(() => {\n if (ticketAssets) {\n setLinkedAssets(ticketAssets);\n }\n }, [ticketAssets]);\n\n //Load associated COntacts for the ticket\n useEffect(() => {\n if (ticket) {\n setAssociatedContacts({ contacts: ticket.AssociatedContacts, hasChanged: false });\n }\n }, [ticket]);\n\n const contactSelected = (e: { value: ITicketContact[] }) => {\n setAssociatedContacts({ contacts: e.value, hasChanged: true });\n }\n\n const onFilter = (event: InputChangeEvent) => {\n console.log('Filter', event);\n //setStaff(filterBy(staffList?.slice(), event.filter));\n setFilter({ filters: [{ value: event.value, field: 'Title', operator: 'contains' }] } as CompositeFilterDescriptor);\n }\n const filteredResults = ticketAssets ? filterBy(ticketAssets, filter) : [];\n\n //navigate back when the winow is closed\n const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\n }\n\n const onWindowClose = () => {\n navigate('/ticket/' + ticketId);\n }\n\n const onSearchClicked = () => {\n //doSearch();\n }\n\n const onItemClick = (event: DropDownButtonItemClickEvent) => {\n setError('')\n\n //go back\n //navigate(-1);\n }\n\n const saveLinkedAsset = () => {\n Promise.all([\n associatedContacts?.hasChanged && saveAssociatedContacts({ ticketId: ticket.ID, contactIds: associatedContacts.contacts?.map(c => c.Contact_Id) }).unwrap(),\n saveTicketAssets({ ticketId: ticket.ID, assets: linkedAssets, append: false }).unwrap()\n ])\n .then(() => {\n navigate('/ticket/' + ticketId);\n })\n .catch((err) => {\n setError(err.message || 'An error occurred while saving.');\n });\n\n }\n\n const assetSelected = (e: { value: IAsset[] }) => {\n setLinkedAssets(e.value.map(a => { return { Asset_Id: a.ID, Call_Id: ticket?.ID, Contact_Id: a.Contact_Id > 0 ? a.Contact_Id : 0 } as ITicketAsset }));\n }\n\n\n const { data: assets } = AssetApi.useGetAssetsQuery({ contactId: 0, locationId: ticket.Company_Address_Id }, { skip: !ticket.Company_Address_Id })\n\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 selectedLocationAssetCount = linkedAssets?.filter(a => a.Contact_Id !== ticket.Company_Contact).length;\n const selectedContactAssetCount = linkedAssets?.filter(a => a.Contact_Id === ticket.Company_Contact).length;\n\n if (!userProfile?.Features.Call_Hierarchy) return <></>;\n const canAdd = userProfile?.Features.Add_Asset;\n return (\n <div>\n <Window modal={true} className='cool-window' minimizeButton={() => null} title={<div className='flex align-items-center'><SvgIcon icon={svg.toggleFullScreenModeIcon} /> Asset Results</div>} onClose={onWindowClose} initialHeight={Math.min(850, window.innerHeight)} initialWidth={Math.min(1200, window.innerWidth)} stage={stage} onStageChange={onStageChange} >\n <div className='position-relative'>\n <Outlet></Outlet>\n {(isLoading || saving || loadingAssets || savingContacts) && <PartialSpinny />}\n <Card>\n <CardBody>\n {/* <AssetGrid selectedAssets={linkedAssets.map(l => l.Asset_Id)} companyId={ticket?.Company_Id} locationId={ticket.Company_Address_Id} contactId={ticket.Company_Contact} onChange={assetSelected} /> */}\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={linkedAssets.map(l => l.Asset_Id)} />\n </PanelBarItem>\n <PanelBarItem selected={true} expanded={false} title={`${ticket.Address_Name || ''} ${userProfile.Phrases.Asset}s (${selectedLocationAssetCount} of ${locationAssets?.length || 0} selected)`} >\n <AssetGrid showContactLinkColumn={true} associatedContacts={associatedContacts?.contacts} contactId={ticket.Company_Contact} locationId={ticket.Company_Address_Id} companyId={ticket.Company_Id} onContactChange={contactSelected} onChange={assetSelected} selectedAssets={linkedAssets.map(l => l.Asset_Id)} />\n </PanelBarItem>\n </PanelBar>\n </CardBody>\n </Card>\n </div>\n <WindowActionsBar>\n <h6>{linkedAssets?.length} selected</h6>\n <Button className='rev-primary-button' size='large' onClick={saveLinkedAsset} svgIcon={svg.linkIcon} >{`Link ${userProfile?.Phrases.Asset}s to ${userProfile?.Phrases.CallPhrase}`}</Button>\n {canAdd && <Button title={`Add ${userProfile?.Phrases.Asset}`} size='large' style={{ backgroundColor: '#bfbfbf' }} onClick={() => navigate('add')} svgIcon={svg.plusOutlineIcon} >{`${userProfile?.Phrases.Asset}`}</Button>}\n <Button fillMode='outline' onClick={() => onWindowClose()} svgIcon={svg.cancelIcon} className='justify-content-end' size='large'>\n Cancel\n </Button>\n </WindowActionsBar>\n </Window>\n </div >\n );\n};\n\nexport default AssetModal;","import React, { useEffect } from \"react\";\nimport { Window, WindowActionsBar, WindowActionsEvent, WindowMoveEvent } from '@progress/kendo-react-dialogs';\nimport { Outlet, useLocation, useNavigate, useParams } from 'react-router-dom'\nimport { TicketLocationState } from \"../Ticket/TicketRoute\";\nimport { Api } from \"../../redux/api/BaseApi\";\nimport { isMobile } from 'react-device-detect';\nimport { useReduxDispatch, useReduxSelector } from \"../../redux/hooks\";\nimport AddAction from \"../Ticket/TicketDetails/Sections/AddAction\";\nimport { TicketApi } from \"../../redux/api/TicketApi\";\nimport * as ActionSlice from \"../../slices/ActionSlice\";\n\n\nconst ActionModal: React.FunctionComponent<any> = props => {\n let { ticketId, actionId } = 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 const dispatch = useReduxDispatch();\n let goBack = () => {\n\n if (previousPage)\n navigate(previousPage);\n else\n navigate('/ticket/' + ticketId);\n };\n const { action: existingAction } = useReduxSelector(state => state.actionDetails);\n const { data: details, isFetching } = TicketApi.useGetTicketDetailsQuery({ ticketId: Number(ticketId) });\n const [stage, setStage] = React.useState(isMobile ? 'FULLSCREEN' : 'DEFAULT');\n const [dialogVisible, setDialogVisible] = React.useState<boolean>(false);\n // const [expanded, setExpanded] = React.useState<boolean>(true);\n const maxHeight = Math.min(window.innerHeight - 200, 600);\n const [size, setSize] = React.useState<windowDims>({ w: Math.max(window.innerWidth - 200, Math.min(500, window.innerWidth)), 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 const onStageChange = (e: WindowActionsEvent) => {\n //setVisible(false);\n setStage(e.state)\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 //when in fullscreen mode set overflow hidden on the body to prevent scrolling\n useEffect(() => {\n if (stage === 'FULLSCREEN') {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = 'auto';\n }\n\n //when the component unmounts set overflow back to auto\n return () => {\n document.body.style.overflow = 'auto';\n }\n }, [stage]);\n\n const requiredStyleClass = `.k-window .k-window-titlebar{\n background-color: ${userProfile?.Nav_Hex_Color}; \n color:#fff;\n }\n .k-window{background-color: #ddd;}`\n\n return (\n <>\n <style>\n {requiredStyleClass}\n </style>\n <Window minimizeButton={() => null} onMove={moving} top={size.t} left={size.l} width={size.w} height={size.h} onResize={resizing} className={stage === 'FULLSCREEN' ? 'edit-action-window full-screen' : 'edit-action-window'} onClose={goBack} title={`${existingAction?.ID == 0 ? 'New' : 'Edit'} ${userProfile?.Phrases.Action || '...'}`} modal={true} stage={stage} onStageChange={onStageChange} >\n\n <AddAction ticket={details} actionId={parseInt(actionId)} onsubmitted={() => {\n navigate('/ticket/' + ticketId);\n }} />\n <Outlet />\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, { useEffect, useState } from 'react';\nimport { Window } from '@progress/kendo-react-dialogs';\nimport { ITicketProps } from '../../types/Ticket/ITicket';\nimport { Outlet, useNavigate, useParams } from 'react-router-dom';\nimport { useGetTenantQuery } from '../../redux/api/BaseApi';\nimport { isMobile } from 'react-device-detect';\nimport { SvgIcon } from '@progress/kendo-react-common';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { TicketApi } from '../../redux/api/TicketApi';\nimport { PartialSpinny } from '../Nav/Spinny';\nimport { AssetApi } from '../../redux/api/AssetApi';\nimport { useReduxDispatch } from '../../redux/hooks';\n\ninterface AddAssetModalProps {\n\n}\n\nconst AddAssetModal: React.FC<AddAssetModalProps> = () => {\n const dispatch = useReduxDispatch();\n const { ticketId } = useParams();\n const { data: ticket } = TicketApi.useGetTicketDetailsQuery({ ticketId: Number(ticketId) });\n const [saveTicketAssets, { isLoading: saving }] = TicketApi.useSaveLinkedAssetsMutation();\n const navigate = useNavigate();\n const { data: tenant } = useGetTenantQuery()\n const goBack = () => {\n navigate(-1);\n }\n\n useEffect(() => {\n //Add event listener for Events that get posted when a Asset 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 === 'asset_created' && 'assetId' in messageObj) {\n if (messageObj.assetId != '0') {\n\n console.log('assetId', messageObj.assetId);\n //Link the new asset to the ticket\n saveTicketAssets({ ticketId: ticket.ID, assets: [{ Call_Id: ticket.ID, Asset_Id: messageObj.assetId }], append: true }).unwrap().then(() => {\n //Clear the searhc asset cache\n dispatch(AssetApi.util.invalidateTags([\"GetAssets\"]));\n navigate('/ticket/' + ticket?.ID + '/assets')\n });\n\n } else {\n navigate('/ticket/' + ticket?.ID);\n }\n //props.userCreated && props.userCreated({ Contact_Id: messageObj.contactId }); \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 <Window modal={true} minimizeButton={() => null} className='dashboard cool-window' title={<><SvgIcon size='large' icon={svg.printIcon} className='mr-2' ></SvgIcon>Add Asset </>} onClose={goBack} initialHeight={800} initialWidth={Math.min(1000, window.innerWidth)}>\n {saving && <PartialSpinny />}\n <iframe src={tenant.Tenant_Url + '/Asset_Mgr/Asset.aspx?Origin=AssetPopup&Contact_Id=' + ticket?.Company_Contact.toString()} width=\"100%\" height=\"100%\" />\n </Window>\n </>\n );\n};\n\nexport default AddAssetModal;","\nimport React from 'react'\nimport { HashRouter, Route, Routes, useLocation } from 'react-router-dom'\nimport DeleteAction from './TicketDetails/Sections/DeleteAction';\nimport AttachmentsPopup from './TicketDetails/Sections/AttachmentsPopup';\nimport ValidationPopup from './TicketDetails/Sections/Tools/Close/ValidationPopup';\nimport Share from './TicketDetails/Sections/Share';\nimport MapView from './TicketDetails/Sections/MapView';\nimport PrintWindow from './TicketDetails/Sections/Tools/Print/PrintWindow';\nimport ActionFilter from './TicketDetails/Sections/Tools/Filter/ActionFilter';\nimport KBModal from './TicketDetails/Sections/Tools/KB/KBModal';\nimport RelatedTicketsModal from './TicketDetails/Sections/Tools/Related/RelatedTicketsModal';\nimport AssignedModal from './TicketDetails/Sections/Tools/Reassign/AssignedModal';\nimport AINotes from './TicketDetails/Sections/AINotes';\nimport DeleteDockItem from './TicketDetails/Sections/Dock/DeleteDockItem';\nimport HierarchyWindow from './TicketDetails/Sections/Tools/Hierarchy/HierarchyModal';\nimport EmailModal from './TicketDetails/Sections/Tools/Email/EmailModal';\nimport AssetModal from './TicketDetails/Sections/Tools/Assets/AssetModal';\nimport ActionModal from '../Action/ActionModal';\nimport AddAssetModal from '../Asset/AddAssetModal';\n\nconst TicketRoutes: React.FC = (props) => {\n let location = useLocation();\n let background = location.state && (location.state as TicketLocationState).background;\n let k = 1;\n return (\n <Routes>\n <Route path=\"contact/:contactId/*\" />\n <Route path=\"action\" element={<ActionModal index={8} key={k++} />}>\n <Route path=\"Kbase\" element={<KBModal key={k++} />} />\n </Route>\n <Route path=\"action/:actionId\" element={<ActionModal index={8} key={k++} />} />\n <Route path=\"action/:actionId/delete\" element={<DeleteAction key={k++} />} />\n <Route path=\"action/:actionId/files\" element={<AttachmentsPopup key={k++} />} />\n <Route path=\"files/:id\" element={<AttachmentsPopup key={k++} />} />\n <Route path=\"files\" element={<AttachmentsPopup key={k++} />} />\n <Route path=\"close\" element={<ValidationPopup key={k++} />} />\n <Route path=\"map\" element={<MapView key={k++} />} />\n <Route path=\"close/:statusId\" element={<ValidationPopup key={k++} />} />\n <Route path=\"share\" element={<Share key={k++} />} />\n <Route path=\"print\" element={<PrintWindow key={k++} />} />\n <Route path=\"filter\" element={<ActionFilter key={k++} />} />\n <Route path=\"email\" element={<EmailModal key={k++} />} />\n <Route path=\"parent-child\" element={<HierarchyWindow key={k++} />} />\n <Route path=\"unpin/:pinId\" element={<DeleteDockItem key={k++} />} />\n <Route path=\"notes\" element={<AINotes key={k++} />} />\n <Route path=\"ownership\" element={<AssignedModal key={k++} />} />\n <Route path=\"related\" element={<RelatedTicketsModal key={k++} />} />\n <Route path=\"Kbase\" element={<KBModal key={k++} />} />\n <Route path=\"assets\" element={<AssetModal key={k++} />}>\n <Route path=\"add\" element={<AddAssetModal key={k++} />} />\n {/* <Route index={true} element={<AssetModal key={k++} />} /> */}\n </Route>\n <Route path=\"add-asset\" element={<AddAssetModal key={k++} />} />\n </Routes>)\n\n}\n\nexport interface TicketLocationState {\n background?: Location;\n}\n\nexport default TicketRoutes;\n","import React, { useContext, useEffect, useRef } from 'react';\nimport { useReduxSelector, useReduxDispatch } from '../../../redux/hooks';\nimport { TicketApi } from '../../../redux/api/TicketApi';\nimport { Outlet, useNavigate, useParams, Route, Routes } from 'react-router-dom';\nimport { Card, CardHeader, CardBody, CardFooter, Drawer } from '@progress/kendo-react-layout';\nimport './TicketDetailsPage.scss';\nimport CustomForm from './Sections/CustomForm';\n//import { SvgIcon } from '@progress/kendo-react-common';\n//import { folderIcon, calendarIcon, arrowLeftIcon, arrowRightIcon } from '@progress/kendo-svg-icons';\nimport Actions from './Sections/Actions';\nimport { IUserProfile } from '../../../types/User/IUserProfile';\nimport { RevUserContext } from '../../../context/UserContext';\nimport AddAction from './Sections/AddAction';\nimport { RightBar } from '../../RightBar/RightBar';\nimport Dockbar from './Sections/Dock/Dockbar';\nimport AISummary from './Sections/AISummary';\nimport { setActionExpanded } from '../../../slices/TicketDetailUISlice';\nimport { setDetails } from '../../../slices/TicketDetailSlice';\nimport ActionToolbar from './Sections/ActionToolbar';\nimport EmailAction from './Sections/Tools/Email/EmailAction';\nimport TicketHeader from './Sections/TicketHeader';\nimport { ITicketProps } from '../../../types/Ticket/ITicket';\nimport '../../../styles/themes.scss';\nimport createTheme from '../../../styles/themes';\nimport Sidebar from './Sections/Sidebar';\nimport TicketStoryLine2 from './Sections/Tools/Storyline/TicketStoryLine2';\nimport TicketStoryLine3 from './Sections/Tools/Storyline/TicketStoryLine3';\nimport LegacyBanner from './Sections/LegacyBanner';\nimport AddActionButton from './Sections/AddActionButton';\nimport ActionExpander from './Sections/ActionExpander';\nimport { PartialSpinny, Spinny } from '../../Nav/Spinny';\nimport ErrorCard from '../../Common/ErrorCard';\nimport { CloseDialogProvider } from './Sections/Tools/Close/CloseDialogContext';\nimport { useCloseTicketLogic } from '../../../hooks/useCloseTicketLogic';\nimport ActionTabs from './Sections/ActionTabs';\nimport TicketRoute1 from '../TicketRoute';\nimport TicketRoutes from '../TicketRoute';\n\nconst TicketDetailsPage = () => {\n const navigate = useNavigate();\n const profile = useContext<IUserProfile>(RevUserContext)\n const { ticketId } = useParams()\n const { data: details, isFetching, error } = TicketApi.useGetTicketDetailsQuery({ ticketId: Number(ticketId) });\n const dispatch = useReduxDispatch();\n const viewName = useReduxSelector(state => state.ticketDetailsUI.viewName);\n const [markAsRead] = TicketApi.useReadTicketMutation();\n //const viewName: string = 'notes' \n const { isClosing, error: closeError } = useCloseTicketLogic(profile);\n\n if (isFetching === false && error && error['status'] === 404) {\n navigate('/ticket/not-found');\n }\n\n\n //Check if this is a staff member or enduser\n var isStaff = profile?.Features?.External_Interface === false;\n\n React.useEffect(() => {\n if (details) {\n console.log('TicketDetailsPage mounted', ticketId);\n dispatch(setDetails(details));\n markTicketAsRead();\n }\n\n }, [details]);\n\n\n const markTicketAsRead = () => {\n markAsRead({ ticketId: Number(ticketId) }).unwrap();\n }\n\n //if (!details) return <Spinny /\n\n\n // return <><Dockbar />\n // <Actions {...details} /></>\n //Onlt show loading on initial fetch when details is null OR when changing tickets and the Ticket IDs don't match\n const props = {\n ...details, ID: parseInt(ticketId),\n Is_Loading: details === null ? isFetching : (isFetching && ticketId != details?.ID.toString())\n } as ITicketProps\n\n const pageThemeCSS = createTheme(profile.Body_Hex_Color, profile?.Body_Style, profile?.Body_Image_Url);\n\n // function useTraceUpdate(props) {\n // const prev = useRef(props);\n // useEffect(() => {\n // const changedProps = Object.entries(props).reduce((ps, [k, v]) => {\n // if (prev.current[k] !== v) {\n // ps[k] = [prev.current[k], v];\n // }\n // return ps;\n // }, {});\n // if (Object.keys(changedProps).length > 0) {\n // //console.warn('Changed props:', changedProps);\n // }\n // prev.current = props;\n // });\n // }\n\n // useTraceUpdate(props);\n\n //log every time props change\n // useEffect(() => {\n // console.log('props changed', props);\n // }, [props]);\n\n if (error && error['originalStatus'] === 500) {\n console.log('ERROR', error);\n return <ErrorCard message={`Unexpected error while fetching details for ticket #${ticketId}. Code 500 API error: `} details={error['data']} />\n }\n\n //First load\n if (!details) return <Spinny />\n let k = 1;\n return (<>\n <CloseDialogProvider>\n <TicketRoutes />\n <RightBar>\n <div className={`ticket-details-page overflow-auto`} style={pageThemeCSS}>\n <div className=\"container\">\n <LegacyBanner {...props} />\n <Outlet></Outlet>\n <div className=\"row\">\n <Sidebar {...props} >\n <div className=\"col-lg col-12 content\">\n <Dockbar {...details} />\n <TicketHeader {...props} />\n {/* Custom Forms */}\n {!props.Is_Loading && <CustomForm {...details} />}\n <ActionTabs />\n\n <div className=\"actions-section\">\n <Card>\n <CardHeader className='header'>\n <ActionToolbar {...props} />\n </CardHeader>\n <CardBody>\n <ActionExpander />\n {viewName === 'notes' && <div className=\"action-form\">\n {/* <div className={showAction ? 'action-form-hidden action-form d-flex flex-column' : 'action-form-hidden d-flex flex-column'}> </div> */}\n <div className={'collapse'} id='collapseAction'>\n <AddAction showHeader={true} ticket={details} onsubmitted={() => dispatch(setActionExpanded(0))} onclosed={() => dispatch(setActionExpanded(0))} />\n </div>\n <div className={'collapse'} id='collapseEmail'>\n <EmailAction onpopout={() => dispatch(setActionExpanded(0))} onsubmitted={() => dispatch(setActionExpanded(0))} onclosed={() => dispatch(setActionExpanded(0))} />\n </div>\n <Actions {...props} />\n </div>}\n {viewName === 'summary' && <AISummary {...props} />}\n {viewName === 'timeline' && <TicketStoryLine2 {...props} />}\n </CardBody>\n <CardFooter></CardFooter>\n </Card>\n </div>\n </div>\n </Sidebar>\n </div>\n </div >\n </div>\n </RightBar >\n </CloseDialogProvider>\n </>\n );\n};\n\nexport default TicketDetailsPage;","import React from 'react';\nimport { useParams } from 'react-router-dom';\nimport RevelationIframe from './RevelationIframe';\n\nconst LegacyUserInfoPage: React.FC = () => {\n const { userId } = useParams();\n return (\n <RevelationIframe url={'/contacts/contactinfo.aspx?contact_id=' + userId} />);\n\n}\n\nexport default LegacyUserInfoPage","import { SvgIcon } from '@progress/kendo-react-common';\nimport React, { useContext } from 'react';\nimport * as svg from '@progress/kendo-svg-icons';\nimport { Button } from '@progress/kendo-react-buttons';\nimport { useNavigate } from 'react-router-dom';\nimport { Card, CardBody, CardFooter, CardHeader } from '@progress/kendo-react-layout';\nimport { RevUserContext } from '../../../context/UserContext';\nimport createTheme from '../../../styles/themes';\nimport { IUserProfile } from '../../../types/User/IUserProfile';\nimport { UserApi } from '../../../redux/api/UserApi';\n\nconst TicketNotFound: React.FC = () => {\n const nav = useNavigate();\n const profile = useContext<IUserProfile>(RevUserContext)\n const pageThemeCSS = createTheme(profile.Body_Hex_Color, profile?.Body_Style, profile?.Body_Image_Url);\n const { data: userProfile } = UserApi.useGetUserProfileQuery();\n\n\n return (\n <div className='flex flex-grow' style={pageThemeCSS}>\n <div className=\" w-auto mt-3 m-auto\">\n <Card>\n <CardHeader className='alert alert-warning'>\n <div className='flex' style={{ alignItems: 'center', textAlign: 'center' }}>\n <SvgIcon icon={svg.warningCircleIcon} size='xxlarge' />\n\n <h1 style={{ width: '100%', fontSize: '2em', marginBottom: '20px', marginLeft: '20px' }}>Oops! <br />404 - {userProfile?.Phrases.CallPhrase} Not Found</h1>\n <i style={{ width: '32px' }}></i>\n </div>\n </CardHeader>\n <CardBody>\n <p style={{ fontSize: '1.5em' }}>The {userProfile?.Phrases.CallPhrase} you are looking for does not exist, has been removed or you do not have permissions to view it.</p>\n </CardBody>\n <CardFooter >\n <Button onClick={() => nav(-2)} size='large'>< Go Back</Button>\n </CardFooter>\n </Card >\n </div>\n </div>\n );\n};\n\nexport default TicketNotFound;\n","import React from 'react'\nimport { BrowserRouter, Outlet, 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 ContactsPage from \"../RightBar/Contacts/ContactsPage\";\nimport ChatPageWrapper from '../Chat/ChatPageWarpper';\nimport LogTicketFromChat from '../Chat/LogTicketFromChat';\nimport TicketDetailsPage from '../Ticket/TicketDetails/TicketDetailsPage';\nimport StatusList from '../Ticket/ListControls/StatusList';\nimport { FieldRenderProps } from '@progress/kendo-react-form';\nimport LegacyUserInfoPage from '../Revelation/LegacyUserInfoPage';\nimport TicketNotFound from '../Ticket/TicketDetails/TicketNotFound';\nimport { Spinny } from '../Nav/Spinny';\n\nexport const AppRoutes = () => {\n\n //Make sure we are not loading this page in an Iframe\n if (window.self !== window.top) {\n window.top.location = window.self.location.href;\n return <Spinny />\n }\n\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=\"/test\" element={<StatusList {...{} as FieldRenderProps} />} key={k++} />\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 <Route element={<Navbar />} key={k++}>\n <Route path=\"/\" element={<RevelationIframe />} key={k++} />\n <Route path=\"/admin\" element={<RevelationIframe url='/adminUX/DynamicUI/Default.aspx?PageName=HelpdeskSetup' />} key={k++} />\n <Route path=\"/user/:userId\" element={<LegacyUserInfoPage />} key={k++} />\n <Route path=\"/deeplink\" element={<Deeplink />} key={k++} />\n <Route path=\"/ticket/not-found/\" element={<TicketNotFound />}></Route>\n <Route path=\"/ticket/:ticketId/\" element={<TicketDetailsPage />}>\n <Route path=\"*\" />\n </Route>\n {trustedRevelationRoutes.map(t => <Route path={t} key={k++} element={<Deeplink />} />)}\n\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/new\">\n <Route path=\"\" element={<><TicketModal index={9} /></>} key={k++} />\n <Route path=\"*\" element={<><TicketModal index={9} /></>} key={k++} />\n </Route>\n <Route path=\"/ticket/modal/:Id/*\" element={<TicketModal index={18} key={k++} />} />\n <Route path=\"/ticket/\" element={<TicketModal index={6} />} />\n </Route>\n {/* <Route path=\"/ticket/:ticketId\" element={<TicketDetailsPage key={k++} />} /> */}\n\n <Route path=\"/chat\" element={<ChatPageWrapper />} key={k++} />\n <Route path=\"/chat/:id/*\" element={<ChatPageWrapper />} key={k++} />\n </Route>\n </Routes>\n </>\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\";\n//import \"./styles/themes.css\";\nimport { BrowserRouter, 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 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, tenant, tenantNotFound);\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\n console.log('DONE newUserManager.signinRedirect')\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 console.log('FINISHED loadUser', newUser, stateUser)\n\n }\n setUserManager(newUserManager);\n\n console.log('FINISHED newUserManager.signinRedirect')\n\n }\n\n const signOut = async () => {\n let settings = oAuthSettings;\n if (tenant?.Authority)\n settings.authority = tenant?.Authority\n\n let userManager = createUserManager(settings)\n await userManager.signoutRedirect({\n extraQueryParams: { logoutMessage: 'Session expired due to inactivity' },\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, 'expires_In_min', stateUser?.user?.expires_in / 60, 'expire_date', new Date(new Date().getTime() + stateUser?.user?.expires_in * 1000))\n\n useEffect(() => {\n //user probably expoired, due to ideal tab, sign nout\n if (!stateUser?.user && !stateUser?.isLoadingUser) {\n //No blank screen\n //return <></>\n console.warn('App.tsx Redirecting to sign in', userManager, stateUser, isAuthenticating)\n //signOut();\n //Try sign in again\n // signIn().catch((err) => {\n // console.warn('oops', err)\n // });\n }\n }, [stateUser])\n\n if (isAuthenticating) return <Spinny text=\"Authenticating....\" />\n return (\n <>\n <Routes>\n {/* microfrontend test */}\n <Route path=\"/signout\" element={<SignoutPage />} />\n <Route path=\"/error/noauth\" element={<NoAuthServer />} />\n {userManager && <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.error('Error in useGetTenantQuery, BLANK', settings);\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 React from 'react';\nimport { createRoot } from 'react-dom/client';\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';\nimport \"bootstrap/dist/js/bootstrap.min.js\";\nimport { TestPage } from './components/Test/TestPage';\n\nTimeAgo.addDefaultLocale(en)\n\n// After\nconst container = document.getElementById('root');\nconst root = createRoot(container!); // createRoot(container!) if you use TypeScript\nroot.render(\n // <AppInsightsContext.Provider value={reactPlugin}></AppInsightsContext.Provider>\n <Provider store={store}>\n <BrowserRouter basename={process.env.PUBLIC_URL} future={{\n v7_relativeSplatPath: true,\n }}>\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\n);\n\n// const root = document.getElementById(\"root\");\n// render(\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","var map = {\n\t\"./black-brush-theme.json\": 8803,\n\t\"./black-paint-theme.json\": 1291,\n\t\"./black-swirl-theme.json\": 2556,\n\t\"./black-wave-theme.json\": 2684,\n\t\"./blue-brush-theme.json\": 2938,\n\t\"./blue-paint-theme.json\": 7174,\n\t\"./blue-swirl-theme.json\": 449,\n\t\"./blue-wave-theme.json\": 583,\n\t\"./dblue-brush-theme.json\": 8040,\n\t\"./dblue-paint-theme.json\": 2140,\n\t\"./dblue-swirl-theme.json\": 7847,\n\t\"./dblue-wave-theme.json\": 2877,\n\t\"./default-theme.json\": 5020,\n\t\"./green-brush-theme.json\": 5283,\n\t\"./green-paint-theme.json\": 4027,\n\t\"./green-swirl-theme.json\": 9052,\n\t\"./green-wave-theme.json\": 6172,\n\t\"./orange-brush-theme.json\": 5980,\n\t\"./orange-paint-theme.json\": 2856,\n\t\"./orange-swirl-theme.json\": 4659,\n\t\"./orange-wave-theme.json\": 1657,\n\t\"./primary-theme.json\": 9747,\n\t\"./purple-brush-theme.json\": 9116,\n\t\"./purple-paint-theme.json\": 8408,\n\t\"./purple-swirl-theme.json\": 2099,\n\t\"./purple-wave-theme.json\": 1913,\n\t\"./red-brush-theme.json\": 4835,\n\t\"./red-paint-theme.json\": 6635,\n\t\"./red-swirl-theme.json\": 9420,\n\t\"./red-wave-theme.json\": 8284,\n\t\"./white-brush-theme.json\": 8141,\n\t\"./white-paint-theme.json\": 8173,\n\t\"./white-swirl-theme.json\": 2038,\n\t\"./white-wave-theme.json\": 5838,\n\t\"./yellow-brush-theme.json\": 2090,\n\t\"./yellow-paint-theme.json\": 1510,\n\t\"./yellow-swirl-theme.json\": 2529,\n\t\"./yellow-wave-theme.json\": 2935\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5136;"],"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","baseQuery","fetchBaseQuery","baseUrl","prepareHeaders","async","headers","_ref","_auth$user","getState","token","auth","user","access_token","set","Api","createApi","reducerPath","args","api","extraOptions","result","error","status","toast","JSON","stringify","tagTypes","concat","endpoints","build","getTenant","query","tenantUid","revTenantCookie","Cookies","document","host","providesTags","renewlicense","mutation","url","method","releaselicense","getAssContactConfig","clientTypeId","getAssociatedContacts","ticketId","getUserProfile","uid","console","log","invalidateProfile","queryFn","data","invalidatesTags","updateFocusedViewToggle","info","body","Collapsed","onQueryStarted","_ref2","dispatch","queryFulfilled","postResult","util","updateQueryData","undefined","draft","Nav_Collapsed","undo","getTicketTimelineImage","Accept","responseHandler","reader","FileReader","Promise","resolve","reject","onload","base64data","onerror","err","response","blob","then","readAsDataURL","getTimelineImage","_ref3","projectId","slaId","priorityId","getPriority","getSLA","getSearchType","getUserFyndConfig","getUsers","_ref4","companyId","locationId","postUserFynd","SearchPhrase","postSearchQuick","updateSearchType","_ref5","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","searchContacts","filter","getContacts","props","favsOnly","pageLetter","thisContactId","groupByOffice","getUser","debugTimezone","getTeams","getTeam","Id","getLogOptions","getRoles","getSetting","settingId","saveSetting","setting","getClientTypeFilters","getUserClassification","postLogOptions","options","postClientTypeFilter","dismissIntro","featureId","updateNotes","overrideExisting","ProjectApi","getProjectList","getProjectTypeList","getWorkstreams","getProject","getForm","formId","getFormConfig","getProjectAssignment","getFormByProject","getSLAList","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","selectedForm","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","TicketDetailSlice","details","Actions","form","isClosing","setIsClosing","setForm","setDetails","setField","_state$form","_state$form$Fields","_state$form2","TicketDetailUISlice","viewName","menuExpanded","actionExpanded","flaggedNotes","hasNotes","expanded","setFlaggedNotesExpanded","setFlaggedNotesExist","setMenuExpanded","setView","setActionExpanded","initialActionState","initialUiSettings","Bill_Time_Enabled","NonBill_Time_Enabled","ActionSlice","settings","translateOption","translatingStatus","originalNote","ResetAction","Action_Dt","SetAction","SetTranslatingStatus","SetTranslationOption","SetOriginalNote","SetBill","Billable_Time","SetNonBill","Non_Billable_Time","SetUISettings","SetHTML_Notes","HTML_Notes","SetQuickNote","Quick_Note_Id","actionTypeId","Private_Actions","Private_Notes_Always_On","Staff_Id","Default_Time","Action_Type_Id","FeedSlice","feedItems","LastId","SetFeedItems","FavoriteSlice","favorites","saveFavorites","toggleState","RightBarSlice","RightBarInitialState","updateToggleState","emailActionSlice","email","HTML_Note","setNotes","setOriginalNote","setTranslationOption","setFrom","From","setTo","To","setCC","CC","setShowCC","Show_CC","setShowBCC","Show_BCC","setBCC","BCC","setSubject","Subject","setBillable","setNonBillable","setTicketId","setTemplateId","resetForm","searchTerm","showSystemActions","authorAndOr","authorIds","actionTypeIds","actionTypeAndOr","searchTermOption","dateRange","customStartDate","customEndDate","hasReactions","filterSlice","setFilter","setSearchTerm","setSearchTermOption","setAuthorAndOr","setAuthors","setActionTypes","setActionTypeAndOr","setDateRange","setStartDate","setEndDate","setShowSystemActions","setHasReaction","resetFilters","Object","keys","key","FileSlice","files","ResetFiles","SetFiles","KBSlice","results","selectKbs","previewKbId","SetResults","SetPreview","RevelationIframeSlice","isFirstIframeRequest","currentIframeSrc","iFrameLoading","mimicUid","uniqueId","setIframeLoaded","updateIframeSrc","indexOf","nanoid","mimicUser","cancelMimic","setFirstIframeRequest","rtkQueryErrorLogger","next","isRejectedWithValue","warn","dynamicMiddlewaresInstance","createDynamicMiddlewares","staticReducers","kb","KBReducer","FileReducer","ticketDetails","TicketDetailReducer","ticketDetailsUI","TicketDetailUIReducer","newTicket","TicketReducer","actionDetails","ActionReducer","oidcReducer","FilterReducer","rightBar","RightBarReducer","nav","NavReducer","count","CountReducer","feed","FeedReducer","favs","FavoriteReducer","emailAction","EmailActionReducer","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","CardActions","color","Link","to","Button","themeColor","size","icon","RevelationContext","stateUser","profile","skip","createUserManager","signoutRedirect","Tenant_Uid","primarystyle","Nav_Hex_Color","coolWindowStyle","Provider","position","NoAuthServer","params","useSearchParams","get","AssetApi","getAssets","contactId","TicketApi","getTicketForm","readTicket","updateTicketHierarchy","removeTicketHierarchy","updateTicketForm","fields","updateAction","updateType","typeId","Overwrite","updateSLA","slaID","shareTicket","share","getTicketConfig","getTypeList","parentId","getMyTypeList","getSLAConfig","getTicket","populateFormData","populateActions","getTicketDetails","getActions","take","encodeURIComponent","a","join","getAction","actionId","getActionTypes","getTicketActionTypes","getTicketAuthors","getTicketEmailTemplates","getOpenTickets","getStatuses","getMyStatuses","getStatus","getStateHistory","getOpenEndUserTickets","Uid","getOpenParentTickets","getChildTickets","iticketId","getQuickNotes","getQuickNoteAsAction","_ref6","getMyTemplates","getTemplateActions","getTemplateAssignment","getTemplate","getStopwatches","getPriorityList","prioritySetId","setPriority","Ticket_Id","setStatus","reassign","startStopwatch","stopStopwatch","createAction","Call_Id","UpdateActionPin","deleteAction","getEmailConfig","sendEmail","_ref7","createTicket","bulkLogTicket","actionsById","refetchQuicknotes","resendRatingEmail","getLinkedAssets","saveLinkedAssets","assets","Append","append","saveAssociatedContacts","contactIds","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","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","AddTextAndItemsAttrToHamburgerItems","Nav_Items","item1","Text","items","item2","item3","item4","n4","getTicketStateClassName","toLowerCase","toDigital","minutes","negativeBrackets","convert","digital","Math","floor","toFixed","padStart","getLocaleDateTimeFormat","navigator","language","getLocaleDateFormat","TicketGrid","idGetter","getter","SELECTED_FIELD","gridData","setGridData","putAtTop","setPutAtTop","tenant","_props$data","sortedTickets","slice","sort","b","selectedTicketId","selectedTicket","x","_props$data2","retGridData","unshift","primaryCol","setSort","ticketSelected","onTicketSelected","setSelectedState","selectedState","showFilters","TextBox","newFilter","logic","filters","field","operator","placeholder","Client","Project","Grid","onSelectionChange","newSelectedState","getSelectedState","dataItemKey","dataItems","startRowIndex","detail","gridprops","subGridData","subGridHeader","selectable","expandField","sortable","onSortChange","enabled","selectedField","orderBy","filterBy","GridColumn","cell","fieldValue","Checkbox","radioGroup","syntheticEvent","onClick","formatDate","onRemoveHierarchy","onParentChange","onChildChange","parentCallId","isParent","isChild","parentTickets","isLoading","useGetOpenParentTicketsQuery","childTickets","loadingChildren","useGetChildTicketsQuery","parentChildren","loadingParentChildren","childTicketLabel","ButtonGroup","imageUrl","selected","confirm","t","onNoneClick","PanelBar","expandMode","PanelBarItem","HierarchyForm","handleRemove","_props$Contact","_otherClientTickets","contactUid","Contact","UId","useGetOpenEndUserTicketsQuery","clientTickets","clientLoading","useGetOpenTicketsQuery","otherClientTickets","contactTicketIds","includes","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","setBindData","initialSort","setInitialSort","newData","d","showContactLinkColumn","orderIndex","Device","Manufacturer","Model","SerialNumber","Memory","Processor","AssetCustom1","AssetCustom2","AssetCustom3","AssetCustom4","AssetCustom5","userStateFromSettings","Big_String_Value","parse","userState","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","headerCell","SvgIcon","svg","rowType","textAlign","ass","_props$selectedAssets","found","assetSelected","_props$associatedCont","associatedContacts","onContactChange","contactSelected","target","_ticket$Assets","_ticket$Assets2","_ticket$Assets3","contactAssets","locationAssets","selectedAssetIds","Asset_Id","selectedLocationAssetCount","selectedContactAssetCount","Asset","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","valid","maxLength","rows","Input","ClientApi","getClient","getMyClients","getClientList","companyTypeId","getClientTypes","getOffice","validationMessage","label","hint","optional","multiSelect","Array","isArray","toInteger","ClientType","clients","useGetClientListQuery","Label","editorId","editorValid","editorDisabled","listControl","ClientField","ClientList","_bindStaff","_bindStaff2","addSelect","showMe","currentUserTop","staff","useGetStaffQuery","bindStaff","y","StaffField","parseInt","StaffList","mins","time","setTime","newVal","strMin","strHour","substr","padEnd","parseFloat","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","FieldWrapper","Error","Field","component","renderField","TextField","DropdownField","NumericField","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","userCreated","Field_Name","displayName","FullName","messageListener","_e$data","_e$data2","messageObj","addEventListener","removeEventListener","svgIcon","plusIcon","EndUser","pencilIcon","Window","minimizeButton","initialWidth","initialHeight","userIcon","modal","Tenant_Url","onLoad","_props$bulkContactIds","endUserId","hideOptions","requiredMessage","useGetUserFyndConfigQuery","postSearch","usePostUserFyndMutation","useGetMyClientsQuery","niceColumns","Display_Name","header","clientOpen","setClientOpen","userOpen","setUserOpen","userFilter","setUserFilter","filteredUsers","u","Address_Line_1","Bus_Phone","Title","Custom1","Custom2","Custom3","Custom4","Custom5","Custom6","Company_Abbrev","filteredClients","selectedClient","selectedUser","sortedUsers","Secondary_Sort","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","sla","SLA_Code","slaColumns","Multi_SLA_List_Option","allowCustom","statusId","statusName","autoOpenSettings","autoCloseSettings","statusNameOnly","useGetMyStatusesQuery","defaultStatusOrCurrent","Statuses","ss","Open_Default","defaultOpenStatus","defaultClosedStatus","Closed_Default","defaultOnHoldStatus","OnHold_Default","defaultStatusIdOrCurrent","selectedStatus","stat","Code","setShow","offSet","left","top","popRef","dropRef","onclick","_popRef$current","_dropRef$current","element","contains","autoCloseStatus","setAutoCloseStatus","autoCloseDate","setAutoCloseDate","anchor","statusItems","_t$Statuses","subItems","showDatePrompt","setShowDatePrompt","toggleDialog","curValue","nativeEvent","Popup","offset","Menu","onSelect","statusTypeClicked","selectedStatusId","Auto_Status_Interval","Auto_Close_Date","ReactTimeAgo","date","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","dataConnected","tools","onToolClick","teams","useGetTeamsQuery","selectedTeam","allTeams","Dept_Name","assignedStaff","staffList","staffLoading","staffFiltered","setStaff","_staffList2","_staffList3","_staffList","typesList","useGetMyTypeListQuery","getSelectedPath","path","currentType","parentType","Parent_Id","Call_Type","selectedPath","fillLevelTypes","tf","typeItems","l","collision","dateFieldValidator","valueOf","dropdownFieldValidator","numberFieldValidator","validateCustomFields","validators","Is_Required","Required_To","validMsg","endUserFieldValidator","ticketIds","tid","viewDetails","roleId","roles","useGetRolesQuery","defaultRole","r","Default_Role","selectedRole","Role_id","maxWidth","Setting","SystemApi","getHours","getStartEnd","getWorkHours","actionDate","startEnd","useGetStartEndQuery","Timepicket_Interval","timeInterval","Int_Value","minTime","Bool_Value","Item1","maxTime","Item2","setDate","selectedDate","steps","minute","processTreeData","selectField","subItemsField","filtering","Boolean","filterFunc","_item","_textField","_subItemsField","foundItems","mapFunc","match","subItem","filteredData","mapTree","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","isBill","onStart","onStop","onTick","stopwatches","useGetStopwatchesQuery","useStartStopwatchMutation","useStopStopwatchMutation","runningWatches","Is_Bill","IsTicking","isRunning","timer","setTimer","interval","setInterval","clearInterval","ActionId","IsBill","unwrap","ARROWS","up","right","down","Mentions","handleOnClick","containerRef","isError","useGetMentionQuery","scrollIndex","setScrollIndex","handleNavigation","defaultBehavior","behavior","block","mention","at","getElementById","scrollIntoView","useEventListener","iframe","querySelector","div","contentDocument","sideLength","getImageLength","img_class","person","liStyle","cmp","abs","onMouseEnter","img","startsWith","maxHeight","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","setActive","res","trim","Bold","Italic","Underline","Strikethrough","AlignLeft","AlignCenter","AlignRight","AlignJustify","OrderedList","UnorderedList","Undo","Redo","FontSize","FontName","FormatBlock","Unlink","ViewHtml","EditorTools","CommonTools","MobileTools","TextEditor","EditorState","EditorView","ProseMirror","imageResizing","EditorUtils","useGetMentionConfigQuery","Min_Chars","mentionsProps","endOfString","prefixHTML_Notes","suffixHTML_Notes","newHTML_Notes","newTaggedUsers","MentionsHandleOnClickForTextEditor","Editor","resizable","contentStyle","onMount","iframeDocument","dom","ownerDocument","createElement","appendChild","createTextNode","head","setTimeout","_event$target","plugins","doc","viewProps","mount","create","isMobile","ACTION_LOWERCASE","ActionNoteTextEditor","_userProfile$Features","_userProfile$Features2","_userProfile$Features3","_userProfile$Features4","_userProfile$Features5","_userProfile$Features6","_userProfile$Features7","_userProfile$Features8","_userProfile$Features9","_userProfile$Features10","_userProfile$Features11","useGetStatusQuery","External_Interface","addTimeSettings","canAddTime","Allow_Add_Time","warning","author","setQuickNoteId","quickNote","useGetQuickNoteAsActionQuery","fireUpdate","stopwatchTicked","delta","getTime","Start_Dt","stopwatchStarted","note","toLocaleString","stopwatchStopped","Stop_Dt","_quickNote$Action_Not","newAction","Is_Private_Action","Action_Notes","replaceAll","internalUser","Show_Author","Role_Id","Role","RoleList","Quick_Notes","_e$value","Action","Set_Action_Date","_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","_project$Notes2","showPopup","showNotes","contact","contactFetching","office","officeFetching","useGetOfficeQuery","client","clientFetching","useGetClientQuery","project","projectFetching","useGetProjectQuery","useUpdateNotesMutation","editVisible","setEditVisible","notes","confirmFlaggedNotes","Notes","_project$Notes","clientNotes","Flag_Notes","projectNotes","officeNotes","contactNotes","Display_Notes","Popup_Flagged_Notes","hasAnyNotes","hasAnyFlaggedNotes","fillMode","Notification","border","boxShadow","borderRadius","padding","fontSize","verticalAlign","closable","innerWidth","Icon","backgroundColor","TimelineImage","imageData","useGetTimelineImageQuery","ticketImageData","SECTION_REQUIRED","confirmDialogProps","setConfirmDialogProps","useParams","searchParams","debug","templateId","endUserUId","splitTicketId","splitActionIds","navigate","useNavigate","initialAction","profileIsLoading","formData","formIsLoading","useGetFormByProjectQuery","newTicketEndUser","userLoading","useGetUserQuery","existingTicket","ticketIsLoading","useGetTicketQuery","customFormConfig","useGetFormConfigQuery","projectIsLoading","defaultProjectAssignment","defAssignmentLoading","useGetProjectAssignmentQuery","useGetPriorityQuery","statuses","useGetStatusesQuery","quickNoteStatus","Quick_Note_Status_Id","quickNotePriority","Quick_Note_Priority_Id","timelineTitle","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","teamChangeHandler","slaChangeHandler","typeChanged","assignedChangeHandler","associatedChangeHandler","bulkChangeHandler","divErrorRef","ResetForm","wrapper2","customFormTop","Custom_Forms_Enabled","Log_Call_Orientation","customFormBottom","handleSelect","expandedItems","TicketSavedDialog","Form","_initialAction$HTML_N","_saveTicket$Bulk_Cont","saveTicket","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","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","FlaggedNotes","BulkContacts","IsActive","AssociatedContacts","ProjectList","StatusList","Type","TypeList","Show_Team_Filter","Team","TeamList","WorkstreamAssignment","AssignedStaff","Multi_SLA","SLA","SLAList","Priority","PriorityList","Workstream","workstream","workstreamStart","workstreamEnd","TicketWorkstream","customform","CustomFormControl","focused","parentExpanded","ActionNote","TemplateList","template","useGetTemplateQuery","templates","useGetMyTemplatesQuery","selectedTemplate","Call_Template_Name","hasDescription","FileApi","isActive","getFiles","primaryId","getTicketFiles","getFileSettings","deleteFile","refetchFiles","FileType","isFileActive","useIsActiveQuery","useGetTemplateActionsQuery","initialDataState","dir","Bill_Time","processWithGroups","newDataState","setGroupIds","group","setResultState","resultState","isWorkflow","compare","Step_Order","total","headerClassName","Call_Templates","Workflow","TemplateActions","IsWorkflow","KB_ID","kbSelected","linkedKBIds","previewKBId","setPreviewKBId","colSpan","href","KBPreview","kbResults","KBResults","linkedKbs","setToken","setError","revUploadUrl","Primary_Id","isDeleting","useDeleteFileMutation","apifiles","useGetFilesQuery","useRefetchFilesMutation","fileSettings","useGetFileSettingsQuery","maxFilesReached","Max_Files","mountedRef","setFiles","newFiles","f1","extension","progress","File_Name","Length","lastIndexOf","UploadFileStatus","Uploaded","getToken","uploadRef","Max_Size","Upload","batch","multiple","saveHeaders","withCredentials","onAdd","Prohibited","onBeforeRemove","alert","onBeforeUpload","_fileSettings$Prohibi","additionalData","fileTooBig","fileProhibited","autoUpload","saveUrl","removeUrl","showActionButtons","onProgress","onStatusChange","_event$response","_event$response2","_event$response2$resp","_event$response3","_event$response3$resp","_event$response4","_event$response4$resp","selectMessageUI","FileUpload","KBApi","getTicketKbs","updateLinkedKbs","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","requiredStyleClassV25","Drawer","mode","mini","DrawerItem","itemTarget","DrawerContent","Routes","Route","Templates","TicketDetails","ExistingTickets","Is_Loading","TicketHierarchy","TicketAssets","Attachments","SplitActions","WindowActionsBar","background","TicketPage","previousPage","goBack","setSize","h","innerHeight","onresize","popupWidth","tIds","ticketTitle","modalWindow","isModal","onMove","onResize","stage","TicketDrawer","nonModalForm","FavoriteApi","getUserFavorites","saveFavorite","fav","getFavoriteConfig","saveFavoriteConfig","sortFavorite","order","sortFavCategories","deleteFavorite","favId","invalidateFavorites","HeaderMenu","anchorAlign","_props$options$find","itemClicked","openOnClick","hoverCloseDelay","_o$icon","MenuItem","link","Revelations","mainProps","useContext","sortedData","menuProps","setMenuProps","editItem","setEditItem","collapsedItems","REVELATIONS_COLLAPSED_STATE","useGetUserFavoritesQuery","useSaveFavoriteMutation","sortFavorites","useSortFavoriteMutation","sortFavoriteCategories","useSortFavCategoriesMutation","useDeleteFavoriteMutation","headerMenu","setHeaderMenu","itemsToRender","setItemsToRender","categoryIds","Category_Order","Category_Id","newRenderData","cid","_children","Order","Category_Name","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","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","ShowProfileIMages","ImageUrl","borderWidth","Activity_Image_Url","Header","borderCollapse","Action_Contact_Name","Action_Date","itemSelected","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","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","setContactSelected","contacts","useGetContactsQuery","Contacts_Search_By_Name","mimicSetting","Mimic","_props$selectedContac","_props$selectedContac2","selectedContact","groups","ReturnValue","Group_Value","newExpanded","Fav_Id","addNewContact","RevelationSlice","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","LinkApi","getLinks","createLink","newLink","updateLink","Link_Id","deleteLink","EditBar","updateLinkEndpoint","useUpdateLinkMutation","createLinkEndpont","useCreateLinkMutation","editedLink","setEditedLink","handleUpdate","Link_Display","setEditingLinkId","onKeyDown","shiftKey","LinksMenu","useGetLinksQuery","deleteLinkEndpoint","useDeleteLinkMutation","editingLinkId","systemLinks","Is_System","myLinks","tagName","Links","ChatCount","PinnedChatModule","ChatNotificationModule","ToggleState","RightBar","setLastId","dockOrder","setDockOrder","Activity_Feed","setSelectedContact","ticketContactId","ticketContact","Free","Uninitialized","_dockOrder$children","foundINdex","Page_State_Xml","Expanded","XMLParser","parseFromString","Dock_Order","dockArr","contactName","buttonClicked","newOrder","newOrderXML","newConfig","lockingTools","handleClick","toolProps","Chat","Contacts_Dock","Link_Out","toolsClass","Body_Hex_Color","_createElement","SessionKeepAlive","random","setRandom","pingUrl","ping","_revI$currentIframeSr","_revI$currentIframeSr2","_revI$currentIframeSr3","useInvalidateProfileMutation","iframeRef","hasAccessToken","homeLandingPage","iframeClass","extraQueryParams","logoutMessage","invalidateTags","iFrameLoaded","Outlet","Deeplink","lowerParams","URLSearchParams","newTicketPageSetting","NEW_TICKET_DETAILS","self","redirect","queryString","URL","search","from","delete","history","replaceState","RevelationIframe","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","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","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","_dataItem$Url_Format","liProps","cloneElement","listNoDataRender","footer","accessible","FocusedViewToggle","preData","postData","iconImg","collapse","postMessage","Logout","AdminArea","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","trimmedStr","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","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","ContactsPage","ChatPage","ChatPageWrapper","getChat","getMessages","chatUid","chat","useGetChatQuery","messages","useGetMessagesQuery","EndUser_Uid","firstMessages","ticketDescription","actionNotes","_m$From","Is_Event","StaffContact_Id","Profile_Image","Created","ticketForm","useGetTicketFormQuery","updateFormFields","isUpdating","useUpdateTicketFormMutation","stateFields","userHasAccess","View_External","Custom_Fields","handleFormSubmit","success","_e$status","showSaveButton","filterDescription","onCancel","actionTypes","useGetTicketActionTypesQuery","useGetTicketAuthorsQuery","filterState","updateState","hasFilterApplied","FilterSlice","chips","selectedAuthors","filterCancelButton","selectedActionTypes","Action_Type","rangeString","toDateString","ChipList","AccountApi","tenantUrl","getHostConfig","useGetHostConfigQuery","hostConfig","Call_Action_Page_Size","Pager","responsive","onPageChange","buttonCount","previousNext","pageSizeValue","WorkflowApi","applyWorkflow","completeAction","getReactions","creatReaction","deleteReaction","reaction","_reactions$filter","reactions","reactionsApi","useGetReactionsQuery","Like","addReaction","useCreatReactionMutation","removeReaction","useDeleteReactionMutation","showSelector","setShowSelector","myReaction","Action_Id","handleAdd","newReaction","Reaction_Type","actualReactions","em","emoji","by","Staff_Name","Is_System_Action","Popover","callout","GithubSelector","GithubCounter","counters","File_Count","isFileActiveInternal","isFileActiveExternal","listener","_anchor$current","unpinning","useUpdateActionPinMutation","showMenu","setShowMenu","LikeButton","AttachmentButton","unPinAction","Edit_Any_Action","Edit_My_Actions","canEdit","Delete_Any_Action","Delete_My_Actions","canDelete","regex","p1","replaceWithLink","systemAction","_action$HTML_Notes2","actionIcon","AutoLinker","Show_Friendly_Dates","toLocaleTimeString","Action_Type_Name","workflowStepCompleted","notesColorSetting","END_USER_NOTES_COLOR","getBackgroundColor","Is_Client_Role","String_Value","_action$HTML_Notes","Profile_Action_Images","Role_Name","ActionButtons","Non_Bill_Min","_actions$Items","_actions$Items2","setPage","useGetActionsQuery","completeWorkflowAction","completing","useCompleteActionMutation","hasWorkflow","Items","Step_Id","Step_Name","Workflow_Processing","filteredActions","handlePageChange","edit","Workflow_Action_Id","newActionId","Skeleton","shape","marginBottom","FilterBanner","ActionPager","RowCount","step","aiApi","getTicketSummary","translateNote","controlMode","translate","useTranslateNoteMutation","emailTranslateOption","originalEmailBody","optionSelectred","xmlns","fill","viewBox","DropDownButton","EmailActionSlice","itemIndex","TransformId","Content","endIcon","useRedirectOnClose","Close_Call_Page_Action","handleClose","handleConfirm","CloseDialogContext","CloseDialogProvider","dialog","setDialog","showDialog","hideDialog","GroupAssigned","useCloseTicketLogic","setAssigned","settingOwnership","useReassignMutation","useSetStatusMutation","handleRedirect","allStatuses","defaultCloseStatus","Closed_default","continueClose","CloseValidationCodes","New_Status_Id","Require_Ticket_Ownership_To_Close","Access_Level_Id","yes","New_Assignees","_ticket$CloseValidati2","_ticket$CloseValidati","onsubmitted","onclosed","postAction","savingAction","useCreateActionMutation","updatingAction","useUpdateActionMutation","apiError","setApiError","fetchingAction","useGetActionQuery","formName","closeError","handleActionSubmit","saveAndClose","_newAction$Action_Typ","saveAction","updateProps","codes","_e$data$errors","isObject","canSaveAndClose","onCloseClicked","_newAction$HTML_Notes","visited","Self_Service","saveButtonClicked","AINotes","AddKBButton","PinApi","getPins","addPin","newPin","deletePin","pin","deletePins","useGetPinsQuery","useAddPinMutation","useDeletePinMutation","_profile$Features2","setSelected","Pin_Dock","StateCssClass","AISummaryText","_summary$Content$","summary","useGetTicketSummaryQuery","AddActionButton","parent","popupRef","_popupRef$current$ele","addAction","TreeView","expandIcons","childrenField","updateHierarchy","updatingTicket","useUpdateTicketHierarchyMutation","contextOptions","Is_PArent","setKBResults","canAdd","Add_Ticket_To_KnowledgeBase","ticketKbs","useGetTicketKbsQuery","Count_Only","buttonLabel","Open_User_Tickets","Open_Client_Tickets","ticketAssets","useGetLinkedAssetsQuery","allAssets","applyingTemplate","useApplyWorkflowMutation","_event$item$value","myFilterSettings","Ticket_Action_Filter","Call_Action_Filter","_myFilterSettings$Str","_filterValues$","_filterValues$2","filterValues","onNewActionClick","SendEmailButton","docked","HierarchyButton","Call_Hierarchy","AssetButton","ActionFilterButton","WorkflowButton","KBButton","PrintButton","RelatedButton","rightExpanded","setRightExpanded","TOOLBAR_STATE","editMode","setEditMode","userOptions","setUserOptions","updateContactSetting","isSaving","toolState","setToolState","Tools","_userOptions","visibility","menuItems","isDisabled","classNames","outline","borderColor","saveOptions","saveData","animate","EmailTemplateList","useGetTicketEmailTemplatesQuery","_filter$value","_filter$value2","_filter$value3","_formState$email","_formState$email2","filterCC","setFilterCC","filterBCC","setFilterBCC","ToList","toLoading","useSearchContactsQuery","CCList","ccLoading","BCCList","bccLoading","loadingTemplate","fetchTemplateError","sendEmailAction","sendingEmail","sendEmailError","useSendEmailMutation","filteredTo","filteredCC","filteredBCC","defaultFormState","useGetEmailConfigQuery","onFilter","renderTag","tagData","showIMage","customElement","Email","renderItem","_data$Profile_Image_P","handleToChange","validateEmails","handleCChange","handleBCChange","lastItem","pop","foundEmail","exec","onIframeInit","contentWindow","linkElementWithiFrameStyles","rel","sendData","_formState$email3","_formState$email3$To","_formState$email4","_formState$email4$Sub","_formState$email5","_formState$email$CC","_formState$email$CC2","_formState$email$BCC","tagRender","Email_Templates","onIFrameInit","onDiscard","discardChanges","confirmCloseVisible","setConfirmCloseVisible","onpopout","closeClicked","ConfirmClose","closeConfirmed","EmailForm","getStars","addStar","deleteStar","_profile$Features3","_profile$Features4","allPins","allStars","isFetchingStars","StarApi","useGetStarsQuery","thisPin","thisStar","sourceFeature","TICKET_SOURCE","savingPin","unpin","deletingPin","star","savingStar","useAddStarMutation","unstar","deletingStar","useDeleteStarMutation","loadingButton","isStaff","starEnabled","Starred_Tickets","Tagging","Print_Layout","toggleSideBar","Source_Name","unpinTicket","pinTicket","unStarTicket","starTicket","Auto_Status_Text","Auto_Status_Date","_details$Call_Desc","Toolbar","AutoStatusBanner","createTheme","bodyHex","themeName","require","themeImage","backgroundImage","backgroundImageUrl","backgroundRepeat","isVisible","setIsVisible","maximizeButton","setVisible","toggleWindow","Dashboard_Url","frameBorder","_details$Contact","_details$Contact2","_details$Contact_Bus_","_details$Contact3","_details$Contact4","_details$Contact5","_details$Contact6","_details$AssociatedCo","_details$Contact7","_details$Contact8","_details$Contact9","_details$Contact10","_details$Contact11","_details$Contact12","_details$Contact13","_details$Contact14","_details$Contact15","_details$Contact16","_details$Contact17","_details$Contact18","_details$Contact19","_details$Contact20","useGetTicketConfigQuery","ClientOptions","Key","marginTop","Office","Mapping","Customer_Feedback_Form_Url","FeedbackFormModal","Contact_Bus_Phone","Office_Phone","DashboardPopup","Quick_Dial","QuickDial","Ext","ProjectType","Project_Type","ClientConfig","ShowCustom1","UserCustom1","ShowCustom2","UserCustom2","ShowCustom3","UserCustom3","ShowCustom4","UserCustom4","ShowCustom5","UserCustom5","ShowRegion","Region_Name","Region","ShowTerritory","Territory_Name","Territory","_ticket$Call_Assignme","_ticket$Call_Assignme2","_ticket$Call_Assignme3","reassignTicket","Add_To_Existing","DropDownButtonItem","Call_Opener","Call_Opener_Name","_ticket$Actual_Time","_ticket$Actual_NonBil","_ticket$Child_Bill_Ti","_ticket$Child_NonBill","_ticket$Actual_Time2","_ticket$Child_Bill_Ti2","_ticket$Actual_NonBil2","_ticket$Child_NonBill2","setDisplay","Actual_Time","Actual_NonBill_Time","billed","notBilled","Child_Bill_Time","Child_NonBill_Time","projectTimeColor","Show_Project_Available_Time","useUpdateTypeMutation","filteredTypes","setNewFilter","Call_Type_Path","AdaptiveModeContext","small","medium","adaptive","adaptiveTitle","positionMode","_profile$Phrases","_profile$Phrases2","updatingStatus","updatingPriority","useSetPriorityMutation","setSLA","updatingSLA","useUpdateSLAMutation","externalUser","configGroupProps","priorityChanged","Priority_Level","Timeline_Description","Open_Dt","_e$value$autoOpenSett","_e$value2$autoOpenSet","_e$value3$autoCloseSe","_e$value4$autoCloseSe","Advanced_Heirarchy_Options","Cascade_To_Children","hmm","SLA_Name","_e$value6","Show_SSI_Timeline","actionfiles","ticketFiles","fetchingTicektFiles","useGetTicketFilesQuery","downloadUrl","setDownloadUrl","showFiles","setSearch","deletingFile","filteredFiles","_f$Type","viewIndex","gotAttachments","getSvgIcon","showSearch","ScrollView","activeView","automaticViewChange","arrows","showPaging","_item$Type","isImage","File_Link_Safe","download","textDecoration","Delete_Attachments","showInfo","setCount","AttachmentsLightBox","Rating","EditMode","useResendRatingEmailMutation","Rated_Times","UpdateContactSetting","SIDEBAR_STATE","isFileActiveSSI","typesActive","SSI_Call_Type","handleReposition","setData","defaultState","rowSpan","defaultTileArray","tileArray","tiles","UserInfo","Stars","Timeline","Ownership","TimeLogged","TicketType","resetLayout","userCanEdit","pageThemeCSS","Body_Style","Body_Image_Url","renderSideBarItems","TileLayout","rowHeight","positions","onReposition","_data$tiles$indexOf","_data$tiles$indexOf2","onOverlayClick","calendar","useGetWorkHoursQuery","Close_Dt","stateHistory","useGetStateHistoryQuery","view","getKeyFromDate","setMinutes","hour","chartData","previousActions","cal","_previousActions","Day","_lastState$New_State","_lastState$New_State2","lastState","Created_Dt","theColor","New_State","dayActions","stateChanges","sh","_previousActions2","_previousActions2$act","_newDayAction$actions","newDayAction","daysOpen","_previousActions3","_lastState$New_State3","_lastState$New_State4","_item$actions","_item$actions2","_item$actions3","Chart","zoomable","ChartValueAxis","ChartValueAxisItem","ChartSeries","ChartSeriesItem","stack","noteTextField","ChartSeriesLabels","content","font","ChartTooltip","_props$point$dataItem","point","recordCount","startDate","fetchingDays","fetchingHistory","_date","isZulu","getColorFromState","stata","iconColor","groupedActionsByDay","acc","_groupedActionsByDay$","createdAction","showActions","Old_State","closed","NextSLAMilestoneName","now","setSeconds","keyDate","fullDays","Begin_datetime","End_datetime","dayStart","Work_mins","storyData","day","_groupedActionsByDay$2","anchorElement","actionCount","isSystem","isSingleEndUserAction","headerText","xlinkTitle","dayOrMinsLabel","thisDay","VerticalTimelineElement","contentArrowStyle","iconStyle","formatAction","TooManyRecordsBanner","TicketStoryLine3","VerticalTimeline","ActionExpander","hiddenLink","hiddenLinkEmail","showAction","setShowAction","click","ActionTabs","selectedView","Tabs","activeKey","k","Tab","eventKey","DeleteAction","deleting","useDeleteActionMutation","actionToDelete","AttachmentsPopup","fileCount","setFileCount","ValidationPopup","_displayForms$formInd","_displayForms$formInd2","_displayForms$formInd3","_ticket$CloseValidati3","actionState","useGetTicketDetailsQuery","statusUpdateError","formIndex","setFormIndex","valCodes","setValCodes","ownership","setOwnership","closedStatus","isUpdatingForm","showTypeList","setShowTypeList","displayForms","valCode","AddAction","validate","isFormStep","isActionStep","typeStep","_displayForms$formInd4","_displayForms$formInd5","_actionState$Action_T","_displayForms$formInd6","_displayForms$formInd7","allowSubmit","_displayForms$k","Share","copyText","setCopyText","selectedStaff","setSelectedStaff","setNote","setStage","confirmation","setConfirmation","sharingTicket","useShareTicketMutation","filteredStaff","onWindowClose","onStageChange","Contact_Ids","Team_Ids","_tagData$data$","_data$img","clipboard","writeText","MapView","markers","latlng","Latitude","Longitude","Address_Html","Map","center","zoom","MapLayers","MapTileLayer","urlTemplate","subdomain","subdomains","attribution","MapMarkerLayer","locationField","titleField","MapMarkerLayerTooltip","PrintWindow","print","ActionFilter","setFormState","_formState$authorIds","toggleModal","handleFilter","_formState$actionType","buttonStyleCss","View_System_Actions","DateRangePicker","_e$target$value2","_e$target$value3","_e$target$value4","isDate","buttonClass","stringValues","KBModal","useDesc","setUseDesc","setDescription","freeText","setFreeText","setLinkedKbs","searching","newEmail","saveTicketdKbs","linkingKbs","useUpdateLinkedKbsMutation","KB_Id","unescape","doSearch","desc","FreeText","linked","filteredResults","onSearchClicked","kbLinks","addLinksToAction","addLinksToEmail","original","linkToTicket","unlinkedKBs","RelatedTicketsModal","_removeError$data","removeHierarchy","removingHierarchy","removeError","useRemoveTicketHierarchyMutation","_dataItem$Profile_Ima","Show_Profile_Image","Team_Name","_staffAndQueues$filte","_staffAndQueues$filte2","_state$assigned","_state$staff","_state$queues","_state$assigned2","newAssignees","newAssignee","setNewAssignee","yourTeamSetting","YOUR_TEAM_DEFAULT","setTeam","staffAndQueues","queues","Is_Queue","_s$Full_Name","draggedItem","setDragItem","assigned","assignedIds","ca","bindQueues","handleDragStart","assignDropped","itemDropped","dragItem","processListBoxDragAndDrop","listBoxOneData","listBoxTwoData","MyCustomItem","processListBoxData","handleQueueToolBarClick","handleItemClick","connectedData","ctrlKey","onDrop","toolbarPosition","valueField","ProductID","ProductName","SupplierID","CategoryID","QuantityPerUnit","UnitPrice","UnitsInStock","UnitsOnOrder","ReorderLevel","Discontinued","Category","CategoryName","product","AssignedModal","setSelectedUser","setNewAssignees","savingChanges","EditAssignment","DeleteDockItem","pinId","unpinAll","deletingAll","useDeletePinsMutation","handleConfirmAll","HierarchyWindow","saveChanges","huh","EmailModal","AssetModal","linkedAssets","setLinkedAssets","setAssociatedContacts","savingContacts","useSaveAssociatedContactsMutation","saveTicketAssets","useSaveLinkedAssetsMutation","loadingAssets","hasChanged","saveLinkedAsset","_associatedContacts$c","all","existingAction","dialogVisible","setDialogVisible","requiredStyleClass","AddAssetModal","assetId","ActionModal","TicketDetailsPage","useReadTicketMutation","markTicketAsRead","TicketRoutes","LegacyBanner","Sidebar","Dockbar","TicketHeader","CustomForm","ActionToolbar","EmailAction","AISummary","TicketStoryLine2","LegacyUserInfoPage","userId","TicketNotFound","alignItems","AppRoutes","LogTicketFromChat","TicketModal","SignoutPage","frameLoaded","setFrameLoaded","App","_stateUser$user","_stateUser$user2","tenantNotFound","setUserManager","isAuthenticating","setAuthenticating","Log","setLevel","DEBUG","newUserManager","expired","returnUrl","loadUser","signIn","expires_in","isLoadingUser","OidcProvider","ToastContainer","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","CallbackPage","authManager","CallbackComponent","successCallback","errorCallback","SilentRenewPage","processSilentRenew","TimeAgo","en","createRoot","BrowserRouter","basename","future","v7_relativeSplatPath","reportWebVitals","webpackContext","req","webpackContextResolve","__webpack_require__","code","module","exports"],"sourceRoot":""}