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 | 3x 3x 3x 3x 3x | 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) => {
if (g.sceneType && disabledSceneTypeIds.includes(g.sceneType)) {
return false;
}
if (sceneType) {
return g.sceneType === sceneType;
}
return true;
})
.sort((a, b) => a.name.localeCompare(b.name)),
);
}, [disabledSceneTypeIds, fields, sceneType]);
return groupedFields;
};
|