All files / src/shared/lib/entities buildPrefabNavigatorItems.ts

0% Statements 0/16
0% Branches 0/8
0% Functions 0/5
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109                                                                                                                                                                                                                         
import { buildEntityNavigatorItems } from "shared/lib/entities/buildEntityNavigatorItems";
import { actorName, triggerName } from "shared/lib/entities/entitiesHelpers";
import {
  ActorPrefabNormalized,
  TriggerPrefabNormalized,
} from "shared/lib/entities/entitiesTypes";
import l10n from "shared/lib/lang/l10n";
 
export type PrefabNavigatorItem = {
  id: string;
  name: string;
  filename: string;
  nestLevel?: number;
} & (
  | {
      type: "actorPrefabFolder";
      isRoot: boolean;
    }
  | {
      type: "actorPrefab";
      entity: ActorPrefabNormalized;
    }
  | {
      type: "triggerPrefabFolder";
      isRoot: boolean;
    }
  | {
      type: "triggerPrefab";
      entity: TriggerPrefabNormalized;
    }
);
 
export const buildPrefabNavigatorItems = (
  allActorPrefabs: ActorPrefabNormalized[],
  allTriggerPrefabs: TriggerPrefabNormalized[],
  openFolders: string[],
  searchTerm: string,
): PrefabNavigatorItem[] => {
  const actorPrefabItems: PrefabNavigatorItem[] =
    buildEntityNavigatorItems<ActorPrefabNormalized>(
      allActorPrefabs.map((actorPrefab, index) => ({
        ...actorPrefab,
        name: actorName(actorPrefab, index),
      })),
      openFolders,
      searchTerm,
      undefined,
      1,
    ).map((item) => {
      if (item.type === "entity" && item.entity) {
        return {
          ...item,
          type: "actorPrefab",
          entity: item.entity,
        };
      } else {
        return {
          ...item,
          type: "actorPrefabFolder",
          isRoot: false,
        };
      }
    });
 
  const triggerPrefabItems: PrefabNavigatorItem[] = buildEntityNavigatorItems(
    allTriggerPrefabs.map((triggerPrefab, index) => ({
      ...triggerPrefab,
      name: triggerName(triggerPrefab, index),
    })),
    openFolders,
    searchTerm,
    undefined,
    1,
  ).map((item) => {
    if (item.type === "entity" && item.entity) {
      return {
        ...item,
        type: "triggerPrefab",
        entity: item.entity,
      };
    } else {
      return {
        ...item,
        type: "triggerPrefabFolder",
        isRoot: false,
      };
    }
  });
 
  return [
    {
      id: "actors",
      type: "actorPrefabFolder",
      name: l10n("FIELD_ACTORS"),
      filename: l10n("FIELD_ACTORS"),
      isRoot: true,
    },
    ...actorPrefabItems,
    {
      id: "triggers",
      type: "triggerPrefabFolder",
      name: l10n("FIELD_TRIGGERS"),
      filename: l10n("FIELD_TRIGGERS"),
      isRoot: true,
    },
    ...triggerPrefabItems,
  ];
};