{"version":3,"sources":["enquirySummary/selectors/UserStaffAndTeamAutoCompleteSelector.tsx","enquirySummary/selectors/OrganisationSelector.tsx","enquirySummary/selectors/IndividualSelector.tsx","enquirySummary/selectors/GenderSelector.tsx","enquirySummary/selectors/AreaOfLawSelector.tsx","enquirySummary/selectors/ReasonSelector.tsx","enquirySummary/selectors/ReferredToSelector.tsx","enquirySummary/selectors/EmailTemplateSelector.tsx","enquirySummary/selectors/OfficeLocationSelector.tsx","enquirySummary/selectors/EnquiryAutocompleteSelector.tsx","enquirySummary/selectors/MatterTypeStateSelector.tsx","enquirySummary/selectors/RecurringMatterSelector.tsx","enquirySummary/selectors/ReportingGroupSelector.tsx","enquirySummary/selectors/MatterTreeTypeSelector.tsx","enquirySummary/selectors/RiskLevelSelector.tsx","enquirySummary/selectors/StaffSelector.tsx","enquirySummary/selectors/SourceSelector.tsx","enquirySummary/selectors/AddressSelector.tsx","enquirySummary/selectors/TitleAutocompleteSelector.tsx"],"names":["EntityTypeEnum","useStyles","theme","root","minWidth","textField","width","iconSelected","height","marginRight","marginLeft","color","flexShrink","borderRadius","marginTop","text","flexGrow","close","opacity","renderWrapper","padding","customRenderWrapper","display","margin","fontFamily","fontWeight","alignItems","flex","flexFlow","fontSize","lineHeight","letterSpacing","UserStaffAndTeamAutoCompleteSelector","props","classes","hasNextPage","isNextPageLoading","offset","filter","items","teamItems","state","setState","debounced","event","value","reason","fetchData","isClear","prevState","query","refreshData","onSuccess","onError","fetchPolicy","MEETING_INVITEES_FOLLOW_UP_QUERY","variables","first","isIncludeCurrent","isIncludeClosed","isMyEnquiriesOnly","sortColumn","sortDirection","groupBy","groupByValue","followUpDue","newEnquiry","assignedTo","areaOfLaw","teamList","isKeyOpportunity","enquiryQuality","enquiryLikelihoodToProceed","isMeetingWithAdvancedFilter","sourceList","then","results","data","catch","retrieveMeetingInviteesInFollowUpData","onRetrieveUserList","meetingInviteesData","enquiry","meetingInvitees","itemsList","length","map","source","inviteeGuid","label","inviteeName","emailAddress","isRedViewUser","entityType","user","item","includes","push","isLoading","getInputProps","params","InputProps","endAdornment","Fragment","size","className","id","itemSize","loading","disablePortal","undefined","name","isMultiple","multiple","loadNextPage","disableListWrap","onSelection","selection","onClose","onOpen","getOptionLabel","option","getOptionSelected","onInputChange","onBlur","renderOption","TEAM","STAFF","renderInput","variant","required","error","fullWidth","helperText","gap","overflow","textOverflow","whiteSpace","fontStyle","OrganisationSelector","delayedonInputChange","retrievePartyData","includeOrganisation","includeIndividual","includeStaff","nameSummaryData","party","nameSummaries","nameSummary","recordCount","guidID","toString","toLowerCase","disabled","isFromDataSource","PartyQuery","justifyContent","isDataFromSource","IndividualSelector","isClientsOnly","eventsAndCampaignGuid","refresh","onRetrieveData","firstName","lastName","mobile","phone","gender","organisationGuid","organisationName","nameId","addressName","floor","number","street","city","postCode","country","title","key","enableSecondary","disableCloseOnSelect","options","GenderSelector","values","setValues","Gender","onChange","autoSelect","inputProps","AreaOfLawSelector","retrieveAreaOfLawData","onRetrieveAreaOfLaw","lookup","guidId","description","estimatedFees","isEstimatedFeesIncludesTax","estimatedDisbursements","isEstimatedDisbursementsIncludesTax","handleChange","console","log","inputValue","matches","parts","part","index","style","highlight","LeadAreaOfLawQuery","bind","selectedCode","selectedLabel","UNSAFE_componentWillReceiveProps","nextProps","this","filteredItem","find","render","enquiryData","reasons","reasonGuid","isReferrer","secondaryValue","EnquiryOutcomeReasonData","ReasonSelector","Selector","ReferredToSelector","disabledFilterOptions","EmailTemplateSelector","EmailTemplateListData","emailType","isActive","retrieveEmailTemplateData","templates","emailTemplateList","emailTemplateGuid","PopperComponent","OfficeLocationSelector","FirmOfficeList","isMyOfficeOnly","retrieveOfficeData","showAllOffice","HasAccess","hasFirmDashboardOfficeView","hasFirmDashboardMyOfficeOnly","firm","firmOffices","firmOffice","currentTarget","newValue","tempValue","EnquiryAutocompleteSelector","EnquirySummaryListData","meetingWith","status","retrieveEnquirySummaryData","onRetrieveSummaryList","summaryData","summaryList","summaries","guid","email","summary","primary","secondary","MatterTypeStateSelector","MatterTypeStateQuery","retrieveMatterTypeStateData","onRetrieveMatterTypeState","matterTypeState","RecurringMatterSelector","RecurringMatterTemplatesQuery","retrieveRecurringMatterData","onRetrieveRecurringMatter","recurringMatterTemplates","recurringMatterId","ReportingGroupSelector","reportingGroupQuery","REPORTING_GROUP_QUERY","useEffect","reportingGroups","reportingGroup","group","reportingGroupSourceId","MatterTreeTypeSelector","matterTypeQuery","useMatterTypeTree","matterTypeData","JSON","parse","matterTypeTreeJson","convertChildrenToLowerCase","opt","convertedOptions","i","Children","Description","ItemId","rest","convertedOption","children","filterObjectsByState","searchString","reduce","result","filteredChildren","State","optionsFilterByState","MatterTypeTreeQuery","RiskLevelSelector","riskLevelQuery","riskLevel","risk","StaffSelector","StaffQuery","retrieveStaffListData","onRetrieveNameSummary","staffSummaryData","staffSummaries","staffSummary","staffGuid","staff","isStaff","SourceSelector","EnquirySourceDataQuery","retrieveEnquirySourceData","onRetrieveSource","sources","autocompleteService","current","icon","palette","spacing","AddressSelector","setValue","setInputValue","setOptions","premise","subPremise","streetNumber","route","locality","sublocality","administrativeAreaLevel1","administrativeAreaLevel2","administrativeAreaLevel3","postalCode","fetch","request","callback","tempRequest","types","placeTypes","componentRestrictions","homeCountry","getPlacePredictions","active","window","google","maps","places","AutocompleteService","input","newOptions","freeSolo","structured_formatting","main_text","filterOptions","x","includeInputInList","filterSelectedOptions","autoComplete","suggestion","fields","placeId","place_id","googleMapElement","document","getElementById","Map","PlacesService","getDetails","PlacesServiceStatus","OK","address_components","element","short_name","long_name","onSuggestionSelected","newInputValue","onInputChanged","main_text_matched_substrings","match","container","xs","secondary_text","TitleAutocompleteSelector","partyTitleQuery","PartyTitleLookupQuery","partyTitle"],"mappings":"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","file":"static/js/main~0af46c59.e34e450a.chunk.js","sourcesContent":["import React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport PersonOutlinedIcon from '@material-ui/icons/PersonOutlined';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport { RenderInputParams } from '@material-ui/lab';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { client } from '../..';\r\nimport GroupOutlinedIcon from '@material-ui/icons/GroupOutlined';\r\nimport { useDebouncedCallback } from 'use-debounce';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0'\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n width: '100%',\r\n '& > div': {\r\n padding: '0 10px',\r\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\r\n fontWeight: 400,\r\n },\r\n '& .icon-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .other': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n },\r\n '& .third': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.675rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n fontWeight: 600\r\n }\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface UserStaffAndTeamAutoCompleteSelectorProps {\r\n multiple?: boolean;\r\n label?: string;\r\n name: string;\r\n required?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n id?: string;\r\n error?: boolean;\r\n disablePortal?: boolean;\r\n className?: string;\r\n helperText?: React.ReactNode;\r\n onBlur?: React.FocusEventHandler;\r\n\r\n isIncludeCurrent?: boolean; \r\n isIncludeClosed?: boolean;\r\n isMyEnquiriesOnly?: boolean;\r\n sortColumn?: string; \r\n sortDirection?: string; \r\n groupBy?: string; \r\n groupByValue?: string;\r\n followUpDue?: string;\r\n newEnquiry?: string;\r\n assignedTo?: string;\r\n areaOfLaw?: string;\r\n teamList?: string;\r\n isKeyOpportunity?: boolean;\r\n enquiryQuality?: string;\r\n enquiryLikelihoodToProceed?: string;\r\n isMeetingWithAdvancedFilter?: boolean; \r\n sourceList?: string;\r\n}\r\n\r\ninterface UserStaffAndTeamAutoCompleteSelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n filter: string;\r\n // tslint:disable-next-line: no-any\r\n items: any;\r\n // tslint:disable-next-line: no-any\r\n teamItems: any;\r\n}\r\n\r\nexport enum EntityTypeEnum {\r\n MATTER = 0,\r\n LEAD = 1,\r\n CLIENT = 2,\r\n STAFF = 3,\r\n USER = 4,\r\n TASK = 5,\r\n TEAM = 6,\r\n GENERAL = 9\r\n}\r\n\r\nexport const UserStaffAndTeamAutoCompleteSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n const loadBlockLimit = 10000;\r\n\r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n filter: '',\r\n items: [],\r\n teamItems: [],\r\n });\r\n\r\n const [debounced] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n if (reason === 'input') {\r\n fetchData(value, 0, true);\r\n }\r\n },\r\n // delay in ms\r\n 500\r\n );\r\n\r\n const fetchData = (filter: string, offset: number, isClear: boolean) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true\r\n };\r\n });\r\n\r\n const userQueryParams: MeetingInviteesInFollowUpDataParams = {\r\n filter: filter,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n isIncludeCurrent: props.isIncludeCurrent,\r\n isIncludeClosed: props.isIncludeClosed,\r\n isMyEnquiriesOnly: props.isMyEnquiriesOnly,\r\n sortColumn: props.sortColumn,\r\n sortDirection: props.sortDirection,\r\n groupBy: props.groupBy,\r\n groupByValue: props.groupByValue,\r\n followUpDue: props.followUpDue,\r\n newEnquiry: props.newEnquiry,\r\n assignedTo: props.assignedTo,\r\n areaOfLaw: props.areaOfLaw,\r\n teamList: props.teamList,\r\n isKeyOpportunity: props.isKeyOpportunity,\r\n enquiryQuality: props.enquiryQuality,\r\n enquiryLikelihoodToProceed: props.enquiryLikelihoodToProceed,\r\n isMeetingWithAdvancedFilter: props.isMeetingWithAdvancedFilter,\r\n sourceList: props.sourceList\r\n };\r\n\r\n retrieveMeetingInviteesInFollowUpData(\r\n userQueryParams,\r\n false, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveUserList(data, filter, offset, isClear),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n // tslint:disable-next-line: max-line-length\r\n const onRetrieveUserList = (data: MeetingInviteesInFollowUpData, filter: string, offset: number, isClear: boolean) => {\r\n\r\n // tslint:disable-next-line: no-any\r\n let meetingInviteesData = data.enquiry.meetingInvitees;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: any[] = [];\r\n\r\n let items = state.items;\r\n\r\n if (!isClear) {\r\n itemsList = [...state.items];\r\n } else {\r\n items = [];\r\n }\r\n\r\n if (items && items.length === 0) {\r\n itemsList = meetingInviteesData.map( (source: MeetingInvitee) => ({\r\n value: source.inviteeGuid, \r\n label: source.inviteeName,\r\n emailAddress: source.emailAddress,\r\n isRedViewUser: source.isRedViewUser,\r\n entityType: source.entityType,\r\n }));\r\n } else {\r\n for (const user of meetingInviteesData) {\r\n\r\n // tslint:disable-next-line: no-any\r\n const isExists = items.filter((item: any) => item.label.includes(user.inviteeName)).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n label: user.inviteeName,\r\n value: user.inviteeGuid,\r\n isRedViewUser: user.isRedViewUser,\r\n emailAddress: user.emailAddress,\r\n entityType: user.entityType,\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: offset + loadBlockLimit,\r\n hasNextPage: false, // meetingInviteesData.length !== 0 && (offset + loadBlockLimit) < recordCount,\r\n isLoading: false\r\n };\r\n });\r\n\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n \r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset, false);\r\n }\r\n };\r\n\r\n const onClose = (event: React.ChangeEvent<{}>) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('onClose Event', event);\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n hasNextPage: true,\r\n filter: '',\r\n offset: 0,\r\n items: []\r\n };\r\n });\r\n };\r\n\r\n const onOpen = (event: React.ChangeEvent<{}>) => {\r\n // tslint:disable-next-line: no-console\r\n fetchData(state.filter, 0, true);\r\n };\r\n\r\n const onSelection = (selection: IAutoCompleteItem, name: string) => {\r\n // tslint:disable-next-line: no-console\r\n // console.log('onSelection Event', selection);\r\n\r\n if (props.onSelection) {\r\n props.onSelection(selection, name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onInputChange={(event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => debounced(event, value, reason)}\r\n onBlur={props.onBlur}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n
\r\n
\r\n {option.entityType === EntityTypeEnum.TEAM ? \r\n : option.isRedViewUser ? \r\n : }\r\n
\r\n
\r\n
{option.label}
\r\n {option.entityType === EntityTypeEnum.STAFF && (\r\n <>\r\n {!!option.emailAddress && (\r\n
{option.emailAddress}
\r\n )}\r\n {/* {!!props.visible && props.visible!.role && (\r\n
{option.roleName}
\r\n )} */}\r\n \r\n )}\r\n
\r\n
\r\n );\r\n }}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveMeetingInviteesInFollowUpData(\r\n query: MeetingInviteesInFollowUpDataParams,\r\n refreshData: boolean,\r\n onSuccess: (data: MeetingInviteesInFollowUpData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: MEETING_INVITEES_FOLLOW_UP_QUERY,\r\n variables: {\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n isIncludeCurrent: query.isIncludeCurrent,\r\n isIncludeClosed: query.isIncludeClosed,\r\n isMyEnquiriesOnly: query.isMyEnquiriesOnly,\r\n sortColumn: query.sortColumn,\r\n sortDirection: query.sortDirection,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n followUpDue: query.followUpDue,\r\n newEnquiry: query.newEnquiry,\r\n assignedTo: query.assignedTo,\r\n areaOfLaw: query.areaOfLaw,\r\n teamList: query.teamList,\r\n isKeyOpportunity: query.isKeyOpportunity,\r\n enquiryQuality: query.enquiryQuality,\r\n enquiryLikelihoodToProceed: query.enquiryLikelihoodToProceed,\r\n isMeetingWithAdvancedFilter: query.isMeetingWithAdvancedFilter,\r\n sourceList: query.sourceList\r\n },\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface MeetingInviteesInFollowUpDataParams {\r\n offset?: number; \r\n first?: number; \r\n filter?: string; \r\n isIncludeCurrent?: boolean; \r\n isIncludeClosed?: boolean;\r\n isMyEnquiriesOnly?: boolean;\r\n sortColumn?: string; \r\n sortDirection?: string; \r\n groupBy?: string; \r\n groupByValue?: string;\r\n followUpDue?: string;\r\n newEnquiry?: string;\r\n assignedTo?: string;\r\n areaOfLaw?: string;\r\n teamList?: string;\r\n isKeyOpportunity?: boolean;\r\n enquiryQuality?: string;\r\n enquiryLikelihoodToProceed?: string;\r\n isMeetingWithAdvancedFilter?: boolean; \r\n sourceList?: string;\r\n}\r\n\r\nexport interface MeetingInviteesInFollowUpData {\r\n enquiry: Enquiry;\r\n}\r\n\r\nexport interface Enquiry {\r\n meetingInvitees: MeetingInvitee[];\r\n}\r\n\r\nexport interface MeetingInvitee {\r\n id: number;\r\n entityType: number;\r\n inviteeGuid: string;\r\n inviteeName: string;\r\n isActive: boolean;\r\n isRedViewUser: boolean;\r\n emailAddress: string;\r\n}\r\n\r\nconst MEETING_INVITEES_FOLLOW_UP_QUERY = gql`\r\n query meetingInviteesAdvancedFilter (\r\n $offset: Int, \r\n $first: Int, \r\n $filter: String, \r\n $isIncludeCurrent: Boolean, \r\n $isIncludeClosed: Boolean,\r\n $isMyEnquiriesOnly: Boolean,\r\n $sortColumn: String, \r\n $sortDirection: String, \r\n $groupBy: String, \r\n $groupByValue: String,\r\n $followUpDue: String,\r\n $newEnquiry: String,\r\n $assignedTo: String,\r\n $areaOfLaw: String,\r\n $teamList: String,\r\n $isKeyOpportunity: Boolean,\r\n $enquiryQuality: String,\r\n $enquiryLikelihoodToProceed: String,\r\n $isMeetingWithAdvancedFilter: Boolean, \r\n $sourceList: String\r\n ){\r\n enquiry{\r\n meetingInvitees (\r\n offset: $offset, first: $first, filter: $filter, \r\n isIncludeCurrent: $isIncludeCurrent, \r\n isIncludeClosed: $isIncludeClosed,\r\n isMyEnquiriesOnly: $isMyEnquiriesOnly,\r\n sortColumn: $sortColumn, \r\n sortDirection: $sortDirection,\r\n groupBy: $groupBy, \r\n groupByValue: $groupByValue,\r\n followUpDue: $followUpDue,\r\n newEnquiry: $newEnquiry,\r\n assignedTo: $assignedTo,\r\n areaOfLaw: $areaOfLaw,\r\n teamList: $teamList,\r\n isKeyOpportunity: $isKeyOpportunity,\r\n enquiryQuality: $enquiryQuality,\r\n enquiryLikelihoodToProceed: $enquiryLikelihoodToProceed,\r\n isMeetingWithAdvancedFilter: $isMeetingWithAdvancedFilter,\r\n \tsourceList: $sourceList\r\n ) {\r\n id,\r\n entityType,\r\n inviteeGuid,\r\n inviteeName,\r\n isActive,\r\n isRedViewUser,\r\n emailAddress\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { RenderInputParams } from '@material-ui/lab';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\nimport clsx from 'clsx';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0'\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n flexFlow: 'column',\r\n gap: '5px',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n // wordBreak: 'break-all',\r\n // wordWrap: 'break-word',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '5px',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n // wordBreak: 'break-all',\r\n // wordWrap: 'break-word',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n '& .dataSource': {\r\n fontStyle: 'italic',\r\n }\r\n },\r\n })\r\n);\r\n\r\nexport type OrganisationIAutoCompleteItem = IAutoCompleteItem & NameSummary;\r\n\r\ninterface OrganisationSelectorProps {\r\n isStaffOnly?: boolean;\r\n multiple?: boolean;\r\n label?: string;\r\n name: string;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n onSelection?: (value: OrganisationIAutoCompleteItem | OrganisationIAutoCompleteItem[] | IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n id?: string;\r\n required?: boolean;\r\n helperText?: string;\r\n error?: boolean;\r\n className?: string;\r\n disablePortal?: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface OrganisationSelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n items: OrganisationIAutoCompleteItem[];\r\n filter: string;\r\n}\r\n\r\nexport const OrganisationSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n const loadBlockLimit = 20;\r\n\r\n const [delayedonInputChange] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n fetchData(value, 0); \r\n },\r\n // delay in ms\r\n 500\r\n );\r\n \r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n items: [],\r\n filter: ''\r\n });\r\n\r\n useEffect(() => {\r\n fetchData('', 0);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = (filter: string, offset: number) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true,\r\n offset: offset,\r\n filter: filter\r\n };\r\n });\r\n\r\n const partyQueryParams: PartyQueryParams = {\r\n filter: filter.length > 0 ? filter : null,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n includeOrganisation: true,\r\n includeIndividual: null,\r\n includeStaff: null,\r\n };\r\n\r\n retrievePartyData(\r\n partyQueryParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveUserList(data, filter),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveUserList = (data: PartyData, filter: string) => {\r\n\r\n const nameSummaryData = data.party.nameSummaries.nameSummary;\r\n const recordCount = data.party.nameSummaries.recordCount;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: any = [...state.items];\r\n\r\n if (state.items.length === 0) {\r\n itemsList = nameSummaryData.map( (source: NameSummary) => ({\r\n ...source,\r\n value: source.guidID.toString(), \r\n label: source.name \r\n }));\r\n } else {\r\n for (const nameSummary of nameSummaryData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = state.items.filter((item: OrganisationIAutoCompleteItem) => \r\n item.value.toString().toLowerCase().includes(nameSummary.guidID.toString().toLowerCase())).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n ...nameSummary,\r\n label: nameSummary.name,\r\n value: nameSummary.guidID.toString()\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: state.offset + loadBlockLimit,\r\n hasNextPage: nameSummaryData.length !== 0 && (state.offset + loadBlockLimit) < recordCount,\r\n };\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n option.label}\r\n onInputChange={delayedonInputChange}\r\n disabled={props.disabled}\r\n renderInput={params => (\r\n \r\n )}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n
\r\n
\r\n {option.label}\r\n
\r\n {!option.isFromDataSource ? (\r\n
\r\n Entered\r\n
\r\n ) : null}\r\n
\r\n );\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport function retrievePartyData(\r\n query: PartyQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: PartyData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: PartyQuery,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first,\r\n offset: query.offset,\r\n includeIndividual: query.includeIndividual,\r\n includeOrganisation: query.includeOrganisation,\r\n includeStaff: query.includeStaff\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface PartyQueryParams {\r\n offset: number | null;\r\n first: number | null;\r\n filter: string | null;\r\n includeIndividual: Boolean | null;\r\n includeOrganisation: Boolean | null;\r\n includeStaff: Boolean | null;\r\n}\r\n\r\nexport interface PartyData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n party: Party;\r\n}\r\n\r\nexport interface Party {\r\n nameSummaries: NameSummaries;\r\n}\r\n\r\nexport interface NameSummaries {\r\n recordCount: number;\r\n nameSummary: NameSummary[];\r\n}\r\n\r\nexport interface NameSummary {\r\n id: number;\r\n guidID: string;\r\n nameId: number;\r\n name: string;\r\n address: string;\r\n isFromDataSource: boolean;\r\n}\r\n\r\nconst PartyQuery = gql`\r\n query Party(\r\n $offset: Int,\r\n $first: Int,\r\n $filter: String,\r\n $includeIndividual: Boolean,\r\n $includeOrganisation: Boolean,\r\n $includeStaff: Boolean,\r\n ){\r\n party{\r\n nameSummaries(\r\n offset: $offset,\r\n first: $first,\r\n filter: $filter,\r\n includeIndividual: $includeIndividual,\r\n includeOrganisation: $includeOrganisation,\r\n includeStaff: $includeStaff,\r\n ){\r\n recordCount\r\n nameSummary{\r\n id,\r\n nameId\r\n guidID,\r\n name\r\n address\r\n isFromDataSource\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\n// import { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { RenderInputParams } from '@material-ui/lab';\r\nimport PersonOutlinedIcon from '@material-ui/icons/PersonOutlined';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0'\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n width: '100%',\r\n '& > div': {\r\n padding: '0 10px',\r\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\r\n fontWeight: 400,\r\n },\r\n '& .icon-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .other': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n justifyContent: 'center',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n // wordBreak: 'break-all',\r\n // wordWrap: 'break-word',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '5px',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n // wordBreak: 'break-all',\r\n // wordWrap: 'break-word',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n whiteSpace: 'nowrap',\r\n },\r\n '& .dataSource': {\r\n fontStyle: 'italic',\r\n }\r\n }\r\n },\r\n isDataFromSource: {\r\n fontSize: '13px',\r\n }\r\n })\r\n);\r\n\r\ninterface IndividualSelectorProps {\r\n isStaffOnly?: boolean;\r\n multiple?: boolean;\r\n label?: string;\r\n name: string;\r\n // tslint:disable-next-line: no-any\r\n value?: IndividualNameSummary | any; // value only available in single select\r\n onSelection?: (value: IndividualNameSummary | IndividualNameSummary[], name: string) => void;\r\n id?: string;\r\n required?: boolean;\r\n helperText?: string;\r\n error?: boolean;\r\n className?: string;\r\n disablePortal?: boolean;\r\n enableSecondary?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n\r\n includeIndividual?: boolean;\r\n includeOrganisation?: boolean;\r\n includeStaff?: boolean;\r\n isClientsOnly?: boolean;\r\n tagsList?: string;\r\n stateList?: string;\r\n countryList?: string;\r\n businessTypeList?: string;\r\n eventsAndCampaignGuid?: string;\r\n refresh?: boolean;\r\n}\r\n\r\ninterface IndividualSelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n items: IndividualNameSummary[];\r\n filter: string;\r\n}\r\n\r\nexport const IndividualSelector: React.FC = props => {\r\n\r\n // console.log('eventsAndCampaignGuid', props.eventsAndCampaignGuid);\r\n\r\n const classes = useStyles();\r\n const loadBlockLimit = 20;\r\n \r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n items: [],\r\n filter: ''\r\n });\r\n\r\n const [delayedonInputChange] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n\r\n let isClear = false;\r\n let offset = 0;\r\n let filter = '';\r\n\r\n if (reason === 'input') {\r\n filter = value;\r\n isClear = true;\r\n\r\n fetchData(filter, offset, isClear);\r\n }\r\n },\r\n // delay in ms\r\n 500\r\n );\r\n\r\n const fetchData = (filter: string, offset: number, isClear: boolean) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true,\r\n };\r\n });\r\n\r\n const partyQueryParams: PartyQueryParams = {\r\n filter: filter,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n includeOrganisation: props.includeOrganisation ?? null,\r\n includeIndividual: props.includeIndividual ?? true,\r\n includeStaff: props.includeStaff ?? null,\r\n isClientsOnly: props.isClientsOnly,\r\n eventsAndCampaignGuid: props.eventsAndCampaignGuid\r\n };\r\n\r\n retrievePartyData(\r\n partyQueryParams,\r\n props.refresh ?? false,\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data, filter, offset, isClear),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: PartyData, filter: string, offset: number, isClear: boolean) => {\r\n\r\n const nameSummaryData = data.party.nameSummaries.nameSummary;\r\n const recordCount = data.party.nameSummaries.recordCount;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: IndividualNameSummary[] = [];\r\n let items = state.items;\r\n \r\n if (!isClear) {\r\n itemsList = [...state.items];\r\n } else {\r\n items = [];\r\n }\r\n\r\n if (items && items.length === 0) {\r\n itemsList = nameSummaryData.map( (source: IndividualNameSummary) => (\r\n {\r\n value: source.guidID.toString(),\r\n label: source.name,\r\n id: source.id,\r\n guidID: source.guidID.toString(), \r\n name: source.name,\r\n firstName: source.firstName,\r\n lastName: source.lastName,\r\n emailAddress: source.emailAddress,\r\n mobile: source.mobile,\r\n phone: source.phone,\r\n gender: source.gender,\r\n organisationGuid: source.organisationGuid,\r\n organisationName: source.organisationName,\r\n nameId: source.nameId,\r\n addressName: source.addressName,\r\n floor: source.floor,\r\n number: source.number,\r\n street: source.street,\r\n city: source.city,\r\n state: source.state,\r\n postCode: source.postCode,\r\n country: source.country,\r\n isFromDataSource: source.isFromDataSource,\r\n title: source.title\r\n }));\r\n } else {\r\n for (const nameSummary of nameSummaryData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = items.filter((item: any) => item.value === nameSummary.guidID).length;\r\n\r\n // const isExists = items.filter((item: IndividualNameSummary) => \r\n // item.guidID.toString().toLowerCase().includes(nameSummary.guidID.toLowerCase())).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n value: nameSummary.guidID.toString(),\r\n label: nameSummary.name,\r\n id: nameSummary.id,\r\n guidID: nameSummary.guidID.toString(), \r\n name: nameSummary.name,\r\n firstName: nameSummary.firstName,\r\n lastName: nameSummary.lastName,\r\n emailAddress: nameSummary.emailAddress,\r\n mobile: nameSummary.mobile,\r\n phone: nameSummary.phone,\r\n gender: nameSummary.gender,\r\n organisationGuid: nameSummary.organisationGuid,\r\n organisationName: nameSummary.organisationName,\r\n nameId: nameSummary.nameId,\r\n addressName: nameSummary.addressName,\r\n floor: nameSummary.floor,\r\n number: nameSummary.number,\r\n street: nameSummary.street,\r\n city: nameSummary.city,\r\n state: nameSummary.state,\r\n postCode: nameSummary.postCode,\r\n country: nameSummary.country,\r\n isFromDataSource: nameSummary.isFromDataSource,\r\n title: nameSummary.title\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: offset + loadBlockLimit,\r\n hasNextPage: nameSummaryData.length !== 0 && (offset + loadBlockLimit) < recordCount,\r\n };\r\n });\r\n\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset, false);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, loading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {loading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n const onClose = (event: React.ChangeEvent<{}>) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n hasNextPage: true,\r\n filter: '',\r\n offset: 0,\r\n items: []\r\n };\r\n });\r\n };\r\n\r\n const onOpen = (event: React.ChangeEvent<{}>) => {\r\n \r\n fetchData(state.filter, 0, true);\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const onSelection = (selection: any, name: string) => {\r\n\r\n if (props.onSelection) {\r\n props.onSelection(selection, name);\r\n }\r\n };\r\n\r\n return (\r\n
\r\n typeof option === 'string' ? option : option.label}\r\n onInputChange={delayedonInputChange}\r\n onBlur={props.onBlur}\r\n // tslint:disable-next-line: no-any\r\n renderInput={(params: any) => (\r\n \r\n )}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {option.label}\r\n
\r\n {!!props.enableSecondary && (\r\n <>\r\n
{option.emailAddress}
\r\n
{option.phone}
\r\n \r\n )}\r\n {!option.isFromDataSource ? (\r\n
\r\n Entered\r\n
\r\n ) : null}\r\n
\r\n
\r\n );\r\n }}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport function retrievePartyData(\r\n query: PartyQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: PartyData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: PartyQuery,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first,\r\n offset: query.offset,\r\n includeIndividual: query.includeIndividual,\r\n includeOrganisation: query.includeOrganisation,\r\n includeStaff: query.includeStaff,\r\n isClientsOnly: query.isClientsOnly,\r\n eventsAndCampaignGuid: query.eventsAndCampaignGuid\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface PartyQueryParams {\r\n offset: number | null;\r\n first: number | null;\r\n filter: string | null;\r\n includeIndividual: boolean | null;\r\n includeOrganisation: boolean | null;\r\n includeStaff: boolean | null;\r\n isClientsOnly?: boolean;\r\n tagsList?: String;\r\n stateList?: String;\r\n countryList?: String;\r\n businessTypeList?: String;\r\n eventsAndCampaignGuid?: string;\r\n}\r\n\r\nexport interface PartyData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n party: Party;\r\n}\r\n\r\nexport interface Party {\r\n nameSummaries: NameSummaries;\r\n}\r\n\r\nexport interface NameSummaries {\r\n recordCount: number;\r\n nameSummary: IndividualNameSummary[];\r\n}\r\n\r\nexport interface IndividualNameSummary {\r\n value: string;\r\n label: string;\r\n id: number | null;\r\n guidID: string;\r\n name: string;\r\n firstName: string | null;\r\n lastName: string | null;\r\n emailAddress: string | null;\r\n mobile: string | null;\r\n phone: string | null;\r\n gender: string | null;\r\n organisationName: string | null;\r\n organisationGuid: string | null;\r\n nameId: number | null;\r\n addressName: string | null;\r\n floor: string | null;\r\n number: string | null;\r\n street: string | null;\r\n city: string | null;\r\n state: string | null;\r\n postCode: string | null;\r\n country: string | null;\r\n isFromDataSource: boolean | null;\r\n title: string | null;\r\n}\r\n\r\nconst PartyQuery = gql`\r\n query Party(\r\n $offset: Int,\r\n $first: Int,\r\n $filter: String,\r\n $includeIndividual: Boolean,\r\n $includeOrganisation: Boolean,\r\n $includeStaff: Boolean,\r\n\r\n $isClientsOnly: Boolean,\r\n $tagsList: String,\r\n $stateList: String,\r\n $countryList: String,\r\n $businessTypeList: String,\r\n $eventsAndCampaignGuid: String\r\n ){\r\n party{\r\n nameSummaries(\r\n offset: $offset, \r\n first: $first, \r\n filter: $filter, \r\n isClientsOnly: $isClientsOnly, \r\n includeStaff: $includeStaff, \r\n includeIndividual: $includeIndividual, \r\n includeOrganisation: $includeOrganisation,\r\n tagsList: $tagsList,\r\n stateList: $stateList,\r\n countryList: $countryList,\r\n businessTypeList: $businessTypeList,\r\n eventsAndCampaignGuid: $eventsAndCampaignGuid\r\n ){\r\n recordCount\r\n nameSummary{\r\n id,\r\n guidID,\r\n name,\r\n firstName,\r\n lastName,\r\n emailAddress,\r\n mobile,\r\n phone,\r\n gender,\r\n organisationName,\r\n organisationGuid,\r\n nameId\r\n addressName \r\n floor\r\n number\r\n street\r\n city\r\n state\r\n postCode\r\n country\r\n isFromDataSource\r\n title\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","/* eslint-disable no-use-before-define */\r\nimport React, { useState, useEffect } from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\n\r\nconst useStyles = makeStyles({\r\n option: {\r\n // fontSize: 15,\r\n // '& > span': {\r\n // marginRight: 10,\r\n // fontSize: 18,\r\n // },\r\n width: '100%',\r\n },\r\n});\r\n\r\ninterface SelectorProps {\r\n onSelection?: (selection: IAutoCompleteItem, name: string) => void;\r\n // tslint:disable-next-line: no-any\r\n items?: any;\r\n required?: boolean;\r\n label?: string;\r\n name: string;\r\n value: string; // GuidId\r\n disabled?: boolean;\r\n error?: boolean;\r\n className: string;\r\n helperText: string;\r\n}\r\n\r\ninterface ValueDetails {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport const GenderSelector: React.FunctionComponent = (props) => {\r\n const classes = useStyles();\r\n\r\n const [values, setValues] = useState({\r\n label: '',\r\n value: '',\r\n });\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: object, item: any) => {\r\n setValues({\r\n label: item ? item.label : '',\r\n value: item ? item.value : '',\r\n });\r\n\r\n if (props.onSelection) {\r\n props.onSelection(\r\n {\r\n label: item ? item.label : '',\r\n value: item ? item.value : '',\r\n },\r\n props.name\r\n );\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n // - Ran only once\r\n // If we recieve a leadGuid, then fetch LeadDetails\r\n if (props.value) {\r\n setValues({\r\n label: props.value,\r\n value: props.value,\r\n });\r\n }\r\n }, [props.value]);\r\n\r\n return (\r\n option.label}\r\n value={{ value: values.value, label: values.label }}\r\n onChange={handleChange}\r\n autoSelect={true}\r\n disabled={props.disabled}\r\n renderInput={(params) => (\r\n \r\n )}\r\n />\r\n );\r\n};\r\n\r\ninterface GenderType {\r\n label: string;\r\n value: string;\r\n}\r\n\r\n// From https://bitbucket.org/atlassian/atlaskit-mk-2/raw/4ad0e56649c3e6c973e226b7efaeb28cb240ccb0/packages/core/select/src/data/countries.js\r\nconst Gender = [\r\n { label: 'Unknown', value: 'Unknown' },\r\n { label: 'Male', value: 'Male' },\r\n { label: 'Female', value: 'Female' },\r\n];\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { client } from '../..';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%'\r\n },\r\n })\r\n);\r\n\r\ninterface AreaOfLawSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[] | IAreaOfLawAutoCompleteItem | IAreaOfLawAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface AreaOfLawSelectorState {\r\n isLoading: boolean;\r\n areaOfLaw: IAutoCompleteItem[];\r\n}\r\n\r\n// tslint:disable-next-line: interface-name\r\nexport interface IAreaOfLawAutoCompleteItem extends IAutoCompleteItem {\r\n estimatedFees: number;\r\n isEstimatedFeesIncludesTax: boolean;\r\n estimatedDisbursements: number;\r\n isEstimatedDisbursementsIncludesTax: boolean;\r\n}\r\n\r\nexport const AreaOfLawSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n areaOfLaw: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n retrieveAreaOfLawData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveAreaOfLaw(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveAreaOfLaw = (data: AreaOfLawData) => {\r\n setState({\r\n ...state,\r\n areaOfLaw: data.lookup.areaOfLaw.map((source: AreaOfLaw) => ({\r\n value: source.guidId,\r\n label: source.description,\r\n estimatedFees: source.estimatedFees,\r\n isEstimatedFeesIncludesTax: source.isEstimatedFeesIncludesTax,\r\n estimatedDisbursements: source.estimatedDisbursements,\r\n isEstimatedDisbursementsIncludesTax: source.isEstimatedDisbursementsIncludesTax\r\n })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'areaOfLaw');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveAreaOfLawData(\r\n refreshData: boolean,\r\n onSuccess: (data: AreaOfLawData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: LeadAreaOfLawQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface AreaOfLawData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n areaOfLaw: AreaOfLaw[];\r\n}\r\n\r\nexport interface AreaOfLaw {\r\n guidId: string;\r\n description: string;\r\n isAvailableInAPI: boolean;\r\n estimatedFees: number;\r\n isEstimatedFeesIncludesTax: boolean;\r\n estimatedDisbursements: number;\r\n isEstimatedDisbursementsIncludesTax: boolean;\r\n}\r\n\r\nconst LeadAreaOfLawQuery = gql`\r\n query LookupAreaOfLaw{\r\n lookup {\r\n areaOfLaw{\r\n guidId \r\n description,\r\n sequence,\r\n isAvailableInAPI\r\n estimatedFees\r\n isEstimatedFeesIncludesTax\r\n \t estimatedDisbursements\r\n \t isEstimatedDisbursementsIncludesTax\r\n }\r\n }\r\n }\r\n`;\r\n","import { CircularProgress } from '@material-ui/core';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport { Autocomplete } from '@material-ui/lab';\r\nimport { RenderInputParams } from '@material-ui/lab/Autocomplete';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport gql from 'graphql-tag';\r\nimport * as React from 'react';\r\nimport { graphql } from 'react-apollo';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { EnquiryData, EnquiryOutcomeReason } from '../models/Enquiry';\r\n\r\ninterface SelectorProps {\r\n onSelection?: (selection: IAutoCompleteItem, name: string, reasonGuid: string) => void;\r\n // tslint:disable-next-line: no-any\r\n items?: any;\r\n required?: boolean;\r\n label?: string;\r\n name: string;\r\n data: EnquiryData;\r\n value: string; // GuidId\r\n disabled?: boolean;\r\n error?: boolean;\r\n className?: string;\r\n disablePortal?: boolean;\r\n}\r\n\r\ninterface SelectorState {\r\n selectedCode: string;\r\n selectedLabel: string;\r\n error?: boolean;\r\n}\r\n\r\nclass Selector extends React.Component {\r\n // tslint:disable-next-line: no-any\r\n public reason: any;\r\n\r\n constructor(props: SelectorProps, state?: SelectorState) {\r\n super(props, state);\r\n \r\n this.handleChange = this.handleChange.bind(this);\r\n \r\n this.state = {\r\n selectedCode: '',\r\n selectedLabel: '',\r\n error: false\r\n };\r\n }\r\n\r\n public UNSAFE_componentWillReceiveProps(nextProps: SelectorProps) {\r\n if ( (this.props.value !== nextProps.value && this.reason) || \r\n this.props.error !== nextProps.error ) {\r\n \r\n if (this.reason) {\r\n // tslint:disable-next-line: no-any\r\n const filteredItem = this.reason.find((item: any) => {\r\n return item.value.toString().includes(nextProps.value.toString());\r\n });\r\n\r\n if (filteredItem && nextProps.value.toString() !== '') {\r\n this.setState({\r\n selectedCode: filteredItem.value,\r\n selectedLabel: filteredItem.label\r\n });\r\n } else {\r\n this.setState({\r\n selectedCode: '',\r\n selectedLabel: ''\r\n });\r\n } \r\n }\r\n \r\n if (this.props.error !== nextProps.error) {\r\n this.setState({\r\n error: nextProps.error\r\n });\r\n }\r\n }\r\n }\r\n\r\n public render() {\r\n if (!this.props.data.loading || this.props.data.enquiry) {\r\n const enquiryData: EnquiryData = this.props.data;\r\n this.reason = enquiryData.enquiry.reasons.map( (source: EnquiryOutcomeReason) => ({\r\n value: source.description, \r\n label: source.description, \r\n reasonGuid: source.guidId, \r\n isReferrer: source.isReferrer\r\n }));\r\n } else { \r\n this.reason = [];\r\n }\r\n \r\n return (\r\n
\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n
\r\n );\r\n }\r\n\r\n private getInputProps(params: RenderInputParams, isLoading?: boolean) {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n }\r\n\r\n // tslint:disable-next-line: no-any\r\n private handleChange(event: object, item: any) { \r\n \r\n // console.log('item', item);\r\n\r\n this.setState( {\r\n selectedCode: item ? item.value : '',\r\n selectedLabel: item ? item.label : ''\r\n });\r\n\r\n if (this.props.onSelection) {\r\n this.props.onSelection(\r\n {\r\n label: item ? item.label : '', \r\n value: item ? item.value : '',\r\n secondaryValue: item ? item.isReferrer : false\r\n }, \r\n this.props.name,\r\n item ? item.reasonGuid : '');\r\n } \r\n }\r\n}\r\n\r\nconst EnquiryOutcomeReasonData = gql`\r\nquery enquiryReason {\r\n\tenquiry{\r\n reasons{\r\n guidId,\r\n description,\r\n isReferrer\r\n }\r\n }\r\n}`;\r\n\r\n// tslint:disable-next-line: no-any\r\nexport const ReasonSelector = graphql\r\n (EnquiryOutcomeReasonData, {\r\n options: () => ({ \r\n fetchPolicy: 'cache-first',\r\n variables: {}\r\n })\r\n })\r\n (Selector);","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { client } from '../..';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { RenderInputParams } from '@material-ui/lab';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0'\r\n },\r\n })\r\n);\r\n\r\ninterface ReferredToSelectorProps {\r\n isStaffOnly?: boolean;\r\n multiple?: boolean;\r\n label?: string;\r\n name: string;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n id?: string;\r\n required?: boolean;\r\n helperText?: string;\r\n error?: boolean;\r\n className?: string;\r\n disablePortal?: boolean;\r\n}\r\n\r\ninterface ReferredToSelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n items: IAutoCompleteItem[];\r\n filter: string;\r\n}\r\n\r\nexport const ReferredToSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n const loadBlockLimit = 20;\r\n\r\n const [delayedonInputChange] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n let isClear = false;\r\n let offset = 0;\r\n let filter = '';\r\n\r\n if (reason === 'input') {\r\n filter = value;\r\n isClear = true;\r\n\r\n fetchData(filter, offset, isClear);\r\n }\r\n },\r\n // delay in ms\r\n 500\r\n );\r\n \r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n items: [],\r\n filter: ''\r\n });\r\n\r\n useEffect(() => {\r\n fetchData('', 0, false);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = (filter: string, offset: number, isClear: boolean) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true,\r\n offset: offset,\r\n filter: filter\r\n };\r\n });\r\n\r\n const partyQueryParams: PartyQueryParams = {\r\n filter: filter.length > 0 ? filter : null,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n includeOrganisation: true,\r\n includeIndividual: true,\r\n includeStaff: null,\r\n };\r\n\r\n retrievePartyData(\r\n partyQueryParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveUserList(data, filter, isClear),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveUserList = (data: PartyData, filter: string, isClear: boolean) => {\r\n\r\n const nameSummaryData = data.party.nameSummaries.nameSummary;\r\n const recordCount = data.party.nameSummaries.recordCount;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: any = [...state.items];\r\n\r\n if (!isClear) {\r\n itemsList = [...state.items];\r\n } else {\r\n itemsList = [];\r\n }\r\n\r\n if (state.items.length === 0) {\r\n itemsList = nameSummaryData.map( (source: NameSummary) => ({value: source.guidID.toString(), label: source.name }));\r\n } else {\r\n for (const nameSummary of nameSummaryData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = state.items.filter((item: IAutoCompleteItem) => \r\n item.value.toString().toLowerCase().includes(nameSummary.guidID.toString().toLowerCase())).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n label: nameSummary.name,\r\n value: nameSummary.guidID.toString()\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: state.offset + loadBlockLimit,\r\n hasNextPage: nameSummaryData.length !== 0 && (state.offset + loadBlockLimit) < recordCount,\r\n };\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset, false);\r\n }\r\n };\r\n\r\n // const onInputChange = (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n // fetchData(value, 0);\r\n // };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n const onClose = (event: React.ChangeEvent<{}>) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n hasNextPage: true,\r\n filter: '',\r\n offset: 0,\r\n items: []\r\n };\r\n });\r\n };\r\n\r\n const onOpen = (event: React.ChangeEvent<{}>) => {\r\n // tslint:disable-next-line: no-console\r\n fetchData(state.filter, 0, true);\r\n };\r\n\r\n return (\r\n
\r\n option.label}\r\n onInputChange={delayedonInputChange}\r\n disabledFilterOptions={true}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport function retrievePartyData(\r\n query: PartyQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: PartyData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: PartyQuery,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first,\r\n offset: query.offset,\r\n includeIndividual: query.includeIndividual,\r\n includeOrganisation: query.includeOrganisation,\r\n includeStaff: query.includeStaff\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface PartyQueryParams {\r\n offset: number | null;\r\n first: number | null;\r\n filter: string | null;\r\n includeIndividual: Boolean | null;\r\n includeOrganisation: Boolean | null;\r\n includeStaff: Boolean | null;\r\n}\r\n\r\nexport interface PartyData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n party: Party;\r\n}\r\n\r\nexport interface Party {\r\n nameSummaries: NameSummaries;\r\n}\r\n\r\nexport interface NameSummaries {\r\n recordCount: number;\r\n nameSummary: NameSummary[];\r\n}\r\n\r\nexport interface NameSummary {\r\n id: number;\r\n guidID: string;\r\n name: string;\r\n address: string;\r\n}\r\n\r\nconst PartyQuery = gql`\r\n query Party(\r\n $offset: Int,\r\n $first: Int,\r\n $filter: String,\r\n $includeIndividual: Boolean,\r\n $includeOrganisation: Boolean,\r\n $includeStaff: Boolean,\r\n ){\r\n party{\r\n nameSummaries(\r\n offset: $offset,\r\n first: $first,\r\n filter: $filter,\r\n includeIndividual: $includeIndividual,\r\n includeOrganisation: $includeOrganisation,\r\n includeStaff: $includeStaff,\r\n ){\r\n recordCount\r\n nameSummary{\r\n id,\r\n guidID,\r\n name\r\n address\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, PopperProps } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { EmailTemplateTypeEnum } from '../../emailTemplatesConfiguration/EmailTemplateRespository';\r\n\r\nexport interface EmailTemplateQueryParams {\r\n emailType: String;\r\n areaOfLaw: String;\r\n isActive: boolean;\r\n}\r\n\r\ninterface EmailTemplateSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n onBlur?: React.FocusEventHandler;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n PopperComponent?: React.ComponentType;\r\n areaOfLaw: string;\r\n emailType: EmailTemplateTypeEnum;\r\n}\r\n\r\ninterface EmailTemplateSelectorState {\r\n isLoading: boolean;\r\n data: IAutoCompleteItem[];\r\n}\r\n\r\nexport const EmailTemplateSelector: React.FC = props => {\r\n\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n data: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n let query: EmailTemplateQueryParams = {\r\n areaOfLaw: props.areaOfLaw,\r\n emailType: EmailTemplateTypeEnum[props.emailType],\r\n isActive: true\r\n };\r\n\r\n retrieveEmailTemplateData(\r\n query,\r\n false, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: TemplatedData) => {\r\n setState({\r\n ...state,\r\n data: data.templates.emailTemplateList.map((source: EmailTemplate) => ({\r\n value: source.emailTemplateGuid, \r\n label: source.name,\r\n secondaryValue: source.emailType\r\n })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n PopperComponent={props.PopperComponent} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n PopperComponent={props.PopperComponent} \r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nexport interface TemplatedData {\r\n templates: Templates;\r\n}\r\nexport interface Templates {\r\n emailTemplateList: EmailTemplate[];\r\n}\r\nexport interface EmailTemplate {\r\n id: number;\r\n emailTemplateGuid: string;\r\n emailStyle: number;\r\n emailType: number;\r\n name: string;\r\n description: boolean;\r\n}\r\n\r\nexport function retrieveEmailTemplateData(\r\n query: EmailTemplateQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: TemplatedData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: EmailTemplateListData,\r\n variables: {\r\n emailType: query.emailType,\r\n areaOfLaw: query.areaOfLaw,\r\n isActive: query.isActive\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst EmailTemplateListData = gql`\r\nquery EmailTemplateList($emailType: EmailType, $areaOfLaw: String, $isActive: Boolean) {\r\n templates {\r\n emailTemplateList(emailType:$emailType, areaOfLaw: $areaOfLaw, isActive: $isActive ){\r\n emailTemplateGuid\r\n emailType,\r\n emailStyle,\r\n name,\r\n description\r\n }\r\n }\r\n}`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\n// import { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress, PopperProps } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { UserFeature, UserFeatureEnum } from '../../types/UserFeature';\r\nimport { FirmData, Office } from '../../lookupConfiguration/models/Firm';\r\n\r\nexport interface OfficeQueryParams {\r\n isMyOfficeOnly: boolean | null;\r\n}\r\n\r\ninterface DataItem extends IAutoCompleteItem, Office {}\r\ninterface OfficeLocationSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: DataItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value?: IAutoCompleteItem | IAutoCompleteItem[], name?: string) => void;\r\n onBlur?: React.FocusEventHandler;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n style?: React.CSSProperties; \r\n disablePortal?: boolean;\r\n showAllOffice?: boolean;\r\n PopperComponent?: React.ComponentType;\r\n}\r\n\r\ninterface OfficeLocationSelectorState {\r\n isLoading: boolean;\r\n data: DataItem[];\r\n}\r\n\r\nexport const OfficeLocationSelector: React.FC = props => {\r\n\r\n // const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n data: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n let query: OfficeQueryParams = {\r\n isMyOfficeOnly : props.showAllOffice && props.showAllOffice === true // When not used with Dashboard controls\r\n ? null\r\n : (\r\n UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardOfficeView) \r\n ? null\r\n : UserFeature.HasAccess(UserFeatureEnum.hasFirmDashboardMyOfficeOnly)\r\n )\r\n \r\n };\r\n\r\n retrieveOfficeData(\r\n query,\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveData(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveData = (data: FirmData) => {\r\n setState({\r\n ...state,\r\n data: data.firm.firmOffices.firmOffice.map((source: Office) => ({\r\n ...source, \r\n value: source.guidID, \r\n label: source.description\r\n })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const handleOnClose = (event: React.ChangeEvent<{}>) => {\r\n\r\n // tslint:disable-next-line: no-string-literal\r\n if (event.currentTarget && event.currentTarget['value']) {\r\n // tslint:disable-next-line: no-string-literal\r\n let newValue = event.currentTarget['value'];\r\n\r\n if (props.onSelection) {\r\n // tslint:disable-next-line: no-string-literal\r\n let tempValue = { value: newValue, label: newValue };\r\n props.onSelection(tempValue, props.name ? props.name : 'officeLocation');\r\n }\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n <>\r\n { props.multiple ? \r\n (\r\n option.label} \r\n PopperComponent={props.PopperComponent} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n PopperComponent={props.PopperComponent} \r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n \r\n );\r\n};\r\n\r\nexport function retrieveOfficeData(\r\n query: OfficeQueryParams | undefined,\r\n refreshData: boolean,\r\n onSuccess: (data: FirmData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: FirmOfficeList,\r\n variables: {\r\n isMyOfficeOnly: query ? query.isMyOfficeOnly : null\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nconst FirmOfficeList = gql`\r\nquery firmOfficeList($isMyOfficeOnly: Boolean) {\r\n firm {\r\n firmOffices(isMyOfficeOnly: $isMyOfficeOnly) {\r\n recordCount\r\n firmOffice {\r\n guidID,\r\n description,\r\n staffCount,\r\n timezone,\r\n timezoneDescription,\r\n baseUtcOffset\r\n }\r\n }\r\n }\r\n}`;","import React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { TextField, CircularProgress, ListItem, ListItemText } from '@material-ui/core';\r\nimport { RenderInputParams } from '@material-ui/lab';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { client } from '../..';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0'\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n width: '100%',\r\n '& > div': {\r\n padding: '0 10px',\r\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\r\n fontWeight: 400,\r\n },\r\n '& .icon-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .other': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n },\r\n '& .third': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.675rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n fontWeight: 600\r\n }\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface EnquiryAutocompleteSelectorProps {\r\n isStaffOnly?: boolean;\r\n multiple?: boolean;\r\n isExternal?: boolean;\r\n label?: string;\r\n name: string;\r\n required?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n id?: string;\r\n error?: boolean;\r\n disablePortal?: boolean;\r\n className?: string;\r\n helperText?: React.ReactNode;\r\n onBlur?: React.FocusEventHandler;\r\n variant?: 'filled' | 'standard' | 'outlined';\r\n disabled?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n}\r\n\r\ninterface EnquiryAutocompleteSelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n filter: string;\r\n // tslint:disable-next-line: no-any\r\n items: any;\r\n}\r\n\r\nexport const EnquiryAutocompleteSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n const loadBlockLimit = 20;\r\n \r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n filter: '',\r\n items: [],\r\n });\r\n\r\n const [delayedonInputChange] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n\r\n let isClear = false;\r\n let offset = 0;\r\n let filter = '';\r\n\r\n if (reason === 'input') {\r\n filter = value;\r\n isClear = true;\r\n\r\n fetchData(filter, offset, isClear);\r\n }\r\n },\r\n // delay in ms\r\n 500\r\n );\r\n \r\n const fetchData = (filter: string, offset: number, isClear: boolean) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true\r\n };\r\n });\r\n\r\n const enquirySummaryQueryParams: EnquirySummaryQueryParams = {\r\n filter: filter,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n isIncludeCurrent: true,\r\n isIncludeClosed: true,\r\n isMyEnquiriesOnly: false,\r\n groupBy: null,\r\n groupByValue: null,\r\n followUpDue: null,\r\n newEnquiry: null,\r\n assignedTo: null,\r\n areaOfLaw: null,\r\n teamList: null,\r\n isKeyOpportunity: false,\r\n enquiryQuality: null,\r\n enquiryLikelihoodToProceed: null,\r\n meetingWith: null,\r\n status: null,\r\n };\r\n\r\n retrieveEnquirySummaryData(\r\n enquirySummaryQueryParams,\r\n true, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveSummaryList(data, filter, offset, isClear),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveSummaryList = (data: EnquiryData, filter: string, offset: number, isClear: boolean) => {\r\n\r\n const summaryData = data.enquiry.summaryList.summaries;\r\n const recordCount = data.enquiry.summaryList.recordCount;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: any = [];\r\n\r\n let items = state.items;\r\n\r\n if (!isClear) {\r\n itemsList = [...state.items];\r\n } else {\r\n items = [];\r\n }\r\n\r\n if (items && items.length === 0) {\r\n itemsList = summaryData.map( (source: Summary) => ({\r\n value: source.guid, \r\n label: source.name,\r\n email: source.email,\r\n }));\r\n } else {\r\n for (const summary of summaryData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = items.filter((item: any) => item && item.email !== null && item.email.includes(summary.email)).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n value: summary.guid, \r\n label: summary.name,\r\n email: summary.email\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: offset + loadBlockLimit,\r\n hasNextPage: summaryData.length !== 0 && (offset + loadBlockLimit) < recordCount,\r\n };\r\n });\r\n\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n \r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset, false);\r\n }\r\n };\r\n\r\n const onClose = (event: React.ChangeEvent<{}>) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n hasNextPage: true,\r\n filter: '',\r\n offset: 0,\r\n items: []\r\n };\r\n });\r\n };\r\n\r\n const onOpen = (event: React.ChangeEvent<{}>) => {\r\n \r\n fetchData(state.filter, 0, true);\r\n };\r\n\r\n const onSelection = (selection: IAutoCompleteItem, name: string) => {\r\n\r\n if (props.onSelection) {\r\n props.onSelection(selection, name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onInputChange={delayedonInputChange}\r\n onBlur={props.onBlur}\r\n disabled={props.disabled}\r\n disableCloseOnSelect={props.disableCloseOnSelect}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n \r\n \r\n \r\n );\r\n }}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport interface EnquirySummaryQueryParams {\r\n offset: number | null; \r\n first: number | null;\r\n filter?: string | null;\r\n isIncludeCurrent: boolean | null;\r\n isIncludeClosed: boolean | null;\r\n isMyEnquiriesOnly: boolean | null;\r\n sortColumn?: string | null; \r\n sortDirection?: string | null;\r\n groupBy: string | null;\r\n groupByValue: string | null;\r\n followUpDue: string | null;\r\n newEnquiry: string | null;\r\n assignedTo: string | null;\r\n areaOfLaw: string | null;\r\n teamList: string | null;\r\n isKeyOpportunity: boolean;\r\n enquiryQuality: string | null;\r\n enquiryLikelihoodToProceed: string | null;\r\n meetingWith: string | null;\r\n status: string | null;\r\n}\r\n\r\nexport interface EnquiryData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n enquiry: Enquiry;\r\n}\r\nexport interface Enquiry {\r\n summaryList: SummaryList;\r\n}\r\n\r\nexport interface SummaryList {\r\n recordCount: number;\r\n actualRowCountForSearch: number;\r\n summaries: Summary[];\r\n}\r\n\r\nexport interface Summary {\r\n id: number;\r\n guid: string;\r\n name: string;\r\n firstName: string;\r\n lastName: string;\r\n email: null | string;\r\n}\r\n\r\nexport function retrieveEnquirySummaryData(query: EnquirySummaryQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: EnquiryData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void)\r\n : void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client.query({\r\n query: EnquirySummaryListData,\r\n variables: {\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n isIncludeCurrent: query.isIncludeCurrent,\r\n isIncludeClosed: query.isIncludeClosed,\r\n isMyEnquiriesOnly: query.isMyEnquiriesOnly,\r\n sortColumn: query.sortColumn,\r\n sortDirection: query.sortDirection,\r\n groupBy: query.groupBy,\r\n groupByValue: query.groupByValue,\r\n followUpDue: query.followUpDue,\r\n newEnquiry: query.newEnquiry,\r\n assignedTo: query.assignedTo,\r\n areaOfLaw: query.areaOfLaw,\r\n teamList: query.teamList,\r\n isKeyOpportunity: query.isKeyOpportunity,\r\n enquiryQuality: query.enquiryQuality,\r\n enquiryLikelihoodToProceed: query.enquiryLikelihoodToProceed,\r\n meetingWith: query.meetingWith,\r\n status: query.status\r\n },\r\n fetchPolicy: fetchPolicy\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any; }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => { onError(reason); }\r\n );\r\n}\r\n\r\nconst EnquirySummaryListData = gql`\r\n query EnquirySummaryListData(\r\n $offset: Int, \r\n $first: Int, \r\n $filter: String, \r\n $isIncludeCurrent: Boolean, \r\n $isIncludeClosed: Boolean,\r\n $isMyEnquiriesOnly: Boolean,\r\n $sortColumn: String, \r\n $sortDirection: String, \r\n $groupBy: String, \r\n $groupByValue: String,\r\n $followUpDue: String,\r\n $newEnquiry: String,\r\n $assignedTo: String,\r\n $areaOfLaw: String,\r\n $teamList: String,\r\n $isKeyOpportunity: Boolean,\r\n $enquiryQuality: String,\r\n $enquiryLikelihoodToProceed: String,\r\n $meetingWith: String,\r\n $status: String\r\n ) {\r\n enquiry{\r\n summaryList(\r\n offset: $offset, \r\n first: $first, \r\n filter: $filter, \r\n isIncludeCurrent: $isIncludeCurrent, \r\n isIncludeClosed: $isIncludeClosed,\r\n isMyEnquiriesOnly: $isMyEnquiriesOnly,\r\n sortColumn: $sortColumn, \r\n sortDirection: $sortDirection,\r\n groupBy: $groupBy, \r\n groupByValue: $groupByValue,\r\n followUpDue: $followUpDue,\r\n newEnquiry: $newEnquiry,\r\n assignedTo: $assignedTo,\r\n areaOfLaw: $areaOfLaw,\r\n teamList: $teamList,\r\n isKeyOpportunity: $isKeyOpportunity,\r\n enquiryQuality: $enquiryQuality,\r\n enquiryLikelihoodToProceed: $enquiryLikelihoodToProceed,\r\n meetingWith: $meetingWith,\r\n status: $status\r\n ) {\r\n\r\n recordCount,\r\n actualRowCountForSearch,\r\n summaries{\r\n id\r\n guid\r\n name\r\n firstName\r\n lastName\r\n email \r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { FetchPolicy } from 'apollo-client';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n // minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\ninterface MatterTypeStateSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\nexport interface MatterCategoryOptionProps extends MatterTypeState, IAutoCompleteItem {\r\n\r\n}\r\n\r\ninterface MatterTypeStateSelectorState {\r\n isLoading: boolean;\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const MatterTypeStateSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n options: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData(false);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = (refresh: boolean) => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n retrieveMatterTypeStateData(\r\n false, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveMatterTypeState(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveMatterTypeState = (data: MatterTypeStateData) => {\r\n setState({\r\n ...state,\r\n options: data.lookup.matterTypeState.map( (source: MatterTypeState) => ({...source, value: source.state, label: source.state})),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'office');\r\n }\r\n };\r\n\r\n const onOpen = () => {\r\n fetchData(false);\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n onOpen={onOpen}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n onBlur={props.onBlur} \r\n onOpen={onOpen}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveMatterTypeStateData(\r\n refreshData: boolean,\r\n onSuccess: (data: MatterTypeStateData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: MatterTypeStateQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface MatterTypeStateData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n matterTypeState: MatterTypeState[];\r\n}\r\n\r\nexport interface MatterTypeState {\r\n id: number;\r\n state: string;\r\n}\r\n\r\nexport const MatterTypeStateQuery = gql`\r\n query MatterTypeState {\r\n lookup{\r\n matterTypeState{\r\n id,\r\n state\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport gql from 'graphql-tag';\r\nimport { client } from '../..';\r\nimport { FetchPolicy } from 'apollo-client';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\nexport interface RecurringMatterItem extends IAutoCompleteItem, RecurringMatterTemplate {}\r\n\r\ninterface RecurringMatterSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: RecurringMatterItem | RecurringMatterItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface RecurringMatterSelectorState {\r\n isLoading: boolean;\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const RecurringMatterSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n options: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData(false);\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = (refresh: boolean) => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n retrieveRecurringMatterData(\r\n refresh, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveRecurringMatter(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveRecurringMatter = (data: RecurringMatterData) => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n // tslint:disable-next-line: max-line-length\r\n options: data.recurringMatterTemplates.recurringMatterTemplates.map( (source: RecurringMatterTemplate) => ({...source, value: source.recurringMatterId, label: source.name })),\r\n isLoading: false\r\n };\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'status');\r\n }\r\n };\r\n\r\n const onOpen = () => {\r\n fetchData(false);\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveRecurringMatterData(\r\n refreshData: boolean,\r\n onSuccess: (data: RecurringMatterData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: RecurringMatterTemplatesQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface RecurringMatterData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n recurringMatterTemplates: RecurringMatterTemplates;\r\n}\r\n\r\nexport interface RecurringMatterTemplates {\r\n recordCount: number;\r\n recurringMatterTemplates: RecurringMatterTemplate[];\r\n}\r\n\r\nexport interface RecurringMatterTemplate {\r\n name: string;\r\n matterTypeId: string;\r\n recurringMatterId: string;\r\n matterTypeName: string;\r\n state: string;\r\n referrerGuid: string;\r\n referrerId: Number;\r\n referrerName: string;\r\n responsibleGuid: string;\r\n responsibleId: Number;\r\n responsibleName: string;\r\n actingGuid: string;\r\n actingId: Number;\r\n actingName: string;\r\n assistingGuid: string;\r\n assistingId: Number;\r\n assistingName: string;\r\n creditGuid: string;\r\n creditId: Number;\r\n creditName: string;\r\n costsEstimate: Number;\r\n isEstimatedFeesIncludesTax: Boolean;\r\n disbursementsEstimate: Number;\r\n isEstimatedDisbursementsIncludesTax: Boolean;\r\n costAgreementRequired: boolean;\r\n workObtained: string | null;\r\n reportingGroupGuid: string | null;\r\n reportingGroup: string | null;\r\n matterTitle: string | null;\r\n}\r\n\r\nexport const RecurringMatterTemplatesQuery = gql`\r\n query recurringMatterTemplates {\r\n recurringMatterTemplates {\r\n recordCount\r\n recurringMatterTemplates {\r\n name\r\n matterTypeId\r\n matterTypeName\r\n recurringMatterId\r\n state\r\n referrerGuid\r\n referrerId\r\n referrerName\r\n responsibleGuid\r\n responsibleId\r\n responsibleName\r\n actingGuid\r\n actingId\r\n actingName\r\n assistingGuid\r\n assistingId\r\n assistingName\r\n creditGuid\r\n creditId\r\n creditName\r\n costsEstimate\r\n isEstimatedFeesIncludesTax\r\n disbursementsEstimate\r\n isEstimatedDisbursementsIncludesTax\r\n costAgreementRequired\r\n workObtained\r\n \treportingGroupGuid\r\n \treportingGroup\r\n matterTitle\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport gql from 'graphql-tag';\r\nimport { useQuery } from 'react-apollo';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n }),\r\n);\r\n\r\ninterface ReportingGroupSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface ReportingGroupSelectorState {\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const ReportingGroupSelector: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n options: [],\r\n });\r\n\r\n const reportingGroupQuery = useQuery(REPORTING_GROUP_QUERY, { fetchPolicy: 'cache-first' });\r\n\r\n React.useEffect(() => {\r\n if (\r\n !reportingGroupQuery.loading &&\r\n !reportingGroupQuery.error &&\r\n reportingGroupQuery.data &&\r\n reportingGroupQuery.data.firm &&\r\n reportingGroupQuery.data.firm.reportingGroups &&\r\n reportingGroupQuery.data.firm.reportingGroups.reportingGroup.length > 0\r\n ) {\r\n setState((prevState) => {\r\n\r\n const { reportingGroup } = reportingGroupQuery.data!.firm.reportingGroups;\r\n return {\r\n ...prevState,\r\n options: reportingGroup.map((group: ReportingGroup) => {\r\n return { label: group.description, value: group.reportingGroupSourceId };\r\n })\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [reportingGroupQuery.data, reportingGroupQuery.loading, reportingGroupQuery.error]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'areaOfLaw');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n return (\r\n
\r\n {props.multiple ? (\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onBlur={props.onBlur}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n ) : (\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onBlur={props.onBlur}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport interface ReportingGroupData {\r\n firm: Firm;\r\n}\r\n\r\nexport interface Firm {\r\n reportingGroups: ReportingGroups;\r\n}\r\n\r\nexport interface ReportingGroups {\r\n recordCount: number;\r\n reportingGroup: ReportingGroup[];\r\n}\r\n\r\nexport interface ReportingGroup {\r\n id: number;\r\n description: string;\r\n guidId: string;\r\n reportingGroupSourceId: string;\r\n}\r\n\r\nconst REPORTING_GROUP_QUERY = gql`\r\n query reportingGroupQuery {\r\n firm {\r\n reportingGroups {\r\n recordCount\r\n reportingGroup {\r\n id\r\n description\r\n guidId\r\n reportingGroupSourceId\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n","import { BaseTextFieldProps } from '@material-ui/core';\r\nimport gql from 'graphql-tag';\r\nimport React from 'react';\r\nimport { useQuery } from 'react-apollo';\r\nimport TreeSelect, { TreeSelectNode } from '../../components/TreeSelect';\r\n\r\ninterface MatterTreeTypeSelectorProps extends Omit {\r\n state: string;\r\n onSelection: (value: TreeSelectNode | null, name: string) => void;\r\n value?: TreeSelectNode | null;\r\n}\r\n\r\nexport const MatterTreeTypeSelector: React.FC = (props) => {\r\n // const [value, setValue] = useState(null);\r\n\r\n const matterTypeQuery = useMatterTypeTree();\r\n\r\n const matterTypeData = !matterTypeQuery.loading ? JSON.parse(matterTypeQuery.data!.lookup.matterTypeTreeJson) : [];\r\n\r\n const convertChildrenToLowerCase = (opt: MatterTypeTreeJsonData[]): TreeSelectNode[] => {\r\n const convertedOptions: TreeSelectNode[] = [];\r\n\r\n for (let i = 0; i < opt.length; i++) {\r\n const { Children, Description, ItemId, ...rest } = opt[i];\r\n\r\n const convertedOption: TreeSelectNode = {\r\n ...rest,\r\n Description: Description,\r\n ItemId: ItemId,\r\n label: Description,\r\n value: ItemId,\r\n };\r\n\r\n if (Children) {\r\n convertedOption.children = convertChildrenToLowerCase(Children);\r\n }\r\n\r\n convertedOptions.push(convertedOption);\r\n }\r\n\r\n return convertedOptions;\r\n };\r\n\r\n // filterObjectsByState filter the result that match in the states in multidimensional array base on the children and return it in the same format including the parent\r\n const filterObjectsByState = (data: MatterTypeTreeJsonData[], searchString: string): MatterTypeTreeJsonData[] => {\r\n if (searchString.length === 0) {\r\n return data;\r\n }\r\n return data.reduce((result, item) => {\r\n const filteredChildren = item.Children ? filterObjectsByState(item.Children, searchString.toLowerCase()) : [];\r\n if (item.State?.toLowerCase() === searchString.toLowerCase() || item.State?.toLowerCase() === 'all' || filteredChildren.length) {\r\n result.push({ ...item, Children: filteredChildren });\r\n }\r\n return result;\r\n }, []);\r\n };\r\n\r\n const optionsFilterByState = filterObjectsByState(matterTypeData, props.state);\r\n\r\n const options = convertChildrenToLowerCase(optionsFilterByState);\r\n\r\n const onSelection = (newValue: TreeSelectNode | null) => {\r\n // console.log('MatterTreeTypeSelector', newValue);\r\n // console.log(newValue);\r\n // setValue(newValue);\r\n if (props.onSelection) {\r\n props.onSelection(newValue, props.name ?? 'matterTypeTree');\r\n }\r\n };\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport interface MatterTypeTreeJsonData {\r\n IsFolder: boolean;\r\n ParentId: string;\r\n State?: string;\r\n Description: string;\r\n ItemId: string;\r\n Children?: MatterTypeTreeJsonData[];\r\n}\r\n\r\nexport interface MatterTypeTreeData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n matterTypeTreeJson: string;\r\n}\r\n\r\nexport const useMatterTypeTree = () => {\r\n const { data, error, loading } = useQuery(MatterTypeTreeQuery, {\r\n fetchPolicy: 'cache-first',\r\n });\r\n\r\n return {\r\n data,\r\n error,\r\n loading,\r\n };\r\n};\r\n\r\nexport const MatterTypeTreeQuery = gql`\r\n query MatterTypeTree {\r\n lookup {\r\n matterTypeTreeJson\r\n }\r\n }\r\n`;\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { useRiskLevel } from '../../hooks/useRiskLevel';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n }),\r\n);\r\n\r\ninterface RiskLevelSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\n// interface RiskLevelSelectorState {\r\n// options: IAutoCompleteItem[];\r\n// }\r\n\r\nexport const RiskLevelSelector: React.FC = (props) => {\r\n const classes = useStyles();\r\n\r\n // const [state, setState] = useState({\r\n // options: [],\r\n // });\r\n\r\n const riskLevelQuery = useRiskLevel('cache-first');\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'riskLevel');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return {\r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ),\r\n };\r\n };\r\n\r\n const options: IAutoCompleteItem[] = riskLevelQuery.data\r\n ? riskLevelQuery.data.lookup.riskLevel.map((risk) => {\r\n return {\r\n ...risk,\r\n value: risk.guidId,\r\n label: risk.description,\r\n };\r\n })\r\n : [];\r\n\r\n return (\r\n
\r\n {props.multiple ? (\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onBlur={props.onBlur}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n ) : (\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onBlur={props.onBlur}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={(params) => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n\r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )}\r\n
\r\n );\r\n};\r\n","import React, { useState } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\n// import { name, random } from 'faker';\r\nimport PersonIcon from '@material-ui/icons/Person';\r\nimport PersonOutlinedIcon from '@material-ui/icons/PersonOutlined';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport { RenderInputParams } from '@material-ui/lab';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { client } from '../..';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { showNotification } from '../../App';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport gql from 'graphql-tag';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\nimport clsx from 'clsx';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%',\r\n },\r\n textField: {\r\n width: '100%',\r\n },\r\n iconSelected: {\r\n width: 17,\r\n height: 17,\r\n marginRight: 5,\r\n marginLeft: -2,\r\n },\r\n color: {\r\n width: 14,\r\n height: 14,\r\n flexShrink: 0,\r\n borderRadius: 3,\r\n marginRight: 8,\r\n marginTop: 2,\r\n },\r\n text: {\r\n flexGrow: 1,\r\n },\r\n close: {\r\n opacity: 0.6,\r\n width: 18,\r\n height: 18,\r\n },\r\n renderWrapper: {\r\n padding: '15px 0'\r\n },\r\n customRenderWrapper: {\r\n display: 'flex',\r\n margin: '0 -10px',\r\n width: '100%',\r\n '& > div': {\r\n padding: '0 10px',\r\n fontFamily: 'Roboto, Helvetica, Arial, sans-serif',\r\n fontWeight: 400,\r\n },\r\n '& .icon-wrapper': {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n '& .other': {\r\n flex: 1,\r\n display: 'flex',\r\n flexFlow: 'column',\r\n '& .primary': {\r\n fontSize: '1rem',\r\n lineHeight: 1.5,\r\n letterSpacing: '0.00938em',\r\n },\r\n '& .secondary': {\r\n color: 'rgba(0, 0, 0, 0.54)',\r\n fontSize: '0.875rem',\r\n lineHeight: 1.43,\r\n letterSpacing: '0.01071em',\r\n }\r\n }\r\n }\r\n })\r\n);\r\n\r\ninterface StaffSelectorProps {\r\n multiple?: boolean;\r\n label?: string;\r\n name: string;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n id?: string;\r\n includeStaff?: boolean;\r\n includeIndividual?: boolean;\r\n includeOrganisation?: boolean;\r\n disabled?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n disablePortal?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n error?: boolean;\r\n helperText?: string;\r\n required?: boolean;\r\n className?: string;\r\n}\r\n\r\ninterface StaffSelectorState {\r\n hasNextPage: boolean;\r\n isNextPageLoading: boolean;\r\n offset: number;\r\n filter: string;\r\n // tslint:disable-next-line: no-any\r\n items: any;\r\n}\r\n\r\nexport const StaffSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n const loadBlockLimit = 200;\r\n \r\n const [state, setState] = useState({\r\n hasNextPage: true,\r\n isNextPageLoading: false,\r\n offset: 0,\r\n filter: '',\r\n items: [],\r\n });\r\n\r\n const [delayedonInputChange] = useDebouncedCallback(\r\n // function\r\n (event: React.ChangeEvent<{}>, value: string, reason: 'input' | 'reset' | 'clear') => {\r\n\r\n let isClear = false;\r\n let offset = 0;\r\n let filter = '';\r\n\r\n if (reason === 'input') {\r\n \r\n filter = value;\r\n isClear = true;\r\n\r\n fetchData(filter, offset, isClear);\r\n }\r\n },\r\n // delay in ms\r\n 500\r\n );\r\n \r\n const fetchData = (filter: string, offset: number, isClear: boolean) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: true,\r\n };\r\n });\r\n\r\n const staffQueryParams: StaffQueryParams = {\r\n filter: filter,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n };\r\n\r\n retrieveStaffListData(\r\n staffQueryParams,\r\n false, // this.state.isRefresh, -- Since we are updating and creating, we do not fetch cached data\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveNameSummary(data, filter, offset, isClear),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n };\r\n });\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveNameSummary = (data: StaffListData, filter: string, offset: number, isClear: boolean) => {\r\n\r\n const staffSummaryData = data.party.staffSummaries.staffSummary;\r\n const recordCount = data.party.staffSummaries.recordCount;\r\n\r\n // tslint:disable-next-line: no-any\r\n let itemsList: any = [];\r\n\r\n let items = state.items;\r\n\r\n if (!isClear) {\r\n itemsList = [...state.items];\r\n } else {\r\n items = [];\r\n }\r\n\r\n if (items && items.length === 0) {\r\n \r\n itemsList = staffSummaryData.map( (source: StaffSummary) => ({\r\n ...source,\r\n value: source.staffGuid, \r\n label: source.name \r\n }));\r\n\r\n } else {\r\n for (const staff of staffSummaryData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = items.filter((item: any) => item.value === staff.staffGuid).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n ...staff,\r\n label: staff.name,\r\n value: staff.staffGuid\r\n });\r\n }\r\n }\r\n }\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n filter: filter,\r\n isNextPageLoading: false,\r\n items: itemsList,\r\n offset: offset + loadBlockLimit,\r\n hasNextPage: staffSummaryData.length !== 0 && (offset + loadBlockLimit) < recordCount,\r\n };\r\n });\r\n\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const loadNextPage = (...args: any) => {\r\n \r\n if (state.hasNextPage && !state.isNextPageLoading) {\r\n fetchData(state.filter, state.offset, false);\r\n }\r\n };\r\n\r\n const onClose = (event: React.ChangeEvent<{}>) => {\r\n\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n isNextPageLoading: false,\r\n hasNextPage: true,\r\n filter: '',\r\n offset: 0,\r\n items: []\r\n };\r\n });\r\n };\r\n\r\n const onOpen = (event: React.ChangeEvent<{}>) => {\r\n fetchData(state.filter, 0, true);\r\n };\r\n\r\n const onSelection = (selection: IAutoCompleteItem, name: string) => {\r\n\r\n if (props.onSelection) {\r\n props.onSelection(selection, name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n option.label}\r\n getOptionSelected={(option, value) => value.value === option.value}\r\n onInputChange={delayedonInputChange}\r\n onBlur={props.onBlur}\r\n renderOption={(option, { selected }) => {\r\n return (\r\n
\r\n
\r\n {option.isStaff ? : }\r\n
\r\n
\r\n
{option.label}
\r\n
{option.email}
\r\n
\r\n
\r\n );\r\n }}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveStaffListData(\r\n query: StaffQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: StaffListData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: StaffQuery,\r\n variables: {\r\n filter: query.filter,\r\n first: query.first, \r\n offset: query.offset\r\n },\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface StaffQueryParams {\r\n offset?: number; \r\n first?: number;\r\n filter?: string;\r\n}\r\n\r\nexport interface StaffListData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n party: Party;\r\n}\r\n\r\nexport interface Party {\r\n staffSummaries: StaffSummaries; \r\n}\r\n\r\nexport interface StaffSummaries {\r\n recordCount: number;\r\n staffSummary: StaffSummary[];\r\n}\r\n\r\nexport interface StaffSummary {\r\n staffGuid: string;\r\n staffId: number;\r\n name: string;\r\n emailAddress: string;\r\n}\r\n\r\nconst StaffQuery = gql`\r\n query staffQuery($offset: Int, $first: Int, $filter: String){\r\n party{\r\n staffSummaries(offset:$offset, first:$first, filter:$filter){\r\n recordCount,\r\n staffSummary{\r\n staffGuid,\r\n staffId,\r\n name,\r\n emailAddress\r\n }\r\n }\r\n }\r\n }\r\n`;","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useEffect } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { showNotification } from '../../App';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { client } from '../..';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport gql from 'graphql-tag';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n width: '100%'\r\n },\r\n })\r\n);\r\n\r\ninterface SourceSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n label: string;\r\n name: string;\r\n disablePortal?: boolean;\r\n disableCloseOnSelect?: boolean;\r\n onBlur?: React.FocusEventHandler;\r\n}\r\n\r\ninterface SourceSelectorState {\r\n isLoading: boolean;\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const SourceSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n options: [],\r\n });\r\n\r\n useEffect(() => { \r\n fetchData();\r\n // tslint:disable-next-line: align\r\n }, []);\r\n\r\n const fetchData = () => {\r\n\r\n setState({\r\n ...state,\r\n isLoading: true\r\n });\r\n\r\n retrieveEnquirySourceData(\r\n false,\r\n // tslint:disable-next-line: no-console\r\n (data) => onRetrieveSource(data),\r\n // tslint:disable-next-line:no-any\r\n function (reason: any): void {\r\n showNotification(null, reason, 'error');\r\n }\r\n );\r\n };\r\n\r\n const onRetrieveSource = (data: EnquirySourceData) => {\r\n setState({\r\n ...state,\r\n options: data.enquiry.sources.map( (source: Source) => (\r\n {\r\n value: source.guidId, \r\n label: source.description,\r\n secondaryValue: source.isReferrer\r\n })),\r\n isLoading: false\r\n });\r\n };\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name);\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n getOptionSelected={(option, value) => value.value === option.value} \r\n onBlur={props.onBlur} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport function retrieveEnquirySourceData(\r\n refreshData: boolean,\r\n onSuccess: (data: EnquirySourceData) => void,\r\n // tslint:disable-next-line:no-any\r\n onError: (reason: any) => void\r\n): void {\r\n var fetchPolicy: FetchPolicy = refreshData === true ? 'network-only' : 'cache-first';\r\n client\r\n .query({\r\n query: EnquirySourceDataQuery,\r\n variables: {},\r\n fetchPolicy: fetchPolicy,\r\n })\r\n // tslint:disable-next-line:no-any\r\n .then((results: { data: any }) => {\r\n onSuccess(results.data);\r\n })\r\n // tslint:disable-next-line:no-any\r\n .catch((reason: any) => {\r\n onError(reason);\r\n });\r\n}\r\n\r\nexport interface EnquirySourceData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n enquiry: Enquiry;\r\n}\r\nexport interface Enquiry {\r\n sources: Source[];\r\n}\r\n\r\nexport interface Source {\r\n guidId: string;\r\n description: string;\r\n isReferrer: boolean;\r\n}\r\n\r\nconst EnquirySourceDataQuery = gql`\r\n query enquirySource {\r\n enquiry{\r\n sources{\r\n guidId,\r\n description,\r\n isReferrer\r\n }\r\n }\r\n }\r\n`;","import React, { useState, useMemo, useEffect } from 'react';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Autocomplete from '@material-ui/lab/Autocomplete';\r\nimport LocationOnIcon from '@material-ui/icons/LocationOn';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport throttle from 'lodash/throttle';\r\n\r\nconst autocompleteService = { current: null };\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n icon: {\r\n color: theme.palette.text.secondary,\r\n marginRight: theme.spacing(2),\r\n },\r\n}));\r\n\r\nexport interface PlaceType {\r\n description: string;\r\n place_id: string;\r\n structured_formatting: {\r\n main_text: string;\r\n secondary_text: string;\r\n main_text_matched_substrings: [\r\n {\r\n offset: number;\r\n length: number;\r\n },\r\n ];\r\n };\r\n}\r\ninterface GeocoderAddressComponent {\r\n long_name: string;\r\n short_name: string;\r\n types: string[];\r\n}\r\n\r\nexport interface Address {\r\n premise: string;\r\n subPremise: string;\r\n floor: string;\r\n streetNumber: string;\r\n route: string;\r\n locality: string; // town\r\n sublocality: string;\r\n administrativeAreaLevel1: string; // state\r\n administrativeAreaLevel2: string;\r\n administrativeAreaLevel3: string;\r\n country: string;\r\n postalCode: string;\r\n}\r\n\r\ninterface AddressSelectorProps { \r\n label?: string;\r\n required?: boolean;\r\n helperText?: string;\r\n error?: boolean;\r\n className?: string;\r\n placeTypes?: string[]; // ['geocode' | 'address' | 'establishment' | '(regions)' | '(cities)'];\r\n name?: string;\r\n freeSolo?: boolean;\r\n homeCountry?: string;\r\n onSelection?: (\r\n placeType: PlaceType | null,\r\n address: Address,\r\n name: string\r\n ) => void;\r\n onInputChanged?: (value: string) => void;\r\n // tslint:disable-next-line: no-any\r\n value?: any;\r\n disabled?: boolean;\r\n}\r\n\r\ninterface AddressSelectorState extends Address {\r\n error?: boolean;\r\n}\r\n\r\nexport const AddressSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n const [value, setValue] = useState(null);\r\n const [inputValue, setInputValue] = useState('');\r\n const [options, setOptions] = useState([]);\r\n // const loaded = useRef(false);\r\n\r\n const [state, setState] = useState({\r\n error: props.error,\r\n premise: '',\r\n subPremise: '',\r\n floor: '',\r\n streetNumber: '',\r\n route: '',\r\n locality: '', // tow,\r\n sublocality: '',\r\n administrativeAreaLevel1: '', // stat,\r\n administrativeAreaLevel2: '',\r\n administrativeAreaLevel3: '',\r\n country: '',\r\n postalCode: '', \r\n });\r\n\r\n const fetch = useMemo(\r\n () =>\r\n throttle((request: { input: string }, callback: (results?: PlaceType[]) => void) => {\r\n const tempRequest = {\r\n ...request,\r\n types: props.placeTypes,\r\n componentRestrictions: {country: props.homeCountry ? props.homeCountry : 'au'}\r\n };\r\n // tslint:disable-next-line: no-any\r\n (autocompleteService.current as any).getPlacePredictions(tempRequest, callback);\r\n // tslint:disable-next-line: align\r\n }, 200),\r\n [],\r\n );\r\n\r\n useEffect(() => {\r\n setState((prevState) => {\r\n return {\r\n ...prevState,\r\n error: props.error\r\n };\r\n });\r\n // tslint:disable-next-line: align\r\n }, [props.error]);\r\n\r\n useEffect(() => {\r\n setValue(props.value);\r\n // tslint:disable-next-line: align\r\n }, [props.value]);\r\n\r\n useEffect(() => {\r\n let active = true;\r\n\r\n // tslint:disable-next-line: no-any\r\n if (!autocompleteService.current && (window as any).google) {\r\n // tslint:disable-next-line: no-any\r\n autocompleteService.current = new (window as any).google.maps.places.AutocompleteService();\r\n }\r\n if (!autocompleteService.current) {\r\n return undefined;\r\n }\r\n\r\n if (inputValue === '') {\r\n setOptions(value ? [value] : []);\r\n return undefined;\r\n }\r\n\r\n fetch({ input: inputValue }, (results?: PlaceType[]) => {\r\n if (active) {\r\n let newOptions = [] as PlaceType[];\r\n\r\n if (value) {\r\n newOptions = [value];\r\n }\r\n\r\n if (results) {\r\n newOptions = [...newOptions, ...results];\r\n }\r\n\r\n setOptions(newOptions);\r\n }\r\n });\r\n\r\n return () => {\r\n active = false;\r\n };\r\n // tslint:disable-next-line: align\r\n }, [value, inputValue, fetch]);\r\n\r\n const onSuggestionSelected = (suggestion: PlaceType) => {\r\n // const selection: Address = new Address( );\r\n\r\n // Fetch the placeId from the suggession and auto complete suggession,\r\n // and make a request again using the place Id to fetch the complete address details\r\n const placeId = suggestion.place_id ? suggestion.place_id : '';\r\n\r\n const request: google.maps.places.PlaceDetailsRequest = {\r\n fields: ['address_components'], // 'name', 'formatted_address', 'place_id', 'geometry', \r\n placeId \r\n };\r\n\r\n const googleMapElement = document.getElementById('googleMap') as HTMLInputElement;\r\n const map = new google.maps.Map(googleMapElement);\r\n const service = new google.maps.places.PlacesService(map);\r\n \r\n // tslint:disable-next-line\r\n service.getDetails(request, (results: any, status: any) => {\r\n if (status === google.maps.places.PlacesServiceStatus.OK) {\r\n \r\n const selection: Address = {\r\n premise: '',\r\n subPremise: '',\r\n floor: '',\r\n streetNumber: '',\r\n route: '',\r\n locality: '', // tow,\r\n sublocality: '',\r\n administrativeAreaLevel1: '', // state,\r\n administrativeAreaLevel2: '',\r\n administrativeAreaLevel3: '',\r\n country: '',\r\n postalCode: '',\r\n };\r\n\r\n if (results.address_components !== undefined) {\r\n\r\n // console.log('address_components', results.address_components);\r\n // If name === street2 then set value to street 2 and ignore street 1\r\n // tslint:disable-next-line:prefer-for-of\r\n for (let index = 0; index < results.address_components.length; index++) {\r\n \r\n const element: GeocoderAddressComponent = results.address_components[index];\r\n\r\n if (element.types.includes('premise')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('subpremise', element.short_name); \r\n selection.premise = selection.premise ? selection.premise : element.short_name; \r\n }\r\n\r\n if (element.types.includes('subpremise')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('subpremise', element.short_name); \r\n selection.subPremise = selection.subPremise ? selection.subPremise : element.short_name; \r\n }\r\n\r\n if (element.types.includes('floor')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('floor', element.short_name);\r\n selection.floor = selection.floor ? selection.floor : element.short_name; \r\n }\r\n\r\n if (element.types.includes('street_number')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('street_number', element.short_name); \r\n selection.streetNumber = selection.streetNumber ? selection.streetNumber : element.short_name; \r\n }\r\n\r\n if (element.types.includes('route')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('route', element.long_name); \r\n selection.route = selection.route ? selection.route : element.long_name; \r\n }\r\n\r\n if (element.types.includes('locality') || element.types.includes('postal_town')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('locality', element.short_name);\r\n selection.locality = selection.locality ? selection.locality : element.short_name; \r\n }\r\n\r\n // This is specific to UK.\r\n if (element.types.includes('postal_town')) {\r\n selection.locality = selection.locality ? selection.locality : element.short_name; \r\n }\r\n\r\n if (element.types.includes('sublocality')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('sublocality', element.short_name);\r\n selection.sublocality = selection.sublocality ? selection.sublocality : element.short_name; \r\n }\r\n\r\n if (element.types.includes('administrative_area_level_1')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('administrative_area_level_1', element.short_name);\r\n // tslint:disable-next-line: max-line-length\r\n selection.administrativeAreaLevel1 = selection.administrativeAreaLevel1 ? selection.administrativeAreaLevel1 : element.short_name; \r\n }\r\n\r\n if (element.types.includes('administrative_area_level_2')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('administrative_area_level_2', element.short_name);\r\n // tslint:disable-next-line: max-line-length\r\n selection.administrativeAreaLevel2 = selection.administrativeAreaLevel2 ? selection.administrativeAreaLevel2 : element.short_name; \r\n }\r\n\r\n if (element.types.includes('administrative_area_level_3')) {\r\n // tslint:disable-next-line: no-console\r\n // console.log('administrative_area_level_3', element.short_name);\r\n // tslint:disable-next-line: max-line-length\r\n selection.administrativeAreaLevel3 = selection.administrativeAreaLevel3 ? selection.administrativeAreaLevel3 : element.short_name; \r\n }\r\n\r\n if (element.types.includes('country')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('country', element.long_name);\r\n selection.country = selection.country ? selection.country : element.long_name; \r\n }\r\n\r\n if (element.types.includes('postal_code')) {\r\n // tslint:disable-next-line: no-console\r\n console.log('postal_code', element.long_name);\r\n selection.postalCode = selection.postalCode ? selection.postalCode : element.long_name; \r\n } \r\n }\r\n\r\n // tslint:disable-next-line: no-console\r\n if (props.onSelection) {\r\n props.onSelection(suggestion, selection, props.name ? props.name : 'address');\r\n }\r\n } \r\n }\r\n }); \r\n };\r\n\r\n return (\r\n (typeof option === 'string' ? option : option.structured_formatting.main_text)}\r\n filterOptions={(x) => x}\r\n options={options}\r\n includeInputInList={true}\r\n filterSelectedOptions={true}\r\n value={value}\r\n autoComplete={false}\r\n disabled={props.disabled}\r\n onChange={(event: React.ChangeEvent<{}>, newValue: PlaceType | null) => {\r\n\r\n if (newValue != null) {\r\n onSuggestionSelected(newValue);\r\n }\r\n // TODO: Else ?\r\n\r\n setOptions(newValue ? [newValue, ...options] : options);\r\n setValue(newValue);\r\n\r\n }}\r\n onInputChange={(event, newInputValue) => {\r\n\r\n if (props.onInputChanged) {\r\n props.onInputChanged(newInputValue);\r\n }\r\n setInputValue(newInputValue);\r\n }}\r\n renderInput={(params) => (\r\n \r\n )}\r\n renderOption={(option) => {\r\n let parts;\r\n\r\n if (option && option.structured_formatting) {\r\n const matches = option.structured_formatting.main_text_matched_substrings;\r\n parts = parse(\r\n option.structured_formatting.main_text,\r\n // tslint:disable-next-line: no-any\r\n matches.map((match: any) => [match.offset, match.offset + match.length]),\r\n );\r\n } \r\n\r\n return (\r\n parts && (\r\n \r\n \r\n \r\n \r\n \r\n {parts && (\r\n parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))\r\n )}\r\n \r\n {option && option.structured_formatting && option.structured_formatting.secondary_text &&\r\n option.structured_formatting.secondary_text\r\n }\r\n \r\n \r\n \r\n ) \r\n );\r\n }}\r\n />\r\n );\r\n};","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, { useState, useMemo } from 'react';\r\nimport { makeStyles, Theme, createStyles } from '@material-ui/core/styles';\r\nimport { Autocomplete, RenderInputParams } from '@material-ui/lab';\r\nimport { TextField, CircularProgress } from '@material-ui/core';\r\nimport match from 'autosuggest-highlight/match';\r\nimport parse from 'autosuggest-highlight/parse';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport gql from 'graphql-tag';\r\nimport { useQuery } from 'react-apollo';\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n createStyles({\r\n root: {\r\n minWidth: '200px',\r\n },\r\n })\r\n);\r\n\r\ninterface TitleAutocompleteSelectorProps {\r\n disabled?: boolean;\r\n required?: boolean;\r\n multiple?: boolean;\r\n // tslint:disable-next-line: no-any\r\n value?: IAutoCompleteItem | any; // value only available in single select\r\n error?: boolean;\r\n onSelection?: (value: IAutoCompleteItem | IAutoCompleteItem[], name: string) => void;\r\n className?: string;\r\n helperText?: string;\r\n name?: string;\r\n label?: string;\r\n disablePortal?: boolean;\r\n}\r\n\r\ninterface TitleAutocompleteSelectorState {\r\n isLoading: boolean;\r\n error?: boolean;\r\n options: IAutoCompleteItem[];\r\n}\r\n\r\nexport const TitleAutocompleteSelector: React.FC = props => {\r\n\r\n const classes = useStyles();\r\n\r\n const [state, setState] = useState({\r\n isLoading: false,\r\n error: props.error,\r\n options: [],\r\n });\r\n\r\n const partyTitleQuery = useQuery(PartyTitleLookupQuery, {\r\n fetchPolicy: 'cache-first',\r\n });\r\n\r\n useMemo(() => {\r\n if (partyTitleQuery.data && partyTitleQuery.data.lookup && partyTitleQuery.data.lookup.partyTitle && !partyTitleQuery.loading) {\r\n \r\n const titles = partyTitleQuery.data.lookup.partyTitle.map((title: PartyTitle) => {\r\n return {\r\n label: title.description,\r\n value: title.description,\r\n };\r\n });\r\n \r\n setState((prevState) => {\r\n\r\n return {\r\n ...prevState,\r\n options: titles\r\n };\r\n });\r\n }\r\n // tslint:disable-next-line: align\r\n }, [partyTitleQuery.data, partyTitleQuery.loading, partyTitleQuery.error]);\r\n\r\n // tslint:disable-next-line: no-any\r\n const handleChange = (event: React.ChangeEvent<{}>, value: any) => {\r\n // tslint:disable-next-line: no-console\r\n console.log('onChange', value);\r\n if (props.onSelection) {\r\n props.onSelection(value, props.name ? props.name : 'status');\r\n }\r\n };\r\n\r\n const getInputProps = (params: RenderInputParams, isLoading?: boolean) => {\r\n return ({ \r\n ...params.InputProps,\r\n endAdornment: (\r\n \r\n {isLoading ? : null}\r\n {params.InputProps.endAdornment}\r\n \r\n ), \r\n });\r\n };\r\n\r\n return (\r\n
\r\n { props.multiple ? \r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n :\r\n (\r\n option.label} \r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderInput={params => (\r\n \r\n )}\r\n // tslint:disable-next-line: jsx-no-lambda\r\n renderOption={(option, { inputValue }) => {\r\n const matches = match(option.label, inputValue);\r\n const parts = parse(option.label, matches);\r\n \r\n return (\r\n
\r\n {parts.map((part, index) => (\r\n \r\n {part.text}\r\n \r\n ))}\r\n
\r\n );\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport interface PartyTitleLookupData {\r\n lookup: Lookup;\r\n}\r\n\r\nexport interface Lookup {\r\n partyTitle: PartyTitle[];\r\n}\r\n\r\nexport interface PartyTitle {\r\n id: number;\r\n description: string;\r\n}\r\n\r\nexport const PartyTitleLookupQuery = gql`\r\n query PartyTitleLookup {\r\n lookup{\r\n partyTitle{\r\n id,\r\n description\r\n }\r\n }\r\n }\r\n`;"],"sourceRoot":""}