{"version":3,"file":"694.f2a92dc8005791e6.js","mappings":"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","names":["selectQuestions","createSelector","selectFitState","state","questions","PublicDisclaimerComponent","constructor","this","EventEmitter","onNext","accepted","emit","selectors","i0","ctx","PublicContactInfoComponent","CONTACT_FORM_VALIDATION_MSGS","contactForm","FormGroup","firstName","FormControl","Validators","lastName","email","phoneNumber","company","jobTitle","notes","onSubmit","data","get","value","publicContactInfo","FitWizardComponent","_class","route","store","UntypedFormGroup","select","ngOnInit","isPublicPage","publicSearch","corrId","snapshot","queryParams","dispatch","loadPublicSearchQuestions","loadQuestions","pipe","filter","length","take","tap","forEach","questionId","responseOptions","formGroup","addControl","toString","UntypedFormControl","QuestionIds","serviceTypeId","serviceTypeResponse","find","o","parseInt","patchValue","e","choiceId","text","hideQuestion","numberEmployeesId","numberEmployeesResponse","locationIds","locations","split","ids","push","technologySolution","TechnologyIdResponse","slice","isTechnologySolution","subscribe","ngAfterViewInit","valueChanges","change","updateChangeResultsFit","c","changes","whichIntegrations","Array","isArray","map","importantIntegrations","updateQuestions","serviceType","hasIntegrations","makePayments","submit","form","whichIntegrationsAnswer","whichIntegrationsKeys","Object","keys","integrationResponse","k","i","switchChoiceId","rank","showPublicForm","formData","submitWizard","getPublicInfo","publicContactData","submitPublicWizard","contactInfo","id","disclaimerAccepted","core","tslib_es6","Unsubscriber","FitResultsLoadingComponent","router","interval","x","_messages","startWith","finalize","whenFinished$","next","Subject","switchMap","selectSearchId","searchId","console","log","params","clientId","navigateByUrl","routes","path","component","title","ServiceListingResultsLoadingComponent","FitWizardRoutingModule","RouterModule","FitWizardModule","FormUtilsService","imports","CommonModule","SharedModule","MatStepperModule","MatChipsModule","MatListModule","DragDropModule","MatProgressSpinnerModule","OverlayModule","createFeatureSelector","fitFeatureKey"],"sourceRoot":"webpack:///","sources":["./src/app/fit/store/selectors/questions.selector.ts","./src/app/fit-wizard/components/public-disclaimer/public-disclaimer.component.ts","./src/app/fit-wizard/components/public-disclaimer/public-disclaimer.component.html","./src/app/fit-wizard/components/public-contact-info/public-contact-info.component.ts","./src/app/fit-wizard/components/public-contact-info/public-contact-info.component.html","./src/app/fit-wizard/fit-wizard.component.html","./src/app/fit-wizard/fit-wizard.component.ts","./src/app/fit-wizard/containers/fit-results-loading/fit-results-loading.component.ts","./src/app/fit-wizard/containers/fit-results-loading/fit-results-loading.component.html","./src/app/fit-wizard/fit-wizard-routing.module.ts","./src/app/fit-wizard/fit-wizard.module.ts","./src/app/fit/store/selectors/root.selector.ts","./src/app/fit/store/selectors/search-id.selector.ts"],"sourcesContent":["import { selectFitState } from './root.selector';\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nexport const selectQuestions = createSelector(\r\n selectFitState,\r\n (state) => state.questions)\r\n","import { Component, EventEmitter, Output, ChangeDetectionStrategy } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'maas-public-disclaimer',\r\n templateUrl: './public-disclaimer.component.html',\r\n styleUrls: ['./public-disclaimer.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PublicDisclaimerComponent {\r\n @Output() accepted = new EventEmitter();\r\n\r\n onNext() {\r\n this.accepted.emit();\r\n }\r\n}\r\n","
\r\n By clicking “accept” you acknowledge and agree that:\r\n
\r\n\r\n\r\n
\r\n

(a) KPMG’s making of this platform available to you, and KPMG’s operation\r\n of\r\n this platform, do not constitute a “professional service” as that terms is used and defined by\r\n applicable law and standards, rules, and regulations promulgated by the AICPA, SEC, PCAOB and any\r\n regulator of the practice of public accounting; and\r\n

\r\n\r\n

(b) this platform is available for use by all business entities that\r\n agree to\r\n the Terms of Use, and KPMG’s operation of, and your use of, this platform does not constitute a\r\n contract, agreement, or “business relationship” between you and KPMG, as the latter term is defined\r\n in\r\n used in the rules and regulations promulgated by the SEC, including but not limited to Rule 2-01 of\r\n Regulation S-X.\r\n

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n \r\n\r\n","import { Component, EventEmitter, Output } from '@angular/core';\r\nimport { FormControl, FormGroup, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { CONTACT_FORM_VALIDATION_MSGS } from 'src/app/public/constants';\r\nimport type { IContactInfo } from '../../models/contact-info.model'\r\n\r\n@Component({\r\n selector: 'maas-public-contact-info',\r\n templateUrl: './public-contact-info.component.html',\r\n styleUrls: ['./public-contact-info.component.scss']\r\n})\r\nexport class PublicContactInfoComponent {\r\n validationMessages = CONTACT_FORM_VALIDATION_MSGS;\r\n @Output() publicContactInfo = new EventEmitter();\r\n contactForm: UntypedFormGroup;\r\n isDisabled = false;\r\n\r\n constructor() {\r\n this.contactForm = new FormGroup({\r\n firstName: new FormControl('', [Validators.required, Validators.minLength(2), Validators.maxLength(50)]),\r\n lastName: new FormControl('', [Validators.required, Validators.minLength(2), Validators.maxLength(50)]),\r\n email: new FormControl('', [Validators.required, Validators.email]),\r\n phoneNumber: new FormControl('', [Validators.required, Validators.minLength(10), Validators.maxLength(20)]),\r\n company: new FormControl('', [Validators.required, Validators.minLength(2), Validators.maxLength(100)]),\r\n jobTitle: new FormControl('', [Validators.required, Validators.minLength(2), Validators.maxLength(50)]),\r\n notes: new FormControl('', null),\r\n });\r\n }\r\n\r\n onSubmit() {\r\n const data: IContactInfo = {\r\n firstName: this.contactForm.get('firstName')?.value,\r\n lastName: this.contactForm.get('lastName')?.value,\r\n email: this.contactForm.get('email')?.value,\r\n phoneNumber: this.contactForm.get('phoneNumber')?.value,\r\n company: this.contactForm.get('company')?.value,\r\n jobTitle: this.contactForm.get('jobTitle')?.value,\r\n notes: this.contactForm.get('notes')?.value,\r\n }\r\n this.publicContactInfo.emit(data);\r\n }\r\n\r\n}\r\n","
\r\n one more thing before you get to your search results!\r\n
\r\n
\r\n

please provide your contact information

\r\n
\r\n
\r\n
\r\n \r\n first name\r\n \r\n {{ validationMessages.firstName}}\r\n \r\n\r\n \r\n last name\r\n \r\n {{ validationMessages.lastName }}\r\n \r\n\r\n \r\n contact email\r\n \r\n {{ validationMessages.contactEmail }}\r\n \r\n\r\n \r\n contact phone\r\n \r\n {{ validationMessages.contactPhone }}\r\n \r\n\r\n \r\n company name\r\n \r\n {{ validationMessages.companyName }}\r\n \r\n\r\n \r\n job title\r\n \r\n {{ validationMessages.jobTitle }}\r\n \r\n\r\n \r\n any additional details to share with perspective suppliers?\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\n\r\n \r\n \r\n
\r\n\r\n\r\n \r\n\r\n","import { AfterViewInit, Component, Input, OnInit } from '@angular/core';\r\nimport { UntypedFormControl, UntypedFormGroup, Validators } from '@angular/forms';\r\nimport { filter, take, tap } from 'rxjs/operators';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { QuestionIds } from './models/question.model';\r\nimport { Store } from '@ngrx/store';\r\nimport { FitState } from '../fit/store/fit.reducers';\r\nimport { selectQuestions } from '../fit/store/selectors/questions.selector';\r\nimport { loadPublicSearchQuestions, loadQuestions } from '../fit/store/actions/load-questions.actions';\r\nimport { submitWizard, submitPublicWizard } from '../fit/store/actions/submit-wizard.actions';\r\nimport { Unsubscriber } from '@core';\r\nimport { IMultipleAnswer, IRankedAnswer } from './models/answer.model';\r\nimport { IResponseOption } from './services/fit-questions/fit-questions.service';\r\nimport { hideQuestion } from '../fit/store/actions/hide-question.actions';\r\nimport { updateQuestions, updateChangeResultsFit } from '../fit/store/actions';\r\nimport { IContactInfo } from './models/contact-info.model';\r\n\r\n@Unsubscriber()\r\n@Component({\r\n selector: 'maas-fit-wizard',\r\n templateUrl: './fit-wizard.component.html',\r\n styleUrls: ['./fit-wizard.component.scss'],\r\n})\r\nexport class FitWizardComponent implements OnInit, AfterViewInit {\r\n formGroup = new UntypedFormGroup({});\r\n questions$ = this.store.select(selectQuestions);\r\n @Input() isPublicPage: boolean = false;\r\n publicSearch = false;\r\n corrId = '';\r\n isTechnologySolution: boolean = false;\r\n publicContactInfo!: IContactInfo;\r\n showPublicForm: boolean = false;\r\n formData: any;\r\n accepted: boolean = false;\r\n\r\n constructor(private route: ActivatedRoute, private store: Store) { }\r\n\r\n ngOnInit(): void {\r\n if (this.isPublicPage) {\r\n this.publicSearch = this.isPublicPage;\r\n this.corrId = this.route.snapshot.queryParams.corrId;\r\n this.store.dispatch(loadPublicSearchQuestions());\r\n }\r\n else {\r\n this.store.dispatch(loadQuestions());\r\n }\r\n\r\n // dynamically generate the form from the questions configuration\r\n this.store\r\n .select(selectQuestions)\r\n .pipe(\r\n filter((questions) => questions.length > 0),\r\n take(1),\r\n tap((questions) => {\r\n questions.forEach(({ questionId, responseOptions }) => {\r\n this.formGroup.addControl(questionId.toString(), new UntypedFormControl('', [Validators.required]));\r\n\r\n if (questionId === QuestionIds.serviceType) {\r\n const serviceTypeId = this.route.snapshot.queryParams.serviceTypeId || null;\r\n const serviceTypeResponse: IResponseOption | undefined = responseOptions.find(\r\n (o) => o.value === parseInt(serviceTypeId, 10)\r\n );\r\n if (serviceTypeResponse) {\r\n this.formGroup.patchValue({\r\n [questionId]: {\r\n choiceId: serviceTypeResponse.value,\r\n text: serviceTypeResponse.text\r\n },\r\n });\r\n\r\n this.store.dispatch(hideQuestion({ questionId }));\r\n }\r\n }\r\n\r\n if (questionId === QuestionIds.numberEmployees && !this.isPublicPage) {\r\n const numberEmployeesId = this.route.snapshot.queryParams.numberEmployeesId;\r\n const numberEmployeesResponse: IResponseOption | undefined = responseOptions.find(\r\n (o) => o.value === parseInt(numberEmployeesId, 10)\r\n );\r\n\r\n if (numberEmployeesResponse) {\r\n this.formGroup.patchValue({\r\n [questionId.toString()]: {\r\n choiceId: numberEmployeesResponse.value,\r\n text: numberEmployeesResponse.text\r\n },\r\n });\r\n this.store.dispatch(hideQuestion({ questionId }));\r\n }\r\n }\r\n\r\n if (questionId === QuestionIds.serviceLocation && this.isPublicPage) {\r\n let locationIds: [] = this.route.snapshot.queryParams.locations.split(',');\r\n let locations: any[] = [];\r\n locationIds.forEach(ids => {\r\n locations.push({\r\n choiceId: ids,\r\n text: responseOptions.find(e => e.value == ids)?.text\r\n });\r\n })\r\n this.formGroup.patchValue({\r\n [questionId.toString()]: locations,\r\n });\r\n this.store.dispatch(hideQuestion({ questionId }));\r\n\r\n }\r\n\r\n if (questionId === QuestionIds.technologySolution && this.isPublicPage) {\r\n const technologySolution = this.route.snapshot.queryParams.technologySolution;\r\n const TechnologyIdResponse: IResponseOption | undefined = responseOptions.find(\r\n (o) => o.value === parseInt(technologySolution.slice(','), 10)\r\n );\r\n\r\n if (TechnologyIdResponse) {\r\n this.isTechnologySolution = true;\r\n this.formGroup.patchValue({\r\n [questionId.toString()]: {\r\n choiceId: TechnologyIdResponse.value,\r\n text: TechnologyIdResponse.text\r\n },\r\n });\r\n this.store.dispatch(hideQuestion({ questionId }));\r\n }\r\n }\r\n\r\n });\r\n })\r\n )\r\n .subscribe();\r\n }\r\n\r\n ngAfterViewInit() {\r\n // listen for changes\r\n this.formGroup.valueChanges\r\n .pipe(\r\n tap((change) => this.store.dispatch(updateChangeResultsFit({ change }))),\r\n filter((c) =>\r\n c[QuestionIds.serviceType]\r\n || c[QuestionIds.hasIntegrations]\r\n || c[QuestionIds.makePayments]\r\n )\r\n )\r\n .subscribe(changes => {\r\n const whichIntegrations: string[] = Array.isArray(changes[QuestionIds.whichIntegrations])\r\n ? changes[QuestionIds.whichIntegrations]?.map((c: IMultipleAnswer) => c.text)\r\n : [];\r\n\r\n const importantIntegrations: number[] = Array.isArray(changes[QuestionIds.importantIntegrations])\r\n ? changes[QuestionIds.importantIntegrations].map((c: IRankedAnswer) => c.choiceId)\r\n : [];\r\n\r\n const isPublic = this.publicSearch;\r\n\r\n const c: {\r\n serviceType: string;\r\n hasIntegrations: string;\r\n makePayments: string;\r\n whichIntegrations: string[];\r\n importantIntegrations: number[];\r\n publicSearch: boolean;\r\n } = {\r\n serviceType: changes[QuestionIds.serviceType]?.text || '',\r\n hasIntegrations: changes[QuestionIds.hasIntegrations]?.text || '',\r\n makePayments: changes[QuestionIds.makePayments]?.text || '',\r\n whichIntegrations,\r\n importantIntegrations,\r\n publicSearch: isPublic\r\n };\r\n\r\n this.store.dispatch(updateQuestions(c));\r\n });\r\n }\r\n\r\n submit(form: { [questionId: string]: any }) {\r\n // map answer for importantIntegrations question because form is skipped/not updated\r\n const whichIntegrationsAnswer: any = this.formGroup.value[QuestionIds.whichIntegrations];\r\n const whichIntegrationsKeys = Object.keys(whichIntegrationsAnswer);\r\n if (whichIntegrationsKeys?.length) {\r\n const integrationResponse: IRankedAnswer[] = whichIntegrationsKeys.map((k, i) => ({\r\n choiceId: this.switchChoiceId(whichIntegrationsAnswer[k]?.choiceId),\r\n rank: i + 1\r\n }));\r\n form[QuestionIds.importantIntegrations] = integrationResponse;\r\n };\r\n\r\n // get answers to these two questions which are hidden by default and should be included in every search\r\n form[QuestionIds.serviceType] = this.formGroup.get(QuestionIds.serviceType.toString())?.value;\r\n if (!this.isPublicPage) {\r\n form[QuestionIds.numberEmployees] = this.formGroup.get(QuestionIds.numberEmployees.toString())?.value;\r\n this.store.dispatch(submitWizard({ form }));\r\n }\r\n else {\r\n form[QuestionIds.serviceLocation] = this.formGroup.get(QuestionIds.serviceLocation.toString())?.value;\r\n if (this.isTechnologySolution) {\r\n form[QuestionIds.technologySolution] = this.formGroup.get(QuestionIds.technologySolution.toString())?.value;\r\n }\r\n this.showPublicForm = true;\r\n this.formData = form;\r\n }\r\n }\r\n\r\n getPublicInfo(publicContactData: IContactInfo) {\r\n this.store.dispatch(submitPublicWizard({ form: this.formData, corrId: this.corrId, contactInfo: publicContactData }));\r\n }\r\n private switchChoiceId(id: number) {\r\n /*\r\n switch responseOption values from whichIntegrations to importantIntegrations\r\n this is workaround to get correct choiceId for question importantIntegrations when\r\n the question is skipped and the form is empty\r\n */\r\n switch (id) {\r\n case 3058:\r\n return 1489;\r\n case 3059:\r\n return 1490;\r\n case 3060:\r\n return 1488;\r\n case 3061:\r\n return 1485;\r\n case 3062:\r\n return 1491;\r\n case 3063:\r\n return 1486;\r\n case 3064:\r\n return 1487;\r\n case 3065:\r\n return 1493;\r\n case 3066:\r\n return 1492;\r\n default:\r\n return 1;\r\n }\r\n }\r\n\r\n disclaimerAccepted() {\r\n this.accepted = true;\r\n }\r\n\r\n}\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { ActivatedRoute, Router } from '@angular/router';\r\nimport { interval, Subject } from 'rxjs';\r\nimport { map, take, startWith, finalize, filter, switchMap, tap } from 'rxjs/operators';\r\nimport { FitState } from '../../../fit/store/fit.reducers';\r\nimport { Store } from '@ngrx/store';\r\nimport { selectSearchId } from '../../../fit/store/selectors/search-id.selector';\r\n\r\n@Component({\r\n selector: 'maas-fit-results-loading',\r\n templateUrl: './fit-results-loading.component.html',\r\n styleUrls: ['./fit-results-loading.component.scss'],\r\n})\r\nexport class FitResultsLoadingComponent implements OnInit {\r\n\r\n messages$ = interval(1500).pipe(\r\n take(3),\r\n map(x => this._messages[x]),\r\n startWith('analyzing your responses...'),\r\n finalize(() => {\r\n this.whenFinished$.next();\r\n })\r\n );\r\n\r\n private whenFinished$ = new Subject();\r\n\r\n private _messages = [\r\n 'searching for suppliers...',\r\n 'optimizing FIT ranking...',\r\n 'Done!' // this is skynet!\r\n ];\r\n\r\n\r\n constructor(\r\n private router: Router,\r\n private route: ActivatedRoute,\r\n private store: Store,\r\n ) {\r\n this.whenFinished$.pipe(\r\n switchMap(() => this.store.select(selectSearchId)),\r\n filter(searchId => searchId > 0),\r\n take(1),\r\n tap(searchId => {\r\n console.log(this.route.snapshot.params.clientId);\r\n this.router.navigateByUrl(\r\n this.route.snapshot.params.clientId?\r\n `/app/${this.route.snapshot.params.clientId}/fit/fit-results/${searchId}`:\r\n `/public/fitresults/${searchId}`\r\n );\r\n })\r\n ).subscribe();\r\n }\r\n\r\n ngOnInit(): void {}\r\n}\r\n","
\r\n \r\n

{{messages$ | async}}

\r\n
\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule, Routes } from '@angular/router';\r\nimport { FitWizardComponent } from './fit-wizard.component';\r\nimport { FitResultsLoadingComponent } from './containers/fit-results-loading/fit-results-loading.component';\r\nimport { ServiceListingResultsLoadingComponent } from 'src/app/fit-wizard/containers/service-listing-results-loading/service-listing-results-loading.component';\r\n\r\nconst routes: Routes = [\r\n {\r\n path: '',\r\n component: FitWizardComponent,\r\n title: 'Find my FIT'\r\n },\r\n {\r\n path: 'results',\r\n component: FitResultsLoadingComponent,\r\n title: 'View FIT results'\r\n },\r\n {\r\n path: 'sl-results',\r\n component: ServiceListingResultsLoadingComponent,\r\n title: 'Processing FIT...'\r\n }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forChild(routes)],\r\n exports: [RouterModule]\r\n})\r\nexport class FitWizardRoutingModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { FitWizardRoutingModule } from './fit-wizard-routing.module';\r\nimport { FitWizardComponent } from './fit-wizard.component';\r\nimport { QuestionnaireStepperComponent } from './components/questionnaire-stepper/questionnaire-stepper.component';\r\nimport { SharedModule } from '../@shared';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { RankedChoiceControlComponent } from './components/ranked-choice-control/ranked-choice-control.component';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { FitResultsLoadingComponent } from './containers/fit-results-loading/fit-results-loading.component';\r\nimport { ServiceListingMatchingComponent } from 'src/app/fit-wizard/containers/service-listing-matching/service-listing-matching.component';\r\nimport { ServiceListingMatchingUpdateComponent } from 'src/app/fit-wizard/containers/service-listing-matching-update/service-listing-matching-update.component';\r\nimport { ServiceListingResultsLoadingComponent } from 'src/app/fit-wizard/containers/service-listing-results-loading/service-listing-results-loading.component';\r\nimport { ProgressIndicatorComponent } from 'src/app/fit-wizard/components/progress-indicator/progress-indicator.component';\r\nimport { AppProgressTooltipDirective } from 'src/app/fit-wizard/directives/progress-tooltip.directive';\r\nimport { ProgressTooltipComponent } from 'src/app/fit-wizard/components/progress-tooltip/progress-tooltip.component';\r\nimport { PublicDisclaimerComponent } from 'src/app/fit-wizard/components/public-disclaimer/public-disclaimer.component';\r\nimport { OverlayModule } from '@angular/cdk/overlay';\r\nimport { FormUtilsService } from './services/form-utils.service';\r\nimport { QuestionChoiceComponent } from './components/question-choice/question-choice.component';\r\nimport { OptionPickerComponent } from './components/option-picker/option-picker.component';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { PublicContactInfoComponent } from './components/public-contact-info/public-contact-info.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n FitWizardComponent,\r\n QuestionChoiceComponent,\r\n QuestionnaireStepperComponent,\r\n RankedChoiceControlComponent,\r\n FitResultsLoadingComponent,\r\n ServiceListingMatchingComponent,\r\n ServiceListingResultsLoadingComponent,\r\n ServiceListingMatchingUpdateComponent,\r\n ProgressIndicatorComponent,\r\n ProgressTooltipComponent,\r\n AppProgressTooltipDirective,\r\n OptionPickerComponent,\r\n PublicDisclaimerComponent,\r\n PublicContactInfoComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n FitWizardRoutingModule,\r\n MatStepperModule,\r\n MatChipsModule,\r\n MatListModule,\r\n DragDropModule,\r\n MatProgressSpinnerModule,\r\n OverlayModule,\r\n ],\r\n exports: [\r\n QuestionnaireStepperComponent,\r\n FitResultsLoadingComponent,\r\n FitWizardComponent,\r\n ],\r\n providers: [\r\n FormUtilsService\r\n ]\r\n})\r\nexport class FitWizardModule { }\r\n","import { createFeatureSelector } from '@ngrx/store';\r\nimport { fitFeatureKey, FitState } from '../fit.reducers';\r\n\r\nexport const selectFitState = createFeatureSelector(fitFeatureKey);\r\n","import { selectFitState } from './root.selector';\r\nimport { createSelector } from '@ngrx/store';\r\n\r\nexport const selectSearchId = createSelector(\r\n selectFitState,\r\n (state) => state.searchId\r\n);\r\n"],"x_google_ignoreList":[]}