private buildAggregations()

in packages/search-ui-elasticsearch-connector/src/queryBuilders/SearchQueryBuilder.ts [59:128]


  private buildAggregations() {
    if (
      !this.queryConfig.facets ||
      !Object.keys(this.queryConfig.facets).length
    ) {
      return null;
    }

    const hasSelectedFilters = this.state.filters?.some(
      (selectedFilter) =>
        !this.queryConfig.filters?.find(
          (baseFilter) => baseFilter.field === selectedFilter.field
        )
    );

    return Object.entries(this.queryConfig.facets).reduce(
      (acc, [facetKey, facetConfiguration]) => {
        const isDisjunctive =
          this.queryConfig.disjunctiveFacets?.includes(facetKey);
        if (isDisjunctive && hasSelectedFilters) {
          acc[`facet_bucket_${facetKey}`] = {
            aggs: {
              [facetKey]: transformFacetToAggs(facetKey, facetConfiguration)
            },
            filter: {
              bool: {
                must: this.state.filters
                  .filter(
                    (filter) =>
                      filter.field !== facetKey &&
                      this.queryConfig.facets[filter.field]
                  )
                  .map((filter) =>
                    transformFacet(
                      filter,
                      this.queryConfig.facets[filter.field],
                      this.queryConfig.disjunctiveFacets?.includes(filter.field)
                    )
                  )
              }
            }
          };
        } else {
          acc.facet_bucket_all.aggs = {
            ...acc.facet_bucket_all.aggs,
            [facetKey]: transformFacetToAggs(facetKey, facetConfiguration)
          };
        }
        return acc;
      },
      {
        facet_bucket_all: {
          aggs: {},
          filter: {
            bool: {
              must: (this.state.filters || [])
                .filter((filter) => this.queryConfig.facets[filter.field])
                .map((filter) =>
                  transformFacet(
                    filter,
                    this.queryConfig.facets[filter.field],
                    this.queryConfig.disjunctiveFacets?.includes(filter.field)
                  )
                )
            }
          }
        }
      }
    );
  }