import React, { Fragment, useContext, useState, useEffect } from 'react' import './Exceptions.css' import { Row, Column, Container, Button } from '../chromaComponents' import { SearchResult, SearchQuotesOrderBy } from '../../models/QuoteSearchModels' import { StateContext } from '../../../src/state/StateProvider' import { UserAccessLevel } from '../../models/Enums' import { Mutations } from '../../state/Mutations' import * as mappingHelper from '../../utils/fieldMappingHelper' import { Redirect } from 'react-router-dom' import * as df from '../../utils/dateFormatters' import * as adHocHelper from '../../utils/adHocHelper' import { userHasAccess } from '../../services/userAccessService' import { User } from '../../models/Models' import { NotificationContext } from '../../state/NotificationProvider' import SearchQuotes from '../SearchQuote/SearchQuotes' import * as sortHelper from '../../utils/sortHelpers' const Exceptions = () => { const [state, dispatch] = useContext(StateContext) const [, dispatchNotification] = useContext(NotificationContext) const user = state?.user as User const searchQuoteResult = state?.searchQuote as SearchResult const [orderKey, setOrderKey] = useState() const [orderAsc, setOrderAsc] = useState(false) const [mappedData, setMappedData] = useState( mappingHelper.mapSearchResultsToViewModel(searchQuoteResult?.results, searchQuoteResult?.sortOrder) ) const [orderedSearchResults, setOrderedSearchResults] = useState(sortHelper.sortData(mappedData, orderKey, orderAsc)) useEffect(() => { setMappedData(mappingHelper.mapSearchResultsToViewModel(searchQuoteResult?.results, searchQuoteResult?.sortOrder)) if (searchQuoteResult?.sortOrder === 'lastmodifieddate') { setOrderKey(sortHelper.LastModifiedDateSortKey) setOrderAsc(true) } }, [searchQuoteResult]) useEffect(() => { setOrderedSearchResults(sortHelper.sortData(mappedData, orderKey, orderAsc)) }, [mappedData, orderKey, orderAsc]) useEffect(() => { dispatch({ type: Mutations.RESET_QUOTE }) dispatchNotification({ type: Mutations.UPDATE_MESSAGE, payload: null }) }, [dispatch, dispatchNotification]) function toggleLastModifiedDateSort() { if (orderKey === sortHelper.LastModifiedDateSortKey) { setOrderAsc((prevState) => !prevState) } else { setOrderKey(sortHelper.LastModifiedDateSortKey) setOrderAsc(true) } } if (!user) { return
} else if ( !userHasAccess( [UserAccessLevel.EXCEPTION_MANAGER_BASIC, UserAccessLevel.EXCEPTION_MANAGER_ADVANCED], user.permissions ) ) { return } function handleSelectQuote(quoteId: string) { window.open(`/exceptions/quote?quoteId=${quoteId}`) } function getTimeDifference(date1: any, date2: any) { const diffTime = Math.abs(date2 - date1) let diffDays = `${Math.floor(diffTime / (1000 * 60 * 60 * 24))}` if (diffDays.length < 2) { diffDays = `0${diffDays}` } let diffHours = `${Math.floor((diffTime / (1000 * 60 * 60)) % 24)}` if (diffHours.length < 2) { diffHours = `0${diffHours}` } let diffMinutes = `${Math.floor(diffTime / (1000 * 60)) % 60}` if (diffMinutes.length < 2) { diffMinutes = `0${diffMinutes}` } return `${diffDays}:${diffHours}:${diffMinutes}` } function getSearchResults() { return ( Quote ID Quote Status Transaction Type Branch NZI Policy ID Partner Policy ID Client Name Date Attempted
Age
{orderedSearchResults.map((m) => (
{m.status}
{mappingHelper.getTransactionTypeShortCode(m.transactionType)}
{m.brokerBranch}
{m.policyId}
{m.partnerPolicyId}
{m.clientName}
{df.formatStringDate(m.lastModifiedDate)}
{getTimeDifference(new Date(), new Date(m.lastModifiedDate))}
))}
) } return ( {getSearchResults()}

) } export default Exceptions