All files / src/components/settings useGroupedEngineFields.ts

0% Statements 0/20
0% Branches 0/2
0% Functions 0/9
0% Lines 0/16

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 38 39 40 41 42 43                                                                                     
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;
  sceneType?: string;
  searchMatches: string[];
  fields: EngineFieldSchema[];
};
 
export const useGroupedEngineFields = (sceneType?: string) => {
  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,
            sceneType: groupFields[0].sceneType,
            searchMatches: ([] as string[]).concat(
              l10n(g as L10NKey),
              groupFields.map((field) => field.key),
              groupFields.map((field) => l10n(field.label as L10NKey)),
            ),
            fields: groupFields,
          };
        })
        .filter((g) => {
          return !sceneType || g.sceneType === sceneType;
        }),
    );
  }, [fields, sceneType]);
 
  return groupedFields;
};