All files / src/components/settings useGroupedEngineFields.ts

0% Statements 0/19
100% Branches 0/0
0% Functions 0/8
0% Lines 0/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37                                                                         
import uniq from "lodash/uniq";
import { useEffect, useState } from "react";
import { useAppSelector } from "store/hooks";
import l10n, { L10NKey } from "shared/lib/lang/l10n";
import { EngineFieldSchema } from "store/features/engine/engineState";
 
export type EngineFieldGroup = {
  name: string;
  searchMatches: string[];
  fields: EngineFieldSchema[];
};
 
export const useGroupedEngineFields = () => {
  const fields = useAppSelector((state) => state.engine.fields);
  const [groupedFields, setGroupedFields] = useState<EngineFieldGroup[]>([]);
 
  useEffect(() => {
    const groups = uniq(fields.map((f) => f.group));
    setGroupedFields(
      groups.map((g) => {
        const groupFields = fields.filter((f) => f.group === g);
        return {
          name: g,
          searchMatches: ([] as string[]).concat(
            l10n(g as L10NKey),
            groupFields.map((field) => field.key),
            groupFields.map((field) => l10n(field.label as L10NKey))
          ),
          fields: groupFields,
        };
      })
    );
  }, [fields]);
 
  return groupedFields;
};