{"version":3,"sources":["nameSummary/NameSummaryRepository.tsx","registerServiceWorker.ts","notesSummary/selectors/EventsAndCampaignSelector.tsx"],"names":["NameEntityName","retrieveNameSummaryData","query","refreshData","onSuccess","onError","fetchPolicy","NameData","variables","offset","first","filter","isClientsOnly","includeStaff","includeIndividual","includeOrganisation","tagsList","cityList","importanceList","stateList","countryList","businessTypeList","relationshipManagerList","includePmsContacts","includeNonPmsContacts","then","results","data","catch","reason","NameSummaryOptions","UpdateNameSubscription","CreateCrmPartyMutation","UpdateCrmPartyMutation","DeleteCrmPartyMutation","CreateNameCrmNotificationSubscription","UpdateNameCrmNotificationSubscription","DeleteNameCrmNotificationSubscription","NameCrmQuery","retrieveNameCrmData","nameGuid","PartyAddressesQuery","PartyTagsProcessCompletesSubscription","Boolean","window","location","hostname","match","unregister","navigator","serviceWorker","ready","registration","useStyles","theme","root","width","textField","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","EventsAndCampaignSelector","props","classes","hasNextPage","isNextPageLoading","items","state","setState","delayedonInputChange","event","value","fetchData","isClear","prevState","eventAndCapaignQueryParams","isIncludeCompleted","isCompleted","onDataRetrieved","eventAndCampaignData","eventAndCampaign","summaryList","eventAndCampaignSummaries","recordCount","itemsList","length","map","source","guid","label","name","item","push","getInputProps","params","isLoading","InputProps","endAdornment","Fragment","size","className","id","itemSize","loading","disablePortal","isMultiple","multiple","loadNextPage","disableListWrap","onSelection","selection","onClose","onOpen","getOptionLabel","option","getOptionSelected","onInputChange","style","onBlur","renderInput","variant","required","fullWidth","error","helperText"],"mappings":"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","file":"static/js/main~2185abbe.b2de87ce.chunk.js","sourcesContent":["import gql from 'graphql-tag';\r\nimport { FetchPolicy } from 'apollo-client';\r\nimport { client } from '..';\r\nimport { AppUser } from '../matterSummary/MatterSummaryRepository';\r\nimport { ColumnConfigList } from '../viewConfig/SummaryViewConfigurations';\r\n\r\nexport interface NameSummaryQueryParams {\r\n offset: number; \r\n first: number;\r\n filter?: string; \r\n isClientsOnly: boolean;\r\n includeStaff: boolean | null;\r\n includeIndividual: boolean | null;\r\n includeOrganisation: boolean | null;\r\n tagsList: string | null;\r\n cityList: string | null;\r\n importanceList: string | null; \r\n stateList: string | null; \r\n countryList: string | null; \r\n businessTypeList: string | null;\r\n relationshipManagerList: string | null;\r\n includePmsContacts: boolean | null;\r\n includeNonPmsContacts: boolean | null;\r\n}\r\n\r\nexport interface NameSummaryData {\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 nameSummaryActualCount: NameSummaryActualCount;\r\n nameSummary: NameSummary[];\r\n}\r\n\r\nexport interface NameSummaryActualCount {\r\n actualRowCountForSearch: number;\r\n}\r\n\r\nexport interface NameSummary {\r\n image: string | null;\r\n guidID: string;\r\n nameId: number;\r\n name: string | null;\r\n title: string | null;\r\n relatedName: string | null;\r\n emailAddress: string | null;\r\n mobile: string | null;\r\n phone: string | null;\r\n position: string | null;\r\n city: string | null;\r\n state: string | null;\r\n country: string | null;\r\n address: string | null;\r\n entityType: number;\r\n relationshipManager: string | null;\r\n relationshipQualityDescription: string | null;\r\n relationshipQualityLevel: string | null;\r\n referrerType: string | null;\r\n referrerSource: string | null;\r\n lastContactDate: Date | null;\r\n lastReferralDate: Date | null;\r\n notes: string | null;\r\n isClient: boolean | null;\r\n isOrganisation: boolean | null;\r\n isIndividual: boolean | null;\r\n isStaff: boolean | null;\r\n isReferrer: boolean | null;\r\n isUser: boolean | null;\r\n currentMatters: number | null;\r\n lastMatterDate: Date | null;\r\n estimatedFees: number | null;\r\n billedFees: number | null;\r\n trustBalance: number | null;\r\n billedDisbursements: number | null;\r\n unbilledFees: number | null;\r\n unbilledDisbursements: number | null;\r\n completedMatters: number | null;\r\n newMattersInTheLast12Months: number | null;\r\n firstMatterDate: Date | null;\r\n totalBilledFees: number | null;\r\n percentageEstimate: number | null;\r\n exposure: number | null;\r\n hasMarketingConsent: boolean;\r\n tags: string | null;\r\n enquiriesReferredInTheLast12Months: number | null;\r\n enquiriesReferredInTotal: number | null;\r\n lastEnquiryDate: Date | null;\r\n businessType: string | null;\r\n isFromDataSource: boolean | null;\r\n isEntered: boolean | null;\r\n partyRelationshipManager: string | null;\r\n partyRelationshipQualityDescription: string | null;\r\n partyRelationshipQualityLevel: string | null;\r\n}\r\n\r\nexport interface NameOptionsData {\r\n loading?: boolean;\r\n networkStatus?: number;\r\n appUser: AppUser;\r\n columnConfigList: ColumnConfigList;\r\n}\r\n\r\nexport enum NameEntityName {\r\n IndividualContactForOrganisation = 1,\r\n OrganisationClient = 2,\r\n OrganisationContact = 3,\r\n IndividualContact = 4,\r\n IndividualClient = 5\r\n}\r\n\r\nexport function retrieveNameSummaryData(query: NameSummaryQueryParams, \r\n refreshData: boolean,\r\n // isSearch: boolean,\r\n onSuccess: (data: NameSummaryData) => 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\r\n // tslint:disable-next-line: no-console\r\n // console.log('isSearch', isSearch);\r\n\r\n // if (isSearch) {\r\n client.query({\r\n query: NameData,\r\n variables: {\r\n offset: query.offset,\r\n first: query.first,\r\n filter: query.filter,\r\n isClientsOnly: query.isClientsOnly,\r\n includeStaff: query.includeStaff,\r\n includeIndividual: query.includeIndividual,\r\n includeOrganisation: query.includeOrganisation, \r\n tagsList: query.tagsList,\r\n cityList: query.cityList,\r\n importanceList: query.importanceList,\r\n stateList: query.stateList, \r\n countryList: query.countryList, \r\n businessTypeList: query.businessTypeList,\r\n relationshipManagerList: query.relationshipManagerList,\r\n includePmsContacts: query.includePmsContacts,\r\n includeNonPmsContacts: query.includeNonPmsContacts\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 // } else {\r\n // onSuccess({\r\n // party: {\r\n // nameSummaries: {\r\n // recordCount: 0,\r\n // nameSummaryActualCount: {\r\n // actualRowCountForSearch: 0\r\n // },\r\n // nameSummary: [] \r\n // }\r\n // }\r\n // });\r\n // }\r\n}\r\n\r\nconst NameData = gql`\r\nquery NameSummaries(\r\n $offset: Int\r\n $first: Int\r\n $filter: String\r\n $isClientsOnly: Boolean\r\n $includeStaff: Boolean\r\n $includeIndividual: Boolean\r\n $includeOrganisation: Boolean\r\n $tagsList: String\r\n $stateList: String\r\n $countryList: String\r\n $businessTypeList: String\r\n $relationshipManagerList: String\r\n $includePmsContacts: Boolean\r\n $includeNonPmsContacts: Boolean\r\n $cityList: String\r\n $importanceList: 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 relationshipManagerList: $relationshipManagerList\r\n businessTypeList: $businessTypeList\r\n includePmsContacts: $includePmsContacts\r\n includeNonPmsContacts: $includeNonPmsContacts\r\n cityList: $cityList\r\n importanceList: $importanceList\r\n ) {\r\n recordCount\r\n nameSummaryActualCount {\r\n actualRowCountForSearch\r\n __typename\r\n }\r\n nameSummary {\r\n image\r\n guidID\r\n nameId\r\n name\r\n title\r\n relatedName\r\n emailAddress\r\n mobile\r\n phone\r\n position\r\n city\r\n state\r\n country\r\n address\r\n entityType\r\n relationshipManager\r\n relationshipQualityDescription\r\n relationshipQualityLevel\r\n referrerType\r\n referrerSource\r\n lastContactDate\r\n lastReferralDate\r\n notes\r\n isClient\r\n isOrganisation\r\n isIndividual\r\n isStaff\r\n isReferrer\r\n isUser\r\n currentMatters\r\n lastMatterDate\r\n estimatedFees\r\n billedFees\r\n trustBalance\r\n billedDisbursements\r\n unbilledFees\r\n unbilledDisbursements\r\n completedMatters\r\n newMattersInTheLast12Months\r\n firstMatterDate\r\n totalBilledFees\r\n percentageEstimate\r\n exposure\r\n hasMarketingConsent\r\n tags\r\n enquiriesReferredInTheLast12Months\r\n enquiriesReferredInTotal\r\n lastEnquiryDate\r\n businessType\r\n isFromDataSource\r\n isEntered\r\n partyRelationshipManager\r\n partyRelationshipQualityDescription\r\n partyRelationshipQualityLevel\r\n createdDate\r\n }\r\n }\r\n }\r\n}\r\n`;\r\n\r\nexport const NameSummaryOptions = gql`query NameSummaryOptions{\r\n appUser {\r\n isAdministrator\r\n } \r\n}`;\r\n\r\nexport const UpdateNameSubscription = gql`\r\nsubscription UpdateNameSubscription {\r\n updateNameNotification{\r\n id,\r\n description,\r\n status,\r\n message\r\n }\r\n}`;\r\n\r\nexport function retrieveNameTagsData(\r\n query: NameTagsParams, \r\n refreshData: boolean,\r\n onSuccess: (data: NameTagsData) => 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\r\n client.query({\r\n query: NameTagsQuery,\r\n variables: {\r\n nameId: query.nameId, \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\nexport interface NameTagsParams {\r\n nameId: number;\r\n}\r\nexport interface NameTagsData {\r\n partydetails: Partydetails;\r\n}\r\n\r\nexport interface Partydetails {\r\n tags: Tag[];\r\n}\r\n\r\nexport interface Tag {\r\n guidId: string;\r\n tag: string;\r\n tagGuidId: string;\r\n tagTypeGuidId: string;\r\n tagType: string;\r\n}\r\n\r\nexport const NameTagsQuery = gql`\r\n query nameTags($nameId: Int!) {\r\n partydetails(nameId: $nameId) {\r\n ... on Individual {\r\n tags {\r\n guidId\r\n tag\r\n tagGuidId\r\n tagTypeGuidId\r\n tagType\r\n }\r\n }\r\n ... on Organisation {\r\n tags {\r\n guidId\r\n tag\r\n tagGuidId\r\n tagTypeGuidId\r\n tagType\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport type NameCrmAddressInput = {\r\n addressName: string | null;\r\n floor: string | null;\r\n number: string | null;\r\n street: string | null;\r\n suburb: string | null;\r\n state: string | null;\r\n postcode: string | null;\r\n country: string | null;\r\n pOBoxType: string | null;\r\n};\r\n\r\nexport type NameCrmContactInput = {\r\n firstName: string | null;\r\n lastName: string | null;\r\n email: string | null;\r\n gender: string | null;\r\n title: string | null;\r\n phone: string | null;\r\n mobile: string | null;\r\n isMarketingConsent: boolean | null;\r\n postalAddress: NameCrmAddressInput | null;\r\n mainAddress: NameCrmAddressInput | null;\r\n tags: string[] | null;\r\n position: string | null;\r\n qualityOfRelationshipGuid: string | null;\r\n relationshipManagerGuid: string | null;\r\n};\r\n\r\nexport type CreateNameCrmInput = {\r\n guid: string | null;\r\n firstName: string | null;\r\n lastName: string | null;\r\n email: string | null;\r\n position: string | null;\r\n gender: string | null;\r\n title: string | null;\r\n phone: string | null;\r\n mobile: string | null;\r\n isOrganisation: boolean | null;\r\n organisation: string | null;\r\n createdDate: Date | null;\r\n isMarketingConsent: boolean | null;\r\n dOB: Date | null;\r\n postalAddress: NameCrmAddressInput | null;\r\n mainAddress: NameCrmAddressInput | null;\r\n contacts: NameCrmContactInput[] | null;\r\n tags: string[] | null;\r\n url: string | null;\r\n qualityOfRelationshipGuid: string | null;\r\n relationshipManagerGuid: string | null;\r\n backgroundNotes: string | null;\r\n};\r\n\r\nexport type CreateCrmPartyMutationParams = {\r\n input: CreateNameCrmInput | null;\r\n};\r\n\r\nexport type UpdateCrmPartyMutationParams = CreateCrmPartyMutationParams;\r\n\r\nexport type CreateCrmPartyMutationData = {\r\n crm: CRM;\r\n};\r\n\r\nexport type CRM = {\r\n party: CrmParty;\r\n};\r\n\r\nexport type CrmParty = {\r\n create: Create;\r\n delete: Create;\r\n update: Create;\r\n};\r\n\r\nexport type Create = {\r\n error: null;\r\n status: boolean;\r\n};\r\n\r\nexport type DeleteCrmPartyMutationData = CreateCrmPartyMutationData;\r\n\r\nexport type UpdateCrmPartyMutationData = CreateCrmPartyMutationData;\r\n\r\nexport type DeleteCrmPartyMutationParams = {\r\n partyGuid: string | null;\r\n};\r\n\r\nexport const CreateCrmPartyMutation = gql`\r\n mutation CreateCrmPartyMutation($input: CreateNameCrmInput) {\r\n crm {\r\n party {\r\n create(input: $input) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const UpdateCrmPartyMutation = gql`\r\n mutation UpdateCrmPartyMutation($input: UpdateNameCrmInput) {\r\n crm {\r\n party {\r\n update(input: $input) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const DeleteCrmPartyMutation = gql`\r\n mutation DeleteCrmPartyMuation($partyGuid: String) {\r\n crm {\r\n party {\r\n delete(nameGuid: $partyGuid) {\r\n error\r\n status\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const CreateNameCrmNotificationSubscription = gql`\r\n subscription CreateNameCrmNotification {\r\n createNameCrmNotification {\r\n description\r\n id\r\n message\r\n guid\r\n status\r\n }\r\n }\r\n`;\r\n\r\nexport const UpdateNameCrmNotificationSubscription = gql`\r\n subscription UpdateNameCrmNotification {\r\n updateNameCrmNotification {\r\n description\r\n id\r\n message\r\n status\r\n }\r\n }\r\n`;\r\n\r\nexport const DeleteNameCrmNotificationSubscription = gql`\r\n subscription DeleteNameCrmNotification {\r\n deleteNameCrmNotification {\r\n description\r\n id\r\n message\r\n status\r\n }\r\n }\r\n`;\r\n\r\nexport type NameCrmQueryParams = {\r\n nameGuid: string | null;\r\n};\r\n\r\nexport type NameCrmQueryData = {\r\n party: NameCrmParty;\r\n};\r\n\r\nexport type NameCrmParty = {\r\n nameCrm: NameCrm;\r\n};\r\n\r\nexport type NameCrm = {\r\n backgroundNotes: null | string;\r\n position: null | string;\r\n nameId: null | number;\r\n nameGuid: null | string;\r\n website: null | string;\r\n isOrganisation?: boolean;\r\n title: null | string;\r\n firstName: null | string;\r\n lastName: null | string;\r\n organisationName?: null | string;\r\n emailAddress: null | string;\r\n phone: null | string;\r\n mobile: null | string;\r\n buildingName: null | string;\r\n level: null | string;\r\n number: null | string;\r\n street: null | string;\r\n suburb: null | string;\r\n state: null | string;\r\n postCode: null | string;\r\n country: null | string;\r\n postalPoBoxType: null | string;\r\n postalPoBoxTypeGuid: null | string;\r\n postalNumber: null | string;\r\n postalSuburb: null | string;\r\n postalState: null | string;\r\n postalPostCode: null | string;\r\n postalCountry: null | string;\r\n tags: null | string;\r\n hasMarketingConsent: boolean;\r\n relationshipManager: string | null;\r\n relationshipManagerGuid: string | null;\r\n relationshipQualityGuid: string | null;\r\n relationshipQualityLevel: number | null;\r\n relationshipQualityDescription: string | null;\r\n contactCrm?: NameCrm[];\r\n};\r\n\r\nexport type NameCrmTag = {\r\n id: number;\r\n value: string;\r\n TagDescription: string;\r\n label: string;\r\n TagTypeDescription: string;\r\n TagTypeGuid: string;\r\n};\r\n\r\nexport const NameCrmQuery = gql`\r\n query partyCrm($nameGuid: String) {\r\n party {\r\n nameCrm(nameGuid: $nameGuid) {\r\n backgroundNotes\r\n position\r\n nameId\r\n nameGuid\r\n website\r\n isOrganisation\r\n title\r\n firstName\r\n lastName\r\n organisationName\r\n emailAddress\r\n phone\r\n mobile\r\n buildingName\r\n level\r\n number\r\n street\r\n suburb\r\n state\r\n postCode\r\n country\r\n postalPoBoxType\r\n postalPoBoxTypeGuid\r\n postalNumber\r\n postalSuburb\r\n postalState\r\n postalPostCode\r\n postalCountry\r\n tags\r\n hasMarketingConsent\r\n relationshipManager\r\n relationshipManagerGuid\r\n relationshipQualityGuid\r\n relationshipQualityLevel\r\n relationshipQualityDescription\r\n contactCrm {\r\n position\r\n nameId\r\n nameGuid\r\n title\r\n firstName\r\n lastName\r\n emailAddress\r\n phone\r\n mobile\r\n buildingName\r\n level\r\n number\r\n street\r\n suburb\r\n state\r\n postCode\r\n country\r\n backgroundNotes\r\n postalPoBoxType\r\n postalPoBoxTypeGuid\r\n postalNumber\r\n postalSuburb\r\n postalState\r\n postalPostCode\r\n postalCountry\r\n tags\r\n hasMarketingConsent\r\n \trelationshipManager\r\n relationshipManagerGuid\r\n relationshipQualityGuid\r\n relationshipQualityLevel\r\n relationshipQualityDescription\r\n }\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport function retrieveNameCrmData(\r\n query: NameCrmQueryParams,\r\n refreshData: boolean,\r\n onSuccess: (data: NameCrmQueryData) => 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: NameCrmQuery,\r\n variables: {\r\n nameGuid: query.nameGuid,\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\n// party address\r\nexport type PartyAddressesParams = {\r\n nameId: number | null;\r\n isFromDataSource: boolean | null;\r\n};\r\n\r\nexport type PartyAddressesData = {\r\n party: PartyAddress;\r\n};\r\n\r\nexport type PartyAddress = {\r\n addresses: Addresses;\r\n};\r\n\r\nexport type Addresses = {\r\n address: Address[];\r\n recordCount: number;\r\n};\r\n\r\nexport type Address = {\r\n id: number;\r\n nameId: number;\r\n name: string;\r\n addressType: string;\r\n floor: string;\r\n number: string;\r\n street: string;\r\n state: string;\r\n suburb: string;\r\n postcode: string;\r\n country: string;\r\n};\r\n\r\nexport const PartyAddressesQuery = gql`\r\n query Addresses($nameId: Int, $isFromDataSource: Boolean) {\r\n party {\r\n addresses(nameId: $nameId, isFromDataSource: $isFromDataSource) {\r\n address {\r\n id\r\n nameId\r\n name\r\n addressType\r\n floor\r\n number\r\n street\r\n state\r\n suburb\r\n postcode\r\n country\r\n }\r\n recordCount\r\n }\r\n }\r\n }\r\n`;\r\n\r\nexport const PartyTagsProcessCompletesSubscription = gql`\r\n subscription PartyTagsProcessCompletesNotification{\r\n publishPartyTagsProcessCompleteNotification {\r\n id\r\n status\r\n message\r\n description\r\n }\r\n }\r\n`;\r\n\r\nexport interface PublishPartyTagsProcessCompleteNotificationData {\r\n publishPartyTagsProcessCompleteNotification: PublishPartyTagsProcessCompleteNotification;\r\n}\r\n\r\nexport interface PublishPartyTagsProcessCompleteNotification {\r\n id: number;\r\n status: boolean;\r\n message: string;\r\n description: null;\r\n}\r\n","// tslint:disable:no-console\r\n// In production, we register a service worker to serve assets from local cache.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on the 'N+1' visit to a page, since previously\r\n// cached resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\r\n// This link also includes instructions on opting out of this behavior.\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport default function register() {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n process.env.PUBLIC_URL!,\r\n window.location.toString()\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (!isLocalhost) {\r\n // Is not local host. Just register service worker\r\n registerValidSW(swUrl);\r\n } else {\r\n // This is running on localhost. Lets check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker) {\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the old content will have been purged and\r\n // the fresh content will have been added to the cache.\r\n // It's the perfect time to display a 'New content is\r\n // available; please refresh.' message in your web app.\r\n console.log('New content is available; please refresh.');\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // 'Content is cached for offline use.' message.\r\n console.log('Content is cached for offline use.');\r\n }\r\n }\r\n };\r\n }\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n if (\r\n response.status === 404 ||\r\n response.headers.get('content-type')!.indexOf('javascript') === -1\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\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 { TextField, CircularProgress } from '@material-ui/core';\r\nimport { RenderInputParams } from '@material-ui/lab';\r\nimport { IAutoCompleteItem } from '../../typings/autoComplete';\r\nimport { InfiniteAutocomplete } from '../../components/InfiniteAutocomplete';\r\nimport { showNotification } from '../../App';\r\nimport { useDebouncedCallback } from 'use-debounce/lib';\r\nimport { EventAndCampaignSummary, EventsAndCampaignQueryData, EventsAndCampaignQueryParams, retrieveEventsAndCampaignData } from '../../eventsAndCampaigns/EventsAndCampaignsRepositories';\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\nexport type EventsAndCampaignIAutoCompleteItem = IAutoCompleteItem & EventAndCampaignSummary;\r\n\r\ninterface EventsAndCampaignSelectorProps {\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?: (data: EventsAndCampaignIAutoCompleteItem | EventsAndCampaignIAutoCompleteItem[], name: string) => void;\r\n required?: boolean;\r\n id?: string;\r\n style?: React.CSSProperties;\r\n className?: string;\r\n isCompleted?: boolean;\r\n error?: boolean;\r\n helperText?: string;\r\n onBlur?: (event: React.FocusEvent) => void;\r\n}\r\n\r\ninterface EventsAndCampaignSelectorState {\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 EventsAndCampaignSelector: 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 eventAndCapaignQueryParams: EventsAndCampaignQueryParams = {\r\n filter: filter,\r\n first: loadBlockLimit,\r\n offset: offset,\r\n isIncludeCompleted: props.isCompleted\r\n };\r\n\r\n retrieveEventsAndCampaignData(\r\n eventAndCapaignQueryParams,\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) => onDataRetrieved(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 onDataRetrieved = (data: EventsAndCampaignQueryData, filter: string, offset: number, isClear: boolean) => {\r\n\r\n const eventAndCampaignData = data.eventAndCampaign.summaryList.eventAndCampaignSummaries;\r\n const recordCount = data.eventAndCampaign.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 = eventAndCampaignData.map( (source: EventAndCampaignSummary) => ({\r\n ...source,\r\n value: source.guid,\r\n label: source.name,\r\n guid: source.guid,\r\n name: source.name,\r\n }));\r\n } else {\r\n // tslint:disable-next-line: no-shadowed-variable\r\n for (const eventAndCampaign of eventAndCampaignData) {\r\n // tslint:disable-next-line: no-any\r\n const isExists = items.filter((item: EventAndCampaignSummary | any) => item.guid === eventAndCampaign.guid).length;\r\n\r\n if (isExists === 0) {\r\n itemsList.push({\r\n ...eventAndCampaign,\r\n value: eventAndCampaign.guid,\r\n label: eventAndCampaign.name,\r\n guid: eventAndCampaign.guid,\r\n name: eventAndCampaign.name,\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: eventAndCampaignData.length !== 0 && (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 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: IAutoCompleteItem | any, 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 style={props.style}\r\n onBlur={props.onBlur}\r\n renderInput={params => (\r\n \r\n )}\r\n />\r\n
\r\n );\r\n};\r\n"],"sourceRoot":""}