All files / src/components/settings useGroupedEngineFields.ts

0% Statements 0/27
0% Branches 0/4
0% Functions 0/11
0% Lines 0/23

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 44 45 46 47 48 49 50 51 52 53                                                                                                         
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";
 
type EngineFieldGroup = {
  name: string;
  sceneType?: string;
  searchMatches: string[];
  fields: EngineFieldSchema[];
};
 
export const useGroupedEngineFields = (sceneType?: string) => {
  const fields = useAppSelector((state) => state.engine.fields);
  const disabledSceneTypeIds = useAppSelector(
    (state) => state.project.present.settings.disabledSceneTypeIds,
  );
  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) => {
          Iif (g.sceneType && disabledSceneTypeIds.includes(g.sceneType)) {
            return false;
          }
          Iif (sceneType) {
            return g.sceneType === sceneType;
          }
          return true;
        })
        .sort((a, b) => a.name.localeCompare(b.name)),
    );
  }, [disabledSceneTypeIds, fields, sceneType]);
 
  return groupedFields;
};