export function adaptFilterConfig()

in packages/search-ui-site-search-connector/src/requestAdapters.ts [46:96]


export function adaptFilterConfig(filters: Filter[]) {
  if (!filters || Object.keys(filters).length === 0) return;

  return filters.reduce((acc, filter) => {
    const fieldName = filter.field;
    const fieldValue = filter.values;

    if (acc[fieldName]) {
      console.warn(
        "search-ui-site-search-connector: More than one filter found for a single field"
      );
      return acc;
    }

    if (filter.type && filter.type !== "all" && filter.type !== "any") {
      console.warn(
        `search-ui-site-search-connector: Unsupported filter type "${filter.type}" found, only "all" and "any" are currently supported`
      );
      return acc;
    }

    if (fieldValue.find((v) => typeof v === "object") !== undefined) {
      if (fieldValue.length > 1) {
        console.warn(
          "search-ui-site-search-connector: Cannot apply more than 1 none-value filters to a single field"
        );
        return acc;
      }

      const firstValue = fieldValue[0];
      if (helpers.isFilterValueRange(firstValue)) {
        // eslint-disable-next-line
        const { name, ...rest } = firstValue;
        acc[fieldName] = {
          type: "range",
          ...rest
        };
        return acc;
      } else {
        return acc;
      }
    }

    acc[fieldName] = {
      ...adaptFilterType(filter.type),
      values: fieldValue
    };

    return acc;
  }, {});
}