{
  "version": 3,
  "sources": ["../../../packages/apps/connect/web/src/stores/search-store.ts"],
  "sourcesContent": ["import { action, computed, observable, runInAction } from 'mobx';\nimport { computedFn } from 'mobx-utils';\n\nimport createContext from 'bz-utilities/hooks/context-v2';\n\nimport { GetAllowedPlaceholderServicesForCase } from 'caseflow/api.dtos';\n\nimport { client } from 'connect/core/client';\n\nimport {\n  ConnectValidateAccessCodeRequest,\n  ConnectValidateBusinessRouteRequest,\n  OnlineClinicService,\n  OnlineInitialRequest\n} from 'tm3-core/api.dtos';\nimport type {\n  Lookup,\n  OnlineLocationDto,\n  OnlinePractitionerDto,\n  OnlineSection,\n  OnlineServiceCategory,\n  PackageResponse\n} from 'tm3-core/api.dtos';\n\nexport enum SearchType {\n  Initial,\n  Appointment,\n  Class\n}\n\nexport const [SearchStoreCtx, useSearchStore] = createContext<SearchStore>('SearchStore');\n\nclass SearchStore {\n  @observable loading = true;\n  @observable placeHolderLoading = true;\n\n  @observable loaded = false;\n  @observable services = observable.array<OnlineClinicService>([]);\n  @observable categories = observable.array<OnlineServiceCategory>([]);\n  @observable sections = observable.array<OnlineSection>([]);\n  @observable _packages = observable.array<PackageResponse>([]);\n  @observable excludedPackages = observable.array<string>([]);\n\n  @observable practitioners = observable.array<OnlinePractitionerDto>([]);\n  @observable locations = observable.array<OnlineLocationDto>([]);\n  @observable lookups = observable.array<Lookup>([]);\n  @observable _allowedPlaceholderServices = observable.array<OnlineClinicService>([]);\n  @observable validPath = false;\n  @observable pathError = 'Invalid Path';\n  @observable mode = SearchType.Initial;\n  @observable locationId: string | null = null;\n  @observable isWaitingListFeatureOn: boolean = false;\n  @observable isCaseflow: boolean = false;\n  @observable accessCodePassed: boolean = false;\n  @observable accessCodeLoading: boolean = false;\n  @observable accessCodeFailed: boolean = false;\n  @observable forceService?: OnlineClinicService = undefined; // Caseflow placeholder service selection\n  @observable isMfaEnabled?: boolean;\n\n  @observable baseService?: OnlineClinicService = undefined;\n\n  loadingPromise!: Promise<void>;\n\n  private readonly isActiveClass = computedFn((s: OnlineClinicService): boolean => {\n    if (!s.isClassService || s.isCourse) {\n      return false;\n    }\n\n    return this.categories.some((c) => this.isCategoryOnline(c, s));\n  });\n\n  private readonly isCategoryOnline = computedFn(\n    (c: OnlineServiceCategory, s: OnlineClinicService): boolean => {\n      const orderedServices = c.orderedServices ?? [];\n      const isOnline = orderedServices.some(\n        (serviceId) => serviceId === s.id && c.isOnline && !c.hideFromExplore\n      );\n\n      if (isOnline) {\n        return true;\n      }\n\n      // [Tomasz] - This recursively checks child categories\n      return this.categories.some((cc) => this.isChildCategoryOnline(cc, c, s));\n    }\n  );\n\n  private readonly isChildCategoryOnline = computedFn(\n    (cc: OnlineServiceCategory, c: OnlineServiceCategory, s: OnlineClinicService): boolean => {\n      return cc.id === c.parentId && this.isCategoryOnline(cc, s);\n    }\n  );\n\n  @computed\n  get packages(): PackageResponse[] {\n    return this._packages.filter((x) => !this.excludedPackages.includes(x.onlineGuid ?? ''));\n  }\n\n  @computed\n  get hasClasses(): boolean {\n    return this.services.some((s) => this.isActiveClass(s));\n  }\n\n  @computed\n  get hasAppointments(): boolean {\n    return this.services.some((s) => {\n      if (s.isClassService || s.isCourse) {\n        return false;\n      }\n\n      return this.categories.some((c) => {\n        const orderedServices = c.orderedServices ?? [];\n        return orderedServices.some(\n          (serviceId) => serviceId === s.id && c.isOnline && !c.parentId && !c.hideFromExplore\n        );\n      });\n    });\n  }\n\n  @computed\n  get allowedPlaceholderServices() {\n    const { _allowedPlaceholderServices } = this;\n    const { baseService } = this;\n    return _allowedPlaceholderServices.map(\n      (override) =>\n        new OnlineClinicService({\n          ...baseService,\n          ...override\n        })\n    );\n  }\n\n  @action.bound\n  async load(): Promise<void> {\n    this.loading = true;\n\n    const res = await client.get(new OnlineInitialRequest());\n    const serviceId = localStorage.getItem('accessCodeServiceId');\n    const accessCode = localStorage.getItem('accessCode');\n\n    runInAction(() => {\n      const {\n        categories,\n        services,\n        practitioners,\n        locations,\n        sections,\n        packages,\n        lookups,\n        isWaitingListEnabled,\n        isCaseflow,\n        isMfaEnabled\n      } = res!.result!;\n\n      this.categories.replace(categories);\n      this.services.replace(services);\n      this.locations.replace(locations);\n      this.practitioners.replace(practitioners);\n      this.sections.replace(sections);\n      this._packages.replace(packages);\n      this.lookups.replace(lookups);\n      this.isWaitingListFeatureOn = isWaitingListEnabled;\n      this.isMfaEnabled = isMfaEnabled;\n      this.isCaseflow = isCaseflow;\n      if (serviceId && accessCode) {\n        this.validateAccessCode(serviceId, accessCode);\n      }\n      this.loaded = true;\n      this.loading = false;\n    });\n  }\n\n  @action.bound\n  trackPackagePurchase(packageId?: string): void {\n    if (!packageId) {\n      return;\n    }\n\n    let pkg = this._packages.find((x) => x.onlineGuid === packageId);\n\n    if (!pkg) {\n      return;\n    }\n\n    if (pkg.newCustomersOnly || pkg.onePerCustomer) {\n      this.excludedPackages.push(pkg.onlineGuid!);\n    }\n  }\n\n  async validateUrl(url: string): Promise<void> {\n    await this.loadingPromise;\n    const routes = url.split('/').slice(2);\n\n    if (routes.length === 1) {\n      const service = this.services.find((s) => {\n        return routes[0] === s.urlSlug;\n      });\n\n      if (service != null) {\n        this.validPath = true;\n        return;\n      }\n    }\n\n    let currentCategory: OnlineServiceCategory | null = null;\n\n    const foundRoute = routes.every((route, i) => {\n      const cat = this.categories.find((c) => {\n        return route === c.urlSlug;\n      });\n\n      if (currentCategory == null && cat != null && cat.parentId == null) {\n        currentCategory = cat;\n        return true;\n      }\n\n      if (currentCategory != null && cat != null) {\n        const val = currentCategory.id === cat.parentId;\n\n        currentCategory = cat;\n        return val;\n      }\n\n      if (routes.length - 1 === i && currentCategory != null) {\n        const matchingServices = this.services.filter((s) => {\n          return route === s.urlSlug;\n        });\n\n        return (\n          matchingServices != null &&\n          currentCategory.orderedServices!.some((id) => matchingServices.some((m) => m.id === id))\n        );\n      }\n\n      return false;\n    });\n    if (foundRoute) this.validPath = true;\n    else await this.validateBusinessRoutes(url);\n  }\n\n  @action\n  async validateBusinessRoutes(url: string): Promise<void> {\n    this.loading = true;\n    const { result } = await client.post(new ConnectValidateBusinessRouteRequest({ url }));\n    if (result!.isMatch)\n      runInAction(() => {\n        this.categories.push(...result!.categories);\n        this.services.push(...result!.services);\n        this.validPath = true;\n        this.loading = false;\n      });\n    else\n      runInAction(() => {\n        this.validPath = false;\n        this.loading = false;\n        this.pathError = result!.reason;\n      });\n  }\n\n  @action.bound\n  async validateAccessCode(serviceId: string, accessCode: string): Promise<void> {\n    this.accessCodeLoading = true;\n    const res = await client.post(new ConnectValidateAccessCodeRequest({ serviceId, accessCode }));\n    runInAction(() => {\n      if (res.result) {\n        this.accessCodePassed = true;\n        localStorage.setItem('accessCodeServiceId', serviceId);\n        localStorage.setItem('accessCode', accessCode);\n      } else this.accessCodeFailed = true;\n      this.accessCodeLoading = false;\n    });\n  }\n\n  @action.bound\n  async loadAllowedPlaceholderServices(baseService: OnlineClinicService) {\n    this.placeHolderLoading = true;\n    this.baseService = baseService;\n    const subWorkflowId = sessionStorage.getItem('subWorkflowId');\n    const slug = window.location.pathname.split('/')[2];\n\n    const res = await client.get(\n      new GetAllowedPlaceholderServicesForCase({\n        connectServiceId: baseService.id,\n        subWorkflowId: subWorkflowId,\n        productId: baseService.productId,\n        categorySlug: slug\n      })\n    );\n    runInAction(() => {\n      this.placeHolderLoading = false;\n      this._allowedPlaceholderServices.replace(res.results!);\n      if (this._allowedPlaceholderServices.length === 1) {\n        this.forceService = this.allowedPlaceholderServices[0];\n      }\n    });\n  }\n}\n\nexport default SearchStore;\n"],
  "mappings": "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",
  "names": ["init_virtual_process_polyfill", "init_buffer", "SearchStoreCtx", "useSearchStore", "context_v2_default", "SearchStore", "observable", "computedFn", "s", "c", "serviceId", "cc", "x", "_allowedPlaceholderServices", "baseService", "override", "OnlineClinicService", "res", "client", "OnlineInitialRequest", "accessCode", "runInAction", "categories", "services", "practitioners", "locations", "sections", "packages", "lookups", "isWaitingListEnabled", "isCaseflow", "isMfaEnabled", "packageId", "pkg", "url", "routes", "currentCategory", "route", "i", "cat", "val", "matchingServices", "id", "m", "result", "ConnectValidateBusinessRouteRequest", "ConnectValidateAccessCodeRequest", "subWorkflowId", "slug", "GetAllowedPlaceholderServicesForCase", "__name", "__decorateClass", "computed", "action", "search_store_default"]
}